Chapter9 - 向linux 系统添加磁盘、分区和文件系统
使用fdisk
在采用MBR
分区方案的磁盘上创建和删除磁盘分区
使用gdisk
在采用 GPT
分区方案的磁盘上创建和删除磁盘分区
使用mkfs
格式化带有文件系统的设备
磁盘分区
硬盘分区可以将硬盘划分为多个逻辑存储单元,这些单元称为分区。通过将磁盘划分为多个分区,系统管理员可以使用不同的分区执行不同功能,例如:
- 限制应用或用户的可用空间
- 允许从同一磁盘进行不同操作系统的多重启动
- 将操作系统和程序文件与用户文件分隔开。
- 创建用于操作系统虚拟内存交换的单独区域。
- 限制磁盘空间使用情况,提高诊断工具和备份映像的性能。
MBR 分区方案
MBR 指定BIOS 如果对磁盘进行分区,最多支持4个主分区,在linux 上可以使用扩展分区和逻辑分区来创建最多15个
分区。由于分区大小数据以32位
值存储,最大磁盘和分区大小限制为 2 TiB
GPT 分区方案
对于运行统一可扩展固件接口接口(UEFI
)固件的系统,GPT
是在物理硬盘上布置上分区表的标准。GPT是UEFI 标准的一部分。GPT 默认情况下支持最多128个
分区。GPT 使用 64位
值,支持最大 8 ZiB
。即80亿太字节
的分区和磁盘。
注意
GTP 的 8 ZiB
限制是基于512字节
的块大小,随着硬盘驱动器供应商转为使用 4096 字节
块,此限制将增加至64 ZiB
.
除解决 MBR 分区方案的限制以外,GPT 还可提供一些其他功能特性和优势。正如其名,GPT 使用128的GUID
来唯一识别每个磁盘和分区。与 MBR 存在单一故障点不同, GPT 提供分区表信息的冗余。主GPT 位于磁盘头部,而备份副本(次要GPT)位于磁盘尾部。此外 GPT 采用CRC
校验和来检测 GPT 头
和分区表
中的错误与损坏。
使用fdisk 管理MBR 分区
创建 MBR 式磁盘分区涉及八个步骤:
- 指定设备,以
root
身份运行

- 请求一个新的
主分区可扩展分区
输入 n 以请求一个新分区,并指定该分区是主分区还是扩展分区。默认为主分区类型,超过4个分区
可通过扩展分区来解决

- 指定分区编号
用来作为磁盘上新分区的标识使用,默认值是未使用的最小分区编号

- 指定新分区开始的第一个扇区
默认值为第一个可用扇区,一般不需要改

- 指定新分区结束 的最后一个扇区
默认值是与新分区相邻的可用且未分区扇区中的最后一个扇区。

除末尾扇区编号以外,fdisk 还可以接受代表分区期望大小的数字,该数字以扇区数表示:

fdisk 提供的最后一个,也是最为用户友好的输入选项,就是以单位 KB,MB
,或GB
指定新分区的大小:

输入分区的末尾边界后,fdisk
就会显示分区创建的确认信息。

- 定义分区类型
如果新创建的分区应具有 Linux 以外的类型,请输入 t 命令来更改分区类型。输入新分区类型的十六进制代码。如果需要,可使用 L 命令显示所有分区类型的十六进制代码表。正确设置分区类型非常重要,因为某些工具依靠它才能正常运行。例如,当 Linux 内核遇到类型为 0xfd
(Linux RAID)分区时,它将尝试自动启动 RAID
卷。

- 保存分区表更改
发出w
命令,以便将更改写入到磁盘分区表并退出fdisk
程序。从而完成创建请求。

- 启动内核对新分区表的重新读取。
运行partprobe
命令,并将磁盘设备名称作为参数,以强制重新读取其分区表。

