赞
踩
在学习文件系统管理之前,我个人觉得还是很有必要将磁盘的种类和磁盘的基本结构做一个基本的了解。所以本章将从磁盘的结构---分区---格式化---挂载四个部分来描绘出Linux文件系统的基本管理手段。
从磁盘的类型来说的话可以将磁盘分为机械硬盘和固态硬盘两种。一个常识性的知识就是固态硬盘会被比机械硬盘的速度更快,那么这到底是为什么呢?我们来简单看一下这两者的工作原理。
机械硬盘
上图是机械硬盘的一张基本结构图。用户的数据都是存储在磁盘之上的。当需要读写数据的时候,马达会转动机械臂,主轴马达会转动磁盘,从而进行数据的读写。
数据是存储在磁盘之上的,这个很重要。下面这张图就是磁盘的基本结构。
磁盘结构
可以看到在磁盘上会被同心圆(这些同心圆又称为磁道)切出很多个小区块,在每个小区块里面又有很多的磁粒,磁粒是具有一定的极性的。比如磁性为N代表1,磁性为S代表0。我们将这些小区块统称为扇区。当我们拿到硬盘的时候,为了能够提高硬盘的利用率,通常需要对磁盘进行分区。在早期的时候每个扇区的大小通常是512Bytes,随着技术的发展,目前已经有了4KBytes的扇区设计。磁盘的通常有两面,每一面都可以进行数据的存储,所以每一块磁盘上会有两个磁头。一块机械硬盘可能是由多块磁盘组成,所以我们将在所有的盘片上同一磁道的组合称为柱面。因此一块硬盘的存储容量一般为:
硬盘的存储容量=磁头数*磁道数(柱面数)*每磁道扇区数*每扇区的字节数
数据读取
当我们需要对数据进行读取的时候,马达会转动机械臂到对应的位置,然后由磁头感应对应位置的极性,比如感应到N级代表1,感应到S极代表0。
数据写入
当我们需要对数据进行写入的时候,磁头就会产生磁盘,改变对应位置的极性。由此就可以完成数据的写入或改写。
工作原理
机械臂转动到对应的磁道;
主轴马达转动磁盘到对应扇区,将扇区转动到磁头下方,进行数据的读取;
总结
机械硬盘的数据读取的延迟会很高,因为进行数据读取的时候需要分别转动机械臂和磁盘,并且如果一个数据被分散在许多不同的扇区,那么这个数据的读取将会更加漫长。因此就诞生了纯电路结构的固态硬盘。
固态硬盘
固态硬盘的数据存储则是使用一个又一个的浮栅晶体管,其基本结构如下:
其中浮栅级是用来存储电子的。 当电子数量高于一定的值的时候就是0,低于一定值的时候就是1。
数据的读取
往控制级施加一定的电压时,如果源级别和漏极之间导通,就说明浮栅里有大量的电子判断为0,否则判断为1。
数据的写入
在进行数据写入的时候,往P级施加电压,就可以将浮栅级中的电子吸出,往控制级施加电压的时候就可以将电子吸回浮栅级中。
磁盘的接口
概述
其实硬盘的性能并不仅仅取决于这块硬盘是机械硬盘还是固态硬盘,它还很多参数相关。毕竟大家平时在选购硬盘的时候也会发现,同样是固态硬盘,它们的价格也能相差很多。比如以下这两块固态硬盘同样都是三星生产的,价格差了两倍多。
其实数据读取的快与慢一般取决于三个东西,分别是总线(Bus)、协议(Protocol)、接口(Interface)。
总线(Bus)
我们的个人电脑上有很多的硬件,比如CPU、硬盘、内存、显卡等等。这些不同的电子元器件之间必然有通信的需求。假设CPU想和内存通信,那么CPU和硬盘之间就需要去建立一条物理的电路。我们就把这个通路称为总线。
协议(Protocol)
协议规定了通信双方之间如何去识别对方,如何建立连接等等。举一个简单的例子,如果没有协议,那么在一个闭合电路里面我们只能设置开关的开和断。但是有了协议之后,我可以规定将1s分为10个周期,通电为1,断电为0。那么此时就可以通过大量的通电和断电将想要发送的信息以10bit/s发送给对方,这个规定就可以简单称为协议。这个协议我们也可以理解为是对数据进行编码。不同的协议它传输数据的效率是不一样的。
接口(Interface)
接口就比较好理解了,词如其意,就是指的硬盘的物理接口。
协议、总线和接口都会限制硬盘的发挥,但是通常来说厂商都会将它们去做好对应的匹配,所以我们在选购硬盘的时候一般只需要去关心它们的总线即可。而一般在Linux中我们说的添加SATA硬盘,添加IDE硬盘则指的是硬盘的接口类型。
df命令:df 【选项】
df命令用来查看文件系统的硬盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,以及目前还有多少空间等信息,还可以利用该命令获得文件系统的挂载位置。
- [root@Server01 ~]# df -h
- 文件系统 容量 已用 可用 已用% 挂载点
- devtmpfs 872M 0 872M 0% /dev
- tmpfs 901M 0 901M 0% /dev/shm
- tmpfs 901M 9.7M 891M 2% /run
- tmpfs 901M 0 901M 0% /sys/fs/cgroup
- /dev/mapper/rhel-root 10G 143M 9.9G 2% /
- /dev/mapper/rhel-usr 8.0G 4.0G 4.1G 49% /usr
- /dev/mapper/rhel-tmp 1014M 40M 975M 4% /tmp
- /dev/mapper/rhel-home 8.0G 90M 8.0G 2% /home
- /dev/nvme0n1p2 495M 213M 283M 43% /boot
- /dev/nvme0n1p1 500M 6.8M 493M 2% /boot/efi
- /dev/mapper/rhel-var 8.0G 276M 7.8G 4% /var
- tmpfs 181M 1.2M 179M 1% /run/user/42
- tmpfs 181M 4.6M 176M 3% /run/user/0
- /dev/sr0 7.9G 7.9G 0 100% /run/media/root/RHEL-8-2-0-BaseOS-x86_64
du命令:du 【选项】【目录/文件名】(PS:查看目录里文件的大小,有朋友可能会说ls -lr不也可以吗,其实如果你做过实验的话就会发现这两个命令看到的大小不一致,这个我们会在后面的文件系统部分做介绍。)
- [root@Server01 tmp]# du -h /var/log/
- 0 /var/log/private
- 0 /var/log/samba/old
- 0 /var/log/samba
- 168K /var/log/audit
- 0 /var/log/glusterfs
- 0 /var/log/chrony
- 0 /var/log/speech-dispatcher
- 12K /var/log/cups
- 0 /var/log/libvirt/qemu
- 0 /var/log/libvirt
- 44K /var/log/rhsm
- 12K /var/log/sssd
- 0 /var/log/gdm
- 0 /var/log/swtpm/libvirt/qemu
- 0 /var/log/swtpm/libvirt
- 0 /var/log/swtpm
- 8.0K /var/log/tuned
- 0 /var/log/insights-client
- 0 /var/log/qemu-ga
- 5.3M /var/log/anaconda
- 6.6M /var/log/
通过分区可以帮助我们更高效地利用硬盘。对硬盘进行分区是使用一块硬盘的必要条件,分区通常有以下好处:
常见的分区方案有两个,MSDOS(MBR)分区和GPT(Partition table)分区。在上文提到了一块机械硬盘通常是由多个磁盘组成,每块磁盘里相同的磁道的位置合在一起就称为柱面,柱面通常是分区的最小单位,随着技术的发展,目前甚至可以使用扇区作为分区的最小单位。
早期的Linux系统为了兼容Windows系统使用的分区方案为支持Windows的MBR(主要开机记录区)分区。
起始扇区
在上文里面我们提到磁盘会被划分成很多个磁道,每个磁道里面又有很多个扇区。值得注意的是,硬盘在读取数据的时候,会从外磁道开启读,所以我们将最外面的磁道的第一个扇区称为起始扇区。这个扇区的大小通常为512Bytes,用来存储开机的引导程序和分区表。
起始扇区(512Bytes)
分区表
分区表用来记录分区状态,因为其大小为64Bytes,所以最多只能有4组分区。每组记录区里面记录了该分区的起始和结束的柱面号码:
使用MBR的分区方案只能分出4个分区,类比成Windows就类似于你的电脑只能有4个盘符。这显然是不太符合现实发展的需要的。因此在MBR里面便有了主分区(Primary)和扩展分区(Extended)之分。
扩展分区的思路是:既然起始扇区只能记录4组的组记录,那么能不能利用其他扇区来记录组记录呢?
其实是可以的,于是在LInux当中我们可以设定4个分区里的任一分区为扩展分区,扩展分区本身并不能直接使用,而是要在扩展分区之下继续划分出逻辑分区,逻辑分区的数量取决于操作系统的限制,目前在Linux当中,SATA硬盘已经可以突破63个以上分区的限制。
总结:
分区工具-fdisk
fdisk -l 查看设备已有的硬盘分区
- [root@Server01 ~]# fdisk -l
- Disk /dev/nvme0n1:100 GiB,107374182400 字节,209715200 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
- 磁盘标签类型:gpt
- 磁盘标识符:19722605-F93B-435F-B827-3CB2BB5A3953
-
- 设备 起点 末尾 扇区 大小 类型
- /dev/nvme0n1p1 2048 1026047 1024000 500M EFI 系统
- /dev/nvme0n1p2 1026048 2050047 1024000 500M Linux 文件系统
- /dev/nvme0n1p3 2050048 83855359 81805312 39G Linux LVM
-
-
- Disk /dev/mapper/rhel-root:10 GiB,10737418240 字节,20971520 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
-
-
- Disk /dev/mapper/rhel-swap:4 GiB,4294967296 字节,8388608 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
-
-
- Disk /dev/mapper/rhel-usr:8 GiB,8589934592 字节,16777216 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
-
-
- Disk /dev/mapper/rhel-home:8 GiB,8589934592 字节,16777216 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
-
-
- Disk /dev/mapper/rhel-var:8 GiB,8589934592 字节,16777216 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
-
-
- Disk /dev/mapper/rhel-tmp:1 GiB,1073741824 字节,2097152 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
- [root@Server01 ~]#
实验案例:
步骤一:新增一块硬盘
1、关机、点击编辑虚拟机设置
2、点击添加
3、选择硬盘,点击下一步
4、 选择一种硬盘类型,点击下一步,这里选择的是SATA硬盘
5、选择 创建新的虚拟磁盘
6、选择新增硬盘大小
7、选择本地存储硬盘名称,之后点击完成就可以了。
步骤二:使用fdisk工具对硬盘进行分区
1、使用fdisk -l查看,发现新增的硬盘
- [root@Server01 ~]# fdisk -l
- Disk /dev/nvme0n1:100 GiB,107374182400 字节,209715200 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
- 磁盘标签类型:gpt
- 磁盘标识符:19722605-F93B-435F-B827-3CB2BB5A3953
-
- 设备 起点 末尾 扇区 大小 类型
- /dev/nvme0n1p1 2048 1026047 1024000 500M EFI 系统
- /dev/nvme0n1p2 1026048 2050047 1024000 500M Linux 文件系统
- /dev/nvme0n1p3 2050048 83855359 81805312 39G Linux LVM
-
-
- Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区
- 单元:扇区 / 1 * 512 = 512 字节
- 扇区大小(逻辑/物理):512 字节 / 512 字节
- I/O 大小(最小/最佳):512 字节 / 512 字节
2、新增的硬盘名称
在Linux中,我们不断强调“一切皆为文件”,一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配),而且硬盘的分区编号也有如下规定。
因此新增的硬盘其实也是以文件的方式存储在/dev目录里面的。比如我们新增的sata接口的硬盘名字变为/dev/sd[a-],NVME硬盘名字便为nvme[0-]。
- [root@Server01 ~]# find /dev/ -type b
- /dev/dm-5
- /dev/dm-4
- /dev/dm-3
- /dev/dm-2
- /dev/dm-1
- /dev/dm-0
- /dev/sr0
- /dev/sda
- /dev/nvme0n1p3
- /dev/nvme0n1p2
- /dev/nvme0n1p1
- /dev/nvme0n1
3、分区的步骤
3.1 指定分区的硬盘 [root@Server01 ~]# fdisk /dev/sda
- [root@Server01 ~]# fdisk /dev/sda
-
- 欢迎使用 fdisk (util-linux 2.32.1)。
- 更改将停留在内存中,直到您决定将更改写入磁盘。
- 使用写入命令前请三思。
-
- 设备不包含可识别的分区表。
- 创建了一个磁盘标识符为 0xcfc5b0fc 的新 DOS 磁盘标签。
-
- 命令(输入 m 获取帮助):
常见的分区指令:
- 命令(输入 m 获取帮助):l
-
- 0 空 24 NEC DOS 81 Minix / 旧 Linu bf Solaris
- 1 FAT12 27 隐藏的 NTFS Win 82 Linux swap / So c1 DRDOS/sec (FAT-
- 2 XENIX root 39 Plan 9 83 Linux c4 DRDOS/sec (FAT-
- 3 XENIX usr 3c PartitionMagic 84 OS/2 隐藏 或 In c6 DRDOS/sec (FAT-
- 4 FAT16 <32M 40 Venix 80286 85 Linux 扩展 c7 Syrinx
- 5 扩展 41 PPC PReP Boot 86 NTFS 卷集 da 非文件系统数据
- 6 FAT16 42 SFS 87 NTFS 卷集 db CP/M / CTOS / .
- 7 HPFS/NTFS/exFAT 4d QNX4.x 88 Linux 纯文本 de Dell 工具
- 8 AIX 4e QNX4.x 第2部分 8e Linux LVM df BootIt
- 9 AIX 可启动 4f QNX4.x 第3部分 93 Amoeba e1 DOS 访问
- a OS/2 启动管理器 50 OnTrack DM 94 Amoeba BBT e3 DOS R/O
- b W95 FAT32 51 OnTrack DM6 Aux 9f BSD/OS e4 SpeedStor
- c W95 FAT32 (LBA) 52 CP/M a0 IBM Thinkpad 休 ea Rufus 对齐
- e W95 FAT16 (LBA) 53 OnTrack DM6 Aux a5 FreeBSD eb BeOS fs
- f W95 扩展 (LBA) 54 OnTrackDM6 a6 OpenBSD ee GPT
- 10 OPUS 55 EZ-Drive a7 NeXTSTEP ef EFI (FAT-12/16/
- 11 隐藏的 FAT12 56 Golden Bow a8 Darwin UFS f0 Linux/PA-RISC
- 12 Compaq 诊断 5c Priam Edisk a9 NetBSD f1 SpeedStor
- 14 隐藏的 FAT16 <3 61 SpeedStor ab Darwin 启动 f4 SpeedStor
- 16 隐藏的 FAT16 63 GNU HURD 或 Sys af HFS / HFS+ f2 DOS 次要
- 17 隐藏的 HPFS/NTF 64 Novell Netware b7 BSDI fs fb VMware VMFS
- 18 AST 智能睡眠 65 Novell Netware b8 BSDI swap fc VMware VMKCORE
- 1b 隐藏的 W95 FAT3 70 DiskSecure 多启 bb Boot Wizard 隐 fd Linux raid 自动
- 1c 隐藏的 W95 FAT3 75 PC/IX bc Acronis FAT32 L fe LANstep
- 1e 隐藏的 W95 FAT1 80 旧 Minix be Solaris 启动 ff BBT
-
- 命令(输入 m 获取帮助):
3.2 划分出一个主分区(因为操作系统只能装在主分区里,所以主分区一定要有)
命令(输入 m 获取帮助):n 分区类型 p 主分区 (0个主分区,0个扩展分区,4空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p):p 分区号 (1-4, 默认 1): 1 第一个扇区 (2048-41943039, 默认 2048): 上个扇区,+sectors 或 +size{K,M,G,T,P} (2048-41943039, 默认 41943039): +1G 创建了一个新分区 1,类型为“Linux”,大小为 1 GiB。 命令(输入 m 获取帮助):p Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xcfc5b0fc 设备 启动 起点 末尾 扇区 大小 Id 类型 /dev/sda1 2048 2099199 2097152 1G 83 Linux 命令(输入 m 获取帮助):
3.3 划分扩展分区和逻辑分区
创建扩展分区(只能有一个)
命令(输入 m 获取帮助):n 分区类型 p 主分区 (1个主分区,0个扩展分区,3空闲) e 扩展分区 (逻辑分区容器) 选择 (默认 p):e 分区号 (2-4, 默认 2): 2 第一个扇区 (2099200-41943039, 默认 2099200): 上个扇区,+sectors 或 +size{K,M,G,T,P} (2099200-41943039, 默认 41943039): +5G 创建了一个新分区 2,类型为“Extended”,大小为 5 GiB。 命令(输入 m 获取帮助):p Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xcfc5b0fc 设备 启动 起点 末尾 扇区 大小 Id 类型 /dev/sda1 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 12584959 10485760 5G 5 扩展
创建逻辑分区
命令(输入 m 获取帮助):n 分区类型 p 主分区 (1个主分区,1个扩展分区,2空闲) l 逻辑分区 (从 5 开始编号) 选择 (默认 p):l 添加逻辑分区 5 第一个扇区 (2101248-12584959, 默认 2101248): 上个扇区,+sectors 或 +size{K,M,G,T,P} (2101248-12584959, 默认 12584959): +2G 创建了一个新分区 5,类型为“Linux”,大小为 2 GiB。 命令(输入 m 获取帮助):p Disk /dev/sda:20 GiB,21474836480 字节,41943040 个扇区 单元:扇区 / 1 * 512 = 512 字节 扇区大小(逻辑/物理):512 字节 / 512 字节 I/O 大小(最小/最佳):512 字节 / 512 字节 磁盘标签类型:dos 磁盘标识符:0xcfc5b0fc 设备 启动 起点 末尾 扇区 大小 Id 类型 /dev/sda1 2048 2099199 2097152 1G 83 Linux /dev/sda2 2099200 12584959 10485760 5G 5 扩展 /dev/sda5 2101248 6295551 4194304 2G 83 Linux 命令(输入 m 获取帮助):w 分区表已调整。 将调用 ioctl() 来重新读分区表。 正在同步磁盘。
MBR分区因为其本身的缺陷,比如最大只能支持2.2TB的硬盘、只能有4个主分区、只有一个扇区用来存储引导记录和分区表等等,所以目前来说MBR的分区方案已经不常用了,目前常用的分区方案为GPT的分区方案。
在过去,一个扇区的大小固定为512Bytes,但是目前已经有了4K的扇区设计出现,为了兼容所有的方案,所以目前大多会使用逻辑区块地址(Logical Block Address,LBA)来处理,GPT将磁盘的所有区块都使用LBA(默认也是512Bytes)来规划,第一个LBA称为LBA0。(简单来说就是MBR方案使用扇区进行规划,GPT方案使用LBA方案规划)
MBR仅仅使用第一个区块来记录分区信息,GPT使用前34个LBA来记录分区信息,后33个LBA来做备份。所以会更加安全。GPT分区默认可以提供128笔记录。
gdisk 分区工具
实验案例:
步骤一:使用相同的方法添加硬盘(本文使用恢复快照的方式使用刚刚添加的硬盘)
步骤二:使用gdisk 工具进行分区
- [root@Server01 ~]# gdisk /dev/sda
- GPT fdisk (gdisk) version 1.0.3
-
- Partition table scan:
- MBR: MBR only
- BSD: not present
- APM: not present
- GPT: not present
-
-
- ***************************************************************
- Found invalid GPT and valid MBR; converting MBR to GPT format
- in memory. THIS OPERATION IS POTENTIALLY DESTRUCTIVE! Exit by
- typing 'q' if you don't want to convert your MBR partitions
- to GPT format!
- ***************************************************************
- Command (? for help): n
- Partition number (1-128, default 1): 1
- First sector (34-41943006, default = 2048) or {+-}size{KMGTP}:
- Last sector (2048-41943006, default = 41943006) or {+-}size{KMGTP}: +1G
- Current type is 'Linux filesystem'
- Hex code or GUID (L to show codes, Enter = 8300):
- Changed type of partition to 'Linux filesystem'
- Command (? for help): w
- Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
- PARTITIONS!!
- Do you want to proceed? (Y/N): y
- OK; writing new GUID partition table (GPT) to /dev/sda.
- The operation has completed successfully.
- [root@Server01 ~]#
分区完成之后可以使用 fdisk -l来查看结果。MBR分区的磁盘磁盘标签类型为DOS,GPT的磁盘标签类型为GPT。
因为不同的操作系统所设置的文件属性和权限并不相同,所以为了存放这些文件所需要的数据就必须在磁盘上写入文件系统。这个过程也称作格式化(Format)。一般情况下,一个分区只能有一个文件系统,但这也并不绝对,比如LVM(逻辑卷)技术。
一个文件的数据可以被分为以下两个部分
文件系统会将这两部分的信息分开存储。其中文件的内容存放在数据区块(Data Block)中,文件的属性信息存放在inode中。此外还有一个超级区块(super block )记录整个文件系统的整体信息。
- [root@Server01 ~]# stat /etc/passwd
- 文件:/etc/passwd
- 大小:2664 块:8 IO 块:4096 普通文件
- 设备:fd00h/64768d Inode:8396039 硬链接:1
- 权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
- 环境:system_u:object_r:passwd_file_t:s0
- 最近访问:2022-09-25 17:09:02.162007998 +0800
- 最近更改:2022-09-05 18:31:38.523946111 +0800
- 最近改动:2022-09-05 18:31:38.524946111 +0800
- 创建时间:-
- [root@Server01 ~]#
Block调大
文件系统与目录的关系
首先我们要明确一个概念,文件本身才是实际记录数据的地方,文件所在的目录一般只记录了文件名和相关的属性信息。
当我们创建一个目录的时候,文件系统就会分配一个inode号和至少一个block给该目录。inode号用来记录该目录的权限信息,block用来记录该目录里的文件名和属性信息。所以在权限管理的时候当我们想删除一个文件需要用到目录的w权限,原因便在这里。
系统打开一个文件的过程
目前来说在Linux当中,新建一个分区的时候通常会写入xfs文件系统,常见的文件系统还有很多,如果感兴趣的话可以在baidu/bing中进行查询,或者查看《鸟哥的Linux私房菜第四版》这里就简单地去介绍一下文件系统的写入实例。
使用mkfs写入文件系统
mkfs格式:mkfs [参数] 文件系统
示例:
- [root@Server01 ~]# mkfs.xfs /dev/sda1
- meta-data=/dev/sda1 isize=512 agcount=4, agsize=65536 blks
- = sectsz=512 attr=2, projid32bit=1
- = crc=1 finobt=1, sparse=1, rmapbt=0
- = reflink=1
- data = bsize=4096 blocks=262144, imaxpct=25
- = sunit=0 swidth=0 blks
- naming =version 2 bsize=4096 ascii-ci=0, ftype=1
- log =internal log bsize=4096 blocks=2560, version=2
- = sectsz=512 sunit=0 blks, lazy-count=1
- realtime =none extsz=4096 blocks=0, rtextents=0
- [root@Server01 ~]#
既然分区是为了更好地利用磁盘,格式化是因为在不同的操作系统之间文件的属性信息不一致,那么挂载又是为了什么呢?
每个文件系统都有自己独有的inode记录文件属性信息,有Block存放文件的内容,有Superblock存放总体的一个概况,但是唯独缺少一个进入到文件系统的入口。因此挂载的意义也就因此诞生,挂载就是为了给系统提供一个访问硬盘的入口。所以挂载点一定是目录。Linux系统中提供了/mnt和/media两个专门的挂载点。通常将光盘和软盘挂载到/media/cdrom(或者/mnt/cdrom)和/media/floppy(或者/mnt/ floppy)中,其对应的设备文件名分别为/dev/cdrom和/dev/fd0。
1、临时挂载
所谓临时挂载就是当下次电脑重启的时候必须进行重新挂载。典型的例子就是将RHEL的光盘文件挂载在/media之下。临时挂载通常使用mount命令,其语法格式为:mount 选项 设备 挂载点
mount命令的主要选项如下。
- [root@Server01 ~]# mount -t iso9660 /dev/cdrom /media/
- mount: /media: WARNING: device write-protected, mounted read-only.
卸载命令通常使用umount,其语法格式为 umount 设备 挂载点
[root@Server01 ~]# umount /media
2、永久挂载
如果要实现每次开机自动挂载文件系统,可以通过编辑/etc/fstab文件来实现,例如将在上一步已经创建好文件系统的sda1执行永久挂载。
第一步:在根目录下新建sda的挂载点
[root@Server01 /]# mkdir sda1
第二步:编辑fstab文件(重启后生效)
- # Created by anaconda on Mon Sep 5 06:25:16 2022
- #
- # Accessible filesystems, by reference, are maintained under '/dev/disk/'.
- # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
- #
- # After editing this file, run 'systemctl daemon-reload' to update systemd
- # units generated from this file.
- #
- /dev/mapper/rhel-root / xfs defaults 0 0
- UUID=3973fe2f-abe0-453d-b9f3-7c27ff180bd2 /boot xfs defaults 0 0
- UUID=E897-CB17 /boot/efi vfat umask=0077,shortname=winnt 0 2
- /dev/mapper/rhel-home /home xfs defaults 0 0
- /dev/mapper/rhel-tmp /tmp xfs defaults 0 0
- /dev/mapper/rhel-usr /usr xfs defaults 0 0
- /dev/mapper/rhel-var /var xfs defaults 0 0
- /dev/mapper/rhel-swap swap swap defaults 0 0
- /dev/sda1 /sda1 xfs defaults 0 0
第三步:验证
- [root@Server01 ~]# df -h
- 文件系统 容量 已用 可用 已用% 挂载点
- devtmpfs 872M 0 872M 0% /dev
- tmpfs 901M 0 901M 0% /dev/shm
- tmpfs 901M 9.7M 891M 2% /run
- tmpfs 901M 0 901M 0% /sys/fs/cgroup
- /dev/mapper/rhel-root 10G 143M 9.9G 2% /
- /dev/mapper/rhel-usr 8.0G 4.0G 4.1G 49% /usr
- /dev/mapper/rhel-tmp 1014M 40M 975M 4% /tmp
- /dev/sda1 1014M 40M 975M 4% /sda1
- /dev/mapper/rhel-home 8.0G 90M 8.0G 2% /home
- /dev/nvme0n1p2 495M 213M 283M 43% /boot
- /dev/nvme0n1p1 500M 6.8M 493M 2% /boot/efi
- /dev/mapper/rhel-var 8.0G 276M 7.8G 4% /var
- tmpfs 181M 1.2M 179M 1% /run/user/42
- tmpfs 181M 4.6M 176M 3% /run/user/0
- /dev/sr0 7.9G 7.9G 0 100% /run/media/root/RHEL-8-2-0-BaseOS-x86_64
全文1w4字左右,其实想要表达的东西就是在Linux当中如何去使用一块硬盘。使用一块硬盘一共需要经历三个步骤:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。