自学内容网 自学内容网

【linux学习指南】磁盘分区挂载到目录,形成文件系统挂载点

请添加图片描述


📝前言

在这里插入图片描述
Linux ext2文件系统,上图为磁盘文件系统图(内核内存映像肯定有所不同),磁盘是典型的块设备,硬盘分区被
划分为一个个的block。一个block的大小是由格式化的时候确定的,并且不可以更改。例如mke2fs的-b选项可以设
定block大小为1024、2048或4096字节。而上图中启动块(Boot Block)的大小是确定的

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。政府管理各区的例子
  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了
  • GDT,Group Descriptor Table:块组描述符,描述块组属性信息,有兴趣的同学可以在了解一下
  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用
  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。
  • i节点表:存放文件属性 如 文件大小,所有者,最近修改时间等
  • 数据区:存放文件内容
    在这里插入图片描述

🌠 查看系统分区

[wks@hcss-ecs-ab43 file_patition_lesson]$ ls /dev/vda*
/dev/vda  /dev/vda1
[wks@hcss-ecs-ab43 file_patition_lesson]$ 

这是一种常见的磁盘分区布局。通常情况下:

  • /dev/vda 代表整块磁盘设备
  • /dev/vda1/dev/vda2 等代表这个磁盘设备上划分的不同分区

我这里只有一个/dev/vda1分区,以下查看文件系统的磁盘使用情况:

[wks@hcss-ecs-ab43 file_patition_lesson]$ df -h
df:/tmp/.mount_nvimxPjzYC’: Transport endpoint is not connected
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           919M   12K  919M   1% /dev/shm
tmpfs           919M   98M  822M  11% /run
tmpfs           919M     0  919M   0% /sys/fs/cgroup
/dev/vda1        40G  8.0G   30G  22% /
tmpfs           184M     0  184M   0% /run/user/1003
tmpfs           184M     0  184M   0% /run/user/0
[wks@hcss-ecs-ab43 file_patition_lesson]$ 
  1. df -h命令:

    • df是"disk free"的缩写,用于查看文件系统的磁盘使用情况。
    • -h是"human-readable"的缩写,表示以更容易理解的格式(如KB、MB、GB)显示磁盘大小。
  2. 输出结果各个字段的含义:

    • Filesystem: 表示文件系统所在的磁盘分区或设备。
    • Size: 文件系统的总容量。
    • Used: 已使用的容量。
    • Avail: 可用的剩余容量。
    • Use%: 已使用容量的百分比。
    • Mounted on: 文件系统挂载的目录
  3. /dev/vda1 40G 8.0G 30G 22% /这一行:

    • /dev/vda1 表示这是一个名为 vda1 的磁盘分区。
    • 这个分区的总容量为 40GB,已使用 8GB,剩余可用空间 30GB,使用率为 22%。
    • 这个分区被挂载到根目录 / 下。

🌉制作一个大的磁盘块,就当做一个分区

dd 命令是 Linux 和 Unix 系统中非常强大和重要的命令之一。它主要用于以下几个方面:
数据转换和复制:

  • 可以从一个文件或设备读取数据,并将其写入到另一个文件或设备中。
  • 支持各种数据块大小和转换选项,可以实现如镜像备份、磁盘克隆等功能。

dd 命令的语法格式如下:

dd [选项]... [if=文件] [of=文件] [bs=bytes] [count=blocks] [seek=blocks]

其中最常用的几个选项包括:

  • if=: 指定输入文件
  • of=: 指定输出文件
  • bs=: 指定读写的块大小
  • count=: 指定读写的块数
  • conv=: 指定数据转换选项

首先创建目录。制作一个大的磁盘区就当做一个分区。这里使用dd命令。

[wks@hcss-ecs-ab43 file_patition_lesson]$ mkdir disk.iso
[wks@hcss-ecs-ab43 file_patition_lesson]$ dd if=/dev/zero of=./disk.iso bs=1M count=5
5+0 records in
5+0 records out
5242880 bytes (5.2 MB) copied, 0.00503848 s, 1.0 GB/s
[wks@hcss-ecs-ab43 file_patition_lesson]$ 