tips
仅当管理员发出 w 命令将所有分区表更改定稿到磁盘时,fdisk
程序才会将所有分区表编辑排队,并将这些编辑写入到磁盘。如果在退出交互式fdisk 会话之前未执行 w 命令,则所有请求都会被丢弃,而磁盘的分区表不变。此功能在向fdisk 发出错误命令时尤为实用,要放弃错误的命令并避免意想不到的后果。只需退出 fdisk 并且不保存分区表更改。
删除 MBR 磁盘分区
使用 fdisk 从采用 MBR 分区的磁盘中删除分区需要到五个步骤:
- 指定要删除分区的磁盘,执行
fdisk
命令,并指定磁盘设备名称作为参数 - 确定要删除分区的编号,输入
p
以打印分区表 - 请求删除分区,输入
d
命令启动分区删除,然后指定要删除的分区编号 - 保存分区表更改,发出
w
指令,将更改写入到分区表,从而完成分区表删除请求 - 启动内核对分区表的重新读取,使用
partprobe
以磁盘名称为参数。 ps:partprobe /dev/sdb
使用 gdisk 管理gpt 分区
对于采用 GPT 分区方案的磁盘,可使用 gdisk
分区编辑器管理分区。
警告
尽管已向 fdisk 添加了 GPT 的支持,但该支持仍被视为实验性质,因此应使用 gdisk 命令在采用 GPT 分区方案进行分区的磁盘上执行分区更改。
创建 GPT 磁盘分区需要八个步骤:
- 指定要创建分区的设备,同 fdisk
- 请求新分区,同 fdisk
- 指定分区编号 ,同 fdisk
- 指定新分区开始的磁盘位置,同 fdisk ,支持指定大小(KB,MB,GB,TB,PB)的方式
- 指定磁盘上新分区的最后一个扇区,同 fdisk
- 定义分区类型,操作同 fdisk
- 保存分区表
- 重新加载分区
删除 GPT 的磁盘分区表,同 fdisk 操作
创建文件系统
创建块设备后,下一步是为其应用文件系统格式。文件系统将向块设备应用一种结构 ,这样就可以存储数据并从中检索数据。红帽企业 Linux 支持许多不同的文件系统类型,其中两种常见的类型是 xfs
和 ext4
。红帽企业 Linux 安装程序anaconda
中默认使用 xfs .
mkfs
命令可用于为块设备应用文件系统。如果不指定类型,则将使用扩展类型二(ext2)文件系统,该类型在许多使用场合下并不可取。要指定文件类型,应使用-t
。

挂载文件系统
应用文件系统格式后,添加新文件系统的文件最后一步是将该文件系统连接到目录结构中。文件系统连接到目录层次结构中后,用户空间实用程序可以访问设备上的文件或在设备上写入文件。
手动挂载文件系统
管理员可使用 mount
命令将设备手动连接到目录位置或挂载点,具体为指定设备和挂载点,以及可能需要的任何选项,从而自定义设备的行为。
mount /dev/sdb1 /mnt
mount 还可用于查看当前已挂载的文件系统、挂载点和选项

手动挂载文件系统是验证已经格式化的设备是否可访问或是否按预期方式工作的一种理想方式。但是,当系统重新启动后,尽管文件系统仍然存在并且具有完整的数据,但它不会再次换挂载到目录树中。如果管理员希望永久挂载文件系统,则需要将该文件系统的一个列表添加到 /etc/fstab 。
永久挂载文件系统
通过将设备的列表添加到/etc/fstab
文件中,管理员可心将设备配置为在系统启动后挂载到挂载点。
/etc/fstab
是以空格分隔的文件,每行具有六个字段

第一个字段是指定要使用的设备。示例中分别使用了 UUID 和设备文件两种方式来指定设备。UUID 存储在文件系统超级块中,并在文件系统创建时创建。
tips
使用 UUID 更为可取,因为块设备标识符在特定情况下可能会发生变化,例如当云提供商更改虚拟机的基础存储层时。块设备的文件可能会变化,但UUID 会在设备的超级块中保持不变。
blkid 命令可用于扫描连接到计算机的块设备,并报告已分配的 UUID 和文件系统格式等数据。

