文章目录
- 📝前言
- 🌠 查看系统分区
- 🌉制作一个大的磁盘块,就当做一个分区
- 🌉格式化写入文件系统
- 🌉将分区挂载到指定的目录
- 🌉在分区重创建文件
- 🌉卸载分区
- 🌉分区挂载到目录才能使用
- 🚩总结
📝前言
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]$
-
df -h
命令:df
是"disk free"的缩写,用于查看文件系统的磁盘使用情况。-h
是"human-readable"的缩写,表示以更容易理解的格式(如KB、MB、GB)显示磁盘大小。
-
输出结果各个字段的含义:
Filesystem
: 表示文件系统所在的磁盘分区或设备。Size
: 文件系统的总容量。Used
: 已使用的容量。Avail
: 可用的剩余容量。Use%
: 已使用容量的百分比。Mounted on
: 文件系统挂载的目录。
-
/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
文件系统。
这个命令的作用如下:
- 格式化
disk.iso
文件,将其转换为一个可挂载的 ext4 文件系统。 - 在文件系统中写入必要的元数据,如超级块、inode 表、块描述符等。
- 初始化文件系统的目录结构,如根目录
/
等。
运行这个命令后,disk.iso
文件就变成了一个可用的 ext4 格式的磁盘镜像文件。你可以将其挂载到系统上,就像挂载一个物理磁盘分区一样使用它。
需要注意的是,在运行 mkfs.ext4
之前,请确保 disk.iso
文件已经创建完成,否则可能会出现错误。另外,如果需要使用其他文件系统类型,可以将 ext4
替换为 ext3
、xfs
、btrfs
等其他文件系统类型。
[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]$
-
sudo
: 使用 root 权限执行此命令,因为挂载文件系统通常需要管理员权限。 -
mount -t ext4
: 指定要挂载的文件系统类型为 ext4。这需要与之前使用mkfs.ext4
命令创建的文件系统类型一致。 -
./disk.iso
: 要挂载的磁盘镜像文件的路径。在这里使用了相对路径,表示当前目录下的disk.iso
文件。 -
/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/
分区就清楚了。