这段命令输出是在 Linux 系统上使用 dd 命令创建一个 5MB 大小的磁盘镜像文件 disk.iso
dd if=/dev/zero of=./disk.iso bs=1M count=5

  • if=/dev/zero: 指定从 /dev/zero 设备读取输入数据。这个设备会产生无限量的 0 值字节。
  • of=./disk.iso: 指定将输出写入到当前目录下的 disk.iso 文件。
  • bs=1M: 指定每次读写的块大小为 1MB。
  • count=5: 指定读写 5 个块,也就是 5MB 的数据。

🌉格式化写入文件系统

mkfs.ext4 命令用于在磁盘分区或文件上创建 ext4 文件系统。

这个命令的作用如下:

  1. 格式化 disk.iso 文件,将其转换为一个可挂载的 ext4 文件系统。
  2. 在文件系统中写入必要的元数据,如超级块、inode 表、块描述符等。
  3. 初始化文件系统的目录结构,如根目录 / 等。

运行这个命令后,disk.iso 文件就变成了一个可用的 ext4 格式的磁盘镜像文件。你可以将其挂载到系统上,就像挂载一个物理磁盘分区一样使用它。

需要注意的是,在运行 mkfs.ext4 之前,请确保 disk.iso 文件已经创建完成,否则可能会出现错误。另外,如果需要使用其他文件系统类型,可以将 ext4 替换为 ext3xfsbtrfs 等其他文件系统类型。

[wks@hcss-ecs-ab43 file_patition_lesson]$ mkfs.ext4 disk.iso  #格式化写入文件系统
mke2fs 1.42.9 (28-Dec-2013)
disk.iso is not a block special device.
Proceed anyway? (y,n) y//这里y确认

创建空目录

[wks@hcss-ecs-ab43 file_patition_lesson]$ sudo mkdir /mnt/mydisk
[sudo] password for wks: 
[wks@hcss-ecs-ab43 file_patition_lesson]$ ll
total 1152
-rw-rw-r-- 1 wks wks 5242880 Nov  8 20:49 disk.iso

查看可以使用的分区

[wks@hcss-ecs-ab43 file_patition_lesson]$ df -h
df: ‘/tmp/.mount_nvimxPjzYC’: Transport endpoint is not connected
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           919M   12K  919M   1% /dev/shm
tmpfs           919M   98M  822M  11% /run
tmpfs           919M     0  919M   0% /sys/fs/cgroup
/dev/vda1        40G  8.0G   30G  22% /
tmpfs           184M     0  184M   0% /run/user/1003
tmpfs           184M     0  184M   0% /run/user/0
[wks@hcss-ecs-ab43 file_patition_lesson]$ 

🌉将分区挂载到指定的目录

disk.iso 文件挂载到 /mnt/mydisk/ 目录下

[wks@hcss-ecs-ab43 file_patition_lesson]$ sudo mount -t ext4 ./disk.iso /mnt/mydisk/
[wks@hcss-ecs-ab43 file_patition_lesson]$ df -h
df:/tmp/.mount_nvimxPjzYC’: Transport endpoint is not connected
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           919M   12K  919M   1% /dev/shm
tmpfs           919M   98M  822M  11% /run
tmpfs           919M     0  919M   0% /sys/fs/cgroup
/dev/vda1        40G  8.0G   30G  22% /
tmpfs           184M     0  184M   0% /run/user/1003
tmpfs           184M     0  184M   0% /run/user/0
/dev/loop0      3.9M   53K  3.5M   2% /mnt/mydisk
[wks@hcss-ecs-ab43 file_patition_lesson]$ 
  1. sudo: 使用 root 权限执行此命令,因为挂载文件系统通常需要管理员权限。

  2. mount -t ext4: 指定要挂载的文件系统类型为 ext4。这需要与之前使用 mkfs.ext4 命令创建的文件系统类型一致。

  3. ./disk.iso: 要挂载的磁盘镜像文件的路径。在这里使用了相对路径,表示当前目录下的 disk.iso 文件。

  4. /mnt/mydisk/: 挂载点的目录。这是一个空目录,用于挂载 disk.iso 文件系统。如果该目录不存在,需要先创建它。

