本文探讨如何在 Linux 中对硬盘进行分区,并对分区进行格式化。
我们现在来完成一个对硬盘分区和格式化的任务。硬盘大小为 223.6G,设备名为 sdd,需要划分为 5 个分区:
分区 1
:为主分区,采用 ext4 文件系统,大小 100G分区 2
:也采用 ext4 文件系统,大小 32G分区 3
:采用与 Windows 兼容的文件格式(vfat),大小为 32G分区 4
:也采用 ext4 文件系统,大小 20G分区 5
:也采用 ext4 文件系统,大小为所有余下的空间Linux 中对硬盘进行分区有很多工具,我们选择使用最经典的工具 fdisk。对这个样例任务进行简单分析:在 MSDOS 分区类型中,主分区加上拓展分区做多只能由四个。而拓展分区最多只能有一个。如果要使用超过四个以上的分区,就必须用到拓展分区,并且在其中划分逻辑分区。因此,对于上述任务,我们可以考虑将分区 1 划分为主分区,将分区 2-5 都用逻辑分区来表示,并将这些逻辑分区都存入一个拓展分区中。
fdisk -l /dev/sdd
:查看硬盘分区情况(未显示分区信息,说明未分区)。root@centos:~# fdisk -l /dev/sdd
Disk /dev/sdd:223.58 GiB,240057409536 字节,468862128 个扇区
Disk model: INTEL SSDSC2KG24
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:dos
磁盘标识符:0x55af9331
fdisk /dev/sdd
:进入硬盘分区界面。root@centos:~# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.34)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助):
root@centos:~# fdisk /dev/sdd
欢迎使用 fdisk (util-linux 2.34)。
更改将停留在内存中,直到您决定将更改写入磁盘。
使用写入命令前请三思。
命令(输入 m 获取帮助): n
分区类型
p 主分区 (0个主分区,0个扩展分区,4空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): p
分区号 (1-4, 默认 1): 1
第一个扇区 (2048-468862127, 默认 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-468862127, 默认 468862127): +100G
创建了一个新分区 1,类型为“Linux”,大小为 100 GiB。
命令(输入 m 获取帮助): n
分区类型
p 主分区 (1个主分区,0个扩展分区,3空闲)
e 扩展分区 (逻辑分区容器)
选择 (默认 p): e
分区号 (2-4, 默认 2): 2
第一个扇区 (209717248-468862127, 默认 209717248):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (209717248-468862127, 默认 468862127):
创建了一个新分区 2,类型为“Extended”,大小为 123.6 GiB。
命令(输入 m 获取帮助): n
所有主分区的空间都在使用中。
添加逻辑分区 5
第一个扇区 (209719296-468862127, 默认 209719296):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (209719296-468862127, 默认 468862127): +32G
创建了一个新分区 5,类型为“Linux”,大小为 32 GiB。
命令(输入 m 获取帮助): n
所有主分区的空间都在使用中。
添加逻辑分区 6
第一个扇区 (276830208-468862127, 默认 276830208):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (276830208-468862127, 默认 468862127): +32G
创建了一个新分区 6,类型为“Linux”,大小为 32 GiB。
命令(输入 m 获取帮助): n
所有主分区的空间都在使用中。
添加逻辑分区 7
第一个扇区 (343941120-468862127, 默认 343941120):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (343941120-468862127, 默认 468862127): +20G
创建了一个新分区 7,类型为“Linux”,大小为 20 GiB。
命令(输入 m 获取帮助): n
所有主分区的空间都在使用中。
添加逻辑分区 8
第一个扇区 (385886208-468862127, 默认 385886208):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (385886208-468862127, 默认 468862127):
创建了一个新分区 8,类型为“Linux”,大小为 39.6 GiB。
w
将划分好的新分区写入分区表。当然,如果你发现前面的划分有问题,比如分区号和分区大小出错了,你可以按 q
取消一切操作并退出 fdisk 命令面板,所有之前的操作都不会写入磁盘的分区表。命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
fdisk -l /dev/sdd
查看建立好的分区。注意到,从 sdd5 建立的分区均是在 sdd2 这个拓展分区中建立的逻辑分区,逻辑分区的分区号从 5 开始,因为 1-4 是保留给主分区和拓展分区使用的。此外,除拓展分区外,其它分区的 Id 均显示为 83,这个字段并非是分区真正文件系统类型,当然我们也会改动这个标识,使它与真正的分区文件系统类型一致。root@centos:~# fdisk -l /dev/sdd
Disk /dev/sdd:223.58 GiB,240057409536 字节,468862128 个扇区
Disk model: INTEL SSDSC2KG24
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:dos
磁盘标识符:0x55af9331
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdd1 2048 209717247 209715200 100G 83 Linux
/dev/sdd2 209717248 468862127 259144880 123.6G 5 扩展
/dev/sdd5 209719296 276828159 67108864 32G 83 Linux
/dev/sdd6 276830208 343939071 67108864 32G 83 Linux
/dev/sdd7 343941120 385884159 41943040 20G 83 Linux
/dev/sdd8 385886208 468862127 82975920 39.6G 83 Linux
fdisk /dev/sdd
命令进入操作面板;输入 l 命令列出 Linux 默认支持的文件系统类型,总共有 255 种,找到支持大硬盘的 Windows 分区类型 FAT32,记住其序号 c
;输入 t 命令修改分区 Id;输入要修改的分区号 6;输入要修改的分区类型号 c;输入 w 将修改写入分区表。root@centos:~# fdisk /dev/sdd
命令(输入 m 获取帮助): t
分区号 (1,2,5-8, 默认 8): 6
Hex 代码(输入 L 列出所有代码): c
已将分区“Linux”的类型更改为“W95 FAT32 (LBA)”。
命令(输入 m 获取帮助): w
分区表已调整。
将调用 ioctl() 来重新读分区表。
正在同步磁盘。
fdisk -l /dev/sdd
,我们发现分区 6 的 Id 已经修改过来了。root@centos:~# fdisk -l /dev/sdd
Disk /dev/sdd:223.58 GiB,240057409536 字节,468862128 个扇区
Disk model: INTEL SSDSC2KG24
单元:扇区 / 1 * 512 = 512 字节
扇区大小(逻辑/物理):512 字节 / 4096 字节
I/O 大小(最小/最佳):4096 字节 / 4096 字节
磁盘标签类型:dos
磁盘标识符:0x55af9331
设备 启动 起点 末尾 扇区 大小 Id 类型
/dev/sdd1 2048 209717247 209715200 100G 83 Linux
/dev/sdd2 209717248 468862127 259144880 123.6G 5 扩展
/dev/sdd5 209719296 276828159 67108864 32G 83 Linux
/dev/sdd6 276830208 343939071 67108864 32G c W95 FAT32 (LBA)
/dev/sdd7 343941120 385884159 41943040 20G 83 Linux
/dev/sdd8 385886208 468862127 82975920 39.6G 83 Linux
-d
命令可以删除指定分区。例如,删除分区 8(别忘了使用 w 写入分区表)。当然,我们这里并没有出错,所以就不执行了。命令(输入 m 获取帮助): d
分区号 (1,2,5-8, 默认 8): 8
分区 8 已删除。
命令(输入 m 获取帮助): w
分好区之后,接下来就是为这些分区创建文件系统了,也就是格式化分区。在 Linux 中格式化非常简单,我们只需要记住两个命令即可:mkfs 和 mkswap。
/dev/sdd1
分区格式化,-t
指定其文件系统类型为 ext4
:root@centos:~# mkfs -t ext4 /dev/sdd1
mke2fs 1.45.5 (07-Jan-2020)
丢弃设备块: 完成
创建含有 26214400 个块(每块 4k)和 6553600 个inode的文件系统
文件系统UUID:77e1c795-4f0b-462e-96df-7a7ecc9fdf8f
超级块的备份存储于下列块:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000, 7962624, 11239424, 20480000, 23887872
正在分配组表: 完成
正在写入inode表: 完成
创建日志(131072 个块) 完成
写入超级块和文件系统账户统计信息: 已完成
sdd5
、sdd7
和 sdd8
。root@centos:~# mkfs -t ext4 /dev/sdd5
...
root@centos:~# mkfs -t ext4 /dev/sdd7
...
root@centos:~# mkfs -t ext4 /dev/sdd8
...
sdd6
比较特殊,要求采用与 Windows 兼容的文件格式 vfat
(由于 vfat 文件系统格式结构相对简单,因此格式化分区的速度非常块)root@centos:~# mkfs -t vfat /dev/sdd6
mkfs.fat 4.1 (2017-01-24)
至此,sdd 硬盘的分区和格式化都完成了!关于格式化分区我们还需要知道的一个命令是 mkswap。这个命令为 Linux 中必不可少的一个分区,即交换分区创建文件系统。一般来说,交互分区往往在创建系统的时候就创建好了,因此这个命令很少用到。事实上,这个命令在我们样例任务中也用不到,但我们还是要简单了解一下它的用法。例如将 sdd7 格式化为一个交换分区:mkswap /dev/sdd7
,我们无法指定文件系统,因为 mkswap 创建的文件系统是指定好的,即 swap 文件系统。
fdisk 分区虽然很方便,但却也有限制,fdisk 使用 MSDOS 分区表,最大只能处理 2.2 TB 的空间。如果非要用 fdisk 对大硬盘进行分区的话,会浪费很多硬盘空间,因此建议使用 parted 命令并采用 GPT 分区表来对大硬件进行分区。
在 CentOS 中常用的 GPT 分区工具主要有两种:parted 和 gfdisk。其中,parted 是默认工具,我们这里就介绍使用 parted 来对大硬盘进行分区。
目前手头没有这么大的硬盘,因此还是上述使用的那个硬盘 /dev/sdd
,大小 223.6G,要求划分为 3 个分区:
分区1
:大小 112.8GB分区2
:大小 56.4GB分区3
:大小为所有余下的空间在命令行中输入 parted /dev/sdd
即可进入 parted 对 sdd 设备进行分区的交互界面,输入 help 查看帮助,输入 quit 退出交互界面。除了通过交互的方式进行分区外,parted 还可以通过非交互的方式来划分分区。处于效率和实用角度考虑,我们实用非交互的方式来分区。特别要注意的是,和 fdisk 不同,parted 中所有的操作命令都是实时写入硬盘分区表的,因此 parted 每一步操作都是不可撤销的。与 fdisk 自动建立 MSDOS 分区表不同,parted 需要手动建立 GPT 分区表,可使用 parted 的 mklable 命令来实现这一点。还需要注意的是,mklabel 会设置分区表类型,这将导致硬盘上原来所有数据丢失。
root@centos:~# parted /dev/sdd mklabel gpt # 创建 gpt 分区表
信息: 你可能需要 /etc/fstab。
root@centos:~# parted /dev/sdd mkpart part1 0% 50% # 创建分区1
信息: 你可能需要 /etc/fstab。
root@centos:~# parted /dev/sdd mkpart part2 50% 75% # 创建分区2
信息: 你可能需要 /etc/fstab。
root@centos:~# parted /dev/sdd mkpart part3 75% 100% # 创建分区3
信息: 你可能需要 /etc/fstab。
root@centos:~# parted /dev/sdd print # 打印分区信息
型号:ATA INTEL SSDSC2KG24 (scsi)
磁盘 /dev/sdd: 240GB
扇区大小 (逻辑/物理):512B/4096B
分区表:gpt
磁盘标志:
编号 起始点 结束点 大小 文件系统 名称 标志
1 1049kB 120GB 120GB ext4 part1
2 120GB 180GB 60.0GB part2
3 180GB 240GB 60.0GB part3
parted 的子命令 mkpart 用于创建分区,其后接三个字段选项:
分区的起始位置和结束位置推荐使用百分比,以避免出现分区对齐问题。当然,也可以使用数字加上 KB、MB 和 GB 等单位来直接指定起始和结束位置。
parted 也提供了删除分区的子命令 rm
,rm 后紧跟分区号即可删除分区,分区号创建的时候自动生成,默认从 1 开始。因此,上述创建的三个分区就可以通过以下命令依次删除:
root@centos:~# parted /dev/sdd rm 1 # 删除分区1
root@centos:~# parted /dev/sdd rm 2 # 删除分区2
root@centos:~# parted /dev/sdd rm 3 # 删除分区3
虽然删除了 sdd 硬盘的所有分区,但其分区表仍然还是 GPT,可通过命令将其改回 MSDOS:parted /dev/sdd mklabel msdos
。