第二个字段是设备应连接到目录层次结构中的挂载点。挂载点应已存在,如果不存在,可以使用 mkdir
创建挂载点。挂载点中最好不要有文件。
第三个字段是包含已应用于块设备的文件系统类型。
第四个字段是挂载时应该应用于设备以便自定义行为的选项列表。此字段是必须的,且有一组称为 defaults
的常用选项。其它选项记录在 mount man page
中。
最后两个字段是转储标志和fsck
顺序。转储标志与dump
命令配合使用,用于生成设备内容的备份。fsck 顺序字段确定在文件系统未完全卸载的情况下,是否应在启动时运行 fsck 。fsck 顺序的值指示当有多个文件系统需要检查时,应对这些文件系统运行 fsck 的顺序 。
tips
/etc/fstab
中存在错误的条目可能会导致计算机无法启动。为避免这种情况,管理员应卸载新文件系统,然后使用 mount -a
(该命令将读取 /etc/fstab )将该文件系统重新挂载到原位,以验证条目是否有效。如果 mount -a 命令返回错误,则应在重新启动计算机之前纠正错误。
管理交换空间
交换空间是可与Linux 内核内存管理子系统配合使用的磁盘区域。交换空间用于通过保存不活动的内存页来补充系统RAM 。系统 RAM与交换空间组合在一起称为虚拟内存。
当系统上的内存使用量超过定义的限制时,内核将梳理 RAM ,寻找已分配给进程但空闲的内存页。内核将空闲的内存页写入到交换区,并且重新分配 RAM 页面以代其他进程使用。如果某个程序需要访问已写入到磁盘的页面,则内核会找到另一个空闲的内存页,将其写入到磁盘,然后从交换区重新调用所需的页面。
由于交换区位于磁盘上,所以与 RAM相经交换非常慢。尽管交换空间用于扩充系统 RAM ,但应仅可能将交换空间的使用保持在最低限度。
创建交换空间,管理员需要执行三项任务:
- 创建分区
- 将分区的类型设置为
82 Linux swap
- 对设备进行签名格式化
创建分区,使用工具 fdisk 创建所需大小的分区。


分配分区类型
交换分区创建后,建议为做法是将分区类型可系统 ID 更改为 82 Linux swap 。在过去,工具会根据分配类型来确定是否应激活设备,但现在情况已不再如此。即使实用程序不再使用分区类型,设备分区类型也可以全管理员快速确定该分区的用途。

格式化设备, mkswap
命令向设备应用交换签名。与其他格式化工具不同, mkswap 在设备开关写入单个数据块,而将设备的其余部分保留为未格式化,从而使其可用于存储内存页。

激活交换空间
管理员可以使用 swapon 命令激活已格式化交换空间。可以在设备上调用 swapon
,否则 swapon -a
就将激活/etc/fstab
文件中列出的所有交换空间。

永久激活交换空间
交换空间很可能需要在每次计算机启动时自动激活。为使计算机在每次启动时都激活交换空间,必需在 /etc/fstab
文件中进行配置。
如果需要,管理员可以使用 swapoff
命令停用交换空间。只有当任何交换的数据都可以写入到其他活动的交换空间或写回内存中时, swapoff 才会成功。如果数据无法写入到其他位置,则 swapoff 会失败,并显示错误,而交换空间将仍保持活动。

该示例使用UUID 作为第一个字段。 UUID 存储在设备上存储的交换签名中,并且是mkswap
输出的一部份。如果 mkswap 输出已丢失,则可以使用 blkid 命令扫描系统并报告所有已连接的块设备。如果管理员不希望使用 UUID
,则第一个字段也可以使用原始设备名称。
第二个字段通常为 mount point
保留。但是,由于交换设备无法通过目录结构访问,此字段是占位符值 swap
第三个字段是文件系统类型。交换空间的文件系统类型为 swap
第四个字段是选项,在上例中,使用了选项defaults
。defaults 包括 挂载选项 auto
, 即用于设备交换空间在启动时自动激活的选项。
最后两个字段 是转储标志和 fsck
顺序。交换空间不需要备份,也不需要文件系统检查 。
注意
默认情况下会按顺序使用交换空间,即先使用第一个已激活交换空间,直到其空间已满,然后内核将开始使用第十个交换空间。使用swapon -s
可显示交换空间的优先级。并可使用 pri=
挂载选项设备这些优先级。如果交换空间具有相同的优先级,则内核将循环写入到这些空间,而非写入单个交换空间直到其容量已满。