执行这个命令后,Linux 系统会将 disk.iso 文件作为一个 ext4 文件系统挂载到 /mnt/mydisk/ 目录下。此时,你就可以像访问普通文件系统一样访问和操作 disk.iso 中的文件和目录了。

接下来我们就可以进去这个分区,路径也就是分区的开头

[wks@hcss-ecs-ab43 file_patition_lesson]$ ll
total 1152
-rw-rw-r-- 1 wks wks 5242880 Nov  8 21:00 disk.iso
[wks@hcss-ecs-ab43 file_patition_lesson]$ cd /mnt/mydisk
[wks@hcss-ecs-ab43 mydisk]$ pwd
/mnt/mydisk

🌉在分区重创建文件

分区中创建文件

[wks@hcss-ecs-ab43 mydisk]$ sudo touch test.txt
[sudo] password for wks:
[wks@hcss-ecs-ab43 mydisk]$ ls -al
total 17
drwxr-xr-x  3 root root  1024 Nov  8 21:07 .
drwxr-xr-x. 4 root root  4096 Nov  8 20:56 ..
drwx------  2 root root 12288 Nov  8 20:49 lost+found
-rw-r--r--  1 root root     0 Nov  8 21:07 test.txt
[wks@hcss-ecs-ab43 mydisk]$ 

🌉卸载分区

当使用umount 卸载分区,会提示系统繁忙,这是因为,你还在这个分区内,只要退出这个分区,就可以进行删除。

[wks@hcss-ecs-ab43 mydisk]$ sudo umount /mnt/mydisk
umount: /mnt/mydisk: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[wks@hcss-ecs-ab43 mydisk]$ df -h
df:/tmp/.mount_nvimxPjzYC’: Transport endpoint is not connected
Filesystem      Size  Used Avail Use% Mounted on
devtmpfs        909M     0  909M   0% /dev
tmpfs           919M   12K  919M   1% /dev/shm
tmpfs           919M   98M  822M  11% /run
tmpfs           919M     0  919M   0% /sys/fs/cgroup
/dev/vda1        40G  8.0G   30G  22% /
tmpfs           184M     0  184M   0% /run/user/1003
tmpfs           184M     0  184M   0% /run/user/0
/dev/loop0      3.9M   53K  3.5M   2% /mnt/mydisk
[wks@hcss-ecs-ab43 mydisk]$

切换到别的目录,或者分区,就可以卸载分区,但是回到根目录,想再进行卸载根目录分区,无法做到,因为你切换不到别的分区了
卸载成功:
在这里插入图片描述

🌉分区挂载到目录才能使用

**问题:
你怎么确认你在哪一个分区里面?? ?
多个分区->一个分区包含/->若干个普通目录->/a /b /c /d->
分区无法直接使用,分区必须经过“挂载”到目录上,分区才可以被用通过路径的方式进行访问!
**

当分区只有挂到目录上才能使用,那么任何一个分区,天然有了基本的路径

/dev/loop0      3.9M   53K  3.5M   2% /mnt/mydisk

当我们进去到一个分区挂载到一个目录上时,

cd mnt/XXX

此时,在分区里进行操作分区,创建目录之类的操作,因此一个文件的路径是
由分区+ 自己的操作路径,这就知道pwd是怎么获取到路径是这样来的

mkdir /mnt/XXX/whb/dircd /
cd mnt/XXX/whb/dir

怎么确认我们在哪个分区下呢?

/mnt/mydisk/XXXX/XXXX

当我们的路径从根目录进行解析时,首先解析到/mnt/mydisk/分区就清楚了。


🚩总结

请添加图片描述


原文地址:https://blog.csdn.net/a_hong_sen/article/details/143633467

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!