一、磁盘类型
在 TencentOS Server 系统中,磁盘都以块设备文件的形式出现在 /dev 目录下,根据磁盘接口类型的不同,磁盘块设备文件名称也不同,形式如下:
| 磁盘接口类型 | 磁盘块设备文件名 | 说明 | 示例 |
| SCSI/SATA/SAS | /dev/sdX | X 表示字母 a-z,依次对应存储设备。当该类型的磁盘数量超过 26 个时,使用两个字母,如 /dev/sdaa。 | /dev/sda |
| virtio-blk | /dev/vdX | X 表示字母 a-z,依次对应存储设备。 | /dev/vda |
| NVMe | /dev/nvmeXnY | X 表示 NVMe 控制器编号(从 0 开始),Y 表示 NVMe 命名空间编号(从 1 开始)。命名空间通常与存储设备相对应。 | /dev/nvme0n1 |
| IDE | /dev/hdX | X 表示字母 a-z,依次对应存储设备。 | /dev/hda |
二、磁盘分区
在使用磁盘前,通常会将其划分为一个或多个逻辑区域,即磁盘分区。划分好的磁盘分区以块设备文件的形式出现在 /dev 目录下,形式如下:
| 磁盘块设备文件名 | 磁盘分区块设备文件名 | 说明 | 示例 |
| /dev/sdX | /dev/sdXN | N 表示分区编号(从 1 开始)。 | /dev/sda1 |
| /dev/vdX | /dev/vdXN | N 表示分区编号(从 1 开始)。 | /dev/vda1 |
| /dev/nvmeXnY | /dev/nvmeXnYpN | N 表示分区编号(从 1 开始)。 | /dev/nvme0n1p1 |
| /dev/hdX | /dev/hdXN | N 表示分区编号(从 1 开始)。 | /dev/hda1 |
三、磁盘分区表
在对磁盘分区前需要创建磁盘分区表,分区表保存了磁盘分区信息。TencentOS Server 主要使用 MSDOS(MBR) 和 GPT(GUID Partition Table)两种类型的分区表。
| 分区表 | 最多分区数 | 最大分区大小 |
| MSDOS(MBR) | 4 个主分区或 3 个主分区和 1 个扩展分区(可以划分成多个逻辑分区) | 2TiB(扇区大小为 512B)16TiB(扇区大小为 4KB) |
| GPT | 128 | 8ZiB(扇区大小为 512B)64ZiB(扇区大小为 4KB) |
四、MSDOS 分区表
MSDOS 分区表存在在磁盘的第一个扇区,通常是 512B 大小,主要包含如下数据:
·主引导记录(Master Boot Record, MBR):可以安装 bootloader 程序,大小为 446B
·分区表(Partition Table):记录磁盘分区信息,大小为 64B ,每个分区信息占用 16B,最多包含四个分区信息
·MBR 标记:内容是 55AA,大小为 2B
通常 legacy 引导下,使用 msdos 分区表,示例如下:
lsblk # 预期输出# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS # sda 8:0 0 50G 0 disk # ├─sda1 8:1 0 1G 0 part /boot # └─sda2 8:2 0 49G 0 part # ├─os-root 253:0 0 30G 0 lvm / # └─os-home 253:1 0 19G 0 lvm /home parted /dev/sda print # 预期输出# Model: ATA QEMU HARDDISK (scsi) # Disk /dev/sda: 53.7GB # Sector size (logical/physical): 512B/512B # Partition Table: msdos # Disk Flags: # # Number Start End Size Type File system Flags # 1 1049kB 1075MB 1074MB primary ext4 boot # 2 1075MB 53.7GB 52.6GB primary lvm
示例中的系统盘使用 msdos 分区表,包含两个分区:一个 boot 分区,另一个作为逻辑卷的物理卷使用。
五、GPT 分区表
GPT 分区表使用 LBA 对磁盘进行编址,每个 LBA 512B。GPT 分区结构如下:
·LBA0:MBR 兼容区块,前 446B 存放 bootloader(UEFI 引导下,bootloader 不存放在此处),后 66B 为特殊标记,表明此磁盘为 GPT 分区。
·LBA1:GPT 表头记录,记录分区表本身的位置和大小,备份分区放置的位置以及 CRC32 校验码。
·LBA(2~33):分区表,记录分区信息,每个 LBA 可以记录 4 个分区信息。
·LBA(-1):GPT 表头记录的备份。
·LBA(-33~-2):分区表的备份。
UEFI 引导下,使用 GPT 分区表,示例如下:
lsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 64G 0 disk ├─sda1 8:1 0 50M 0 part /boot/efi ├─sda2 8:2 0 512M 0 part /boot └─sda3 8:3 0 63.4G 0 part ├─os-root 253:0 0 30G 0 lvm / └─os-home 253:1 0 33.4G 0 lvm /home
parted /dev/sda print
输出示例:
Model: ATA Fedora Linux-0 S (scsi) Disk /dev/sda: 68.7GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 53.5MB 52.4MB fat16 EFI System Partition boot, esp 2 53.5MB 590MB 537MB ext4 3 590MB 68.7GB 68.1GB lvm
示例中的系统盘使用 GPT 分区表,包含三个分区:一个 EFI 分区,一个 boot 分区,另一个作为逻辑卷的物理卷使用。
七、使用 lsblk 查看块设备信息
lsblk 可以列出块设备信息,如下所示:
lsblk
输出示例:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 60G 0 disk ├─sda1 8:1 0 1M 0 part ├─sda2 8:2 0 1G 0 part /boot └─sda3 8:3 0 59G 0 part ├─os-root 253:0 0 39.6G 0 lvm / └─os-home 253:1 0 19.4G 0 lvm /home sdb 8:16 0 30G 0 disk ├─sdb1 8:17 0 1G 0 part ├─sdb2 8:18 0 1G 0 part ├─sdb3 8:19 0 1K 0 part ├─sdb4 8:20 0 26G 0 part └─sdb5 8:21 0 1G 0 part sr0 11:0 1 13.8G 0 rom
返回结果中各参数说明如下:
·NAME:磁盘或分区设备名
·MAJ:MIN:磁盘或分区主次设备号
·RM:是否为可移除设备,0 表示不可移除,1 表示可移除
·SIZE:磁盘或分区容量
·RO:是否为只读设备,0 表示可读写,1 表示只读
·TYPE:设备类型,disk 表示磁盘,part 表示分区,lvm 表示逻辑卷
·MOUNTPOINTS:挂载点
此外,通过 lsblk 的输出结果还可以查看磁盘分区之间的从属关系。更多命令选项请参考 man 手册。
八、使用 blkid 查看块设备信息
blkid 可以打印出设备属性,如下所示:
blkid
输出示例:
/dev/mapper/os-home: UUID="f30c7d4a-c97d-427e-ba4e-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" /dev/sr0: BLOCK_SIZE="2048" UUID="2023-05-08-xx-xx-xx-xx" LABEL="TencentOS Server" TYPE="iso9660" PTTYPE="PMBR" /dev/mapper/os-root: UUID="2985bd9c-facc-49eb-8752-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" /dev/sda2: UUID="57139a63-0e14-410b-ae05-xxxxxxxxxxxx" BLOCK_SIZE="4096" TYPE="ext4" PARTUUID="846b8e84-0d7e-xxxx-xxx" /dev/sda3: UUID="q6Vgxu-Wvpn-d3M9-c8Hk-dMT0-xxxx-xxxxx" TYPE="LVM2_member" PARTUUID="5d88c31f-ab83-46bd-xxxx-xxxxxx" /dev/sdb4: PARTUUID="1144xxxx-04" /dev/sdb2: PARTUUID="1144xxxx-02" /dev/sdb5: PARTUUID="1144xxxx-05" /dev/sdb1: PARTUUID="1144xxxx-01" /dev/sda1: PARTUUID="603c9161-aa71-4196-bbb8-xxxxxxxxxxxx"
冒号前的部分表示设备名称,冒号后的部分表示设备或文件系统的属性信息。更多命令选项请参考 man 手册。
十、parted 概述
parted 命令支持 MSDOS 和 GPT 两种分区表,可以执行查看分区信息、创建分区表、创建分区、修改分区和删除分区等磁盘操作。
parted 命令支持交互式和命令行两种形式,直接执行 parted <block-device> 可以进入交互式界面,如下:
parted <block-device>
在交互界面中可直接使用子命令。输入 help 可查看支持的所有子命令,如下所示:
help
输入 quit 可退出交互界面。
quit
以下示例以 /dev/sdb 磁盘为例,进入交互界面后执行 help,随后退出交互界面。
parted /dev/sdb
输出示例:
GNU Parted 3.5 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) help align-check TYPE N check partition N for TYPE(min|opt) alignment help [COMMAND] print general help, or help on COMMAND mklabel,mktable LABEL-TYPE create a new disklabel (partition table) mkpart PART-TYPE [FS-TYPE] START END make a partition name NUMBER NAME name partition NUMBER as NAME print [devices|free|list,all] display the partition table, or available devices, or free space, or all found partitions quit exit program rescue START END rescue a lost partition near START and END resizepart NUMBER END resize partition NUMBER rm NUMBER delete partition NUMBER select DEVICE choose the device to edit disk_set FLAG STATE change the FLAG on selected device disk_toggle [FLAG] toggle the state of FLAG on selected device set NUMBER FLAG STATE change the FLAG on partition NUMBER toggle [NUMBER [FLAG]] toggle the state of FLAG on partition NUMBER unit UNIT set the default unit to UNIT version display the version number and copyright information of GNU Parted (parted) quit
注意:如果不指定 <block-device>,则默认使用第一块磁盘,通常为 /dev/sda,可通过命令输出信息确认。
十一、使用 parted 查看分区
使用 print 子命令可查看分区信息。
使用 parted 交互界面查看分区
1. 进入交互式界面。
parted <block-device>
2. 使用 print 子命令可显示当前磁盘或所有磁盘的分区信息。
print [devices|free|list,all]
print 子命令的参数为可选项,若不指定参数,则默认显示当前设备的分区信息。各参数含义如下:
·devices:显示所有激活的磁盘。
·free:查看当前磁盘的剩余容量。
·list,all:查看所有磁盘的分区信息。
以下示例展示如何打印块设备 /dev/sda 的分区信息:
parted /dev/sda
输出示例:
GNU Parted 3.5 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA QEMU HARDDISK (scsi) Disk /dev/sda: 64.4GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: pmbr_boot Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 1076MB 1074MB ext4 3 1076MB 64.4GB 63.3GB lvm
返回结果各参数说明如下:
·Model: ATA QEMU HARDDISK (scsi):磁盘类型、制造商、型号和接口。
·Disk /dev/sda: 64.4GB :磁盘对应的块设备文件和容量。
·Sector size (logical/physical): 512B/512B:扇区大小。
·Partition Table: gpt:分区表类型。
·Disk Flags: pmbr_boot:磁盘标记,仅出现在 GPT 分区表的磁盘上,表示磁盘上存在特殊属性。示例中的 pmbr_boot 表示磁盘上存在保护性 MBR(PMBR),支持 BIOS 引导方式 。
·Number:分区编号。
·Start/End:分区起始和结束位置。
·Size:分区容量。
·File system:分区上文件系统类型。
·Name:分区名称,仅出现在 GPT 分区表的磁盘上,可重复。
·Flags:分区标记,示例中的 bios_grub 表示 BIOS boot 分区,BIOS 引导下,系统盘为 GPT 分区表时,必须存 BIOS boot 分区。
·Type:分区类型,仅出现 MSDOS 分区表的磁盘上,取值为 primary/extended/logical,分别对应主分区、扩展分区和逻辑分区。
使用 parted 命令行查看分区的命令如下:
parted <block-device> print
以下示例展示如何打印块设备 /dev/sda 的分区信息:
parted /dev/sda print
输出示例:
Model: ATA QEMU HARDDISK (scsi) Disk /dev/sda: 64.4GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: pmbr_boot Number Start End Size File system Name Flags 1 1049kB 2097kB 1049kB bios_grub 2 2097kB 1076MB 1074MB ext4 3 1076MB 64.4GB 63.3GB lvm
更改显示单位
print 显示的位置和容量,默认单位为 compat,输入为 MB,输出为人类易读的形式,如 kB,MB,GB 等。这些数据不够精确,且以10进制为单位。当需要更精确的容量数据时,可以使用子命令 unit 修改显示单位。
print 命令显示的容量默认单位为 compat,即输入以 MB 为单位,输出以人类易读的形式呈现(如 kB、MB、GB 等)。该单位采用十进制且精度有限,如需更精确的容量数据,可使用 unit 子命令修改显示单位。
unit <UNIT>
<UNIT> 用于指定容量显示单位,支持以下取值:
·s 表示扇区。
·kB, MB, GB, TB 基于十进制,后一个单位是前一个单位的 1000 倍。
·compat 输入默认单位为 MB,输出单位则为人类易读的形式。
·cyl 柱面。
·chs 表示以三元组(cylinders, heads, sectors)形式描述的磁盘位置,分别对应柱面、磁头和扇区。其中,1 个柱面包含 255 个磁头,1 个磁头包含 2 个扇区。各分量取值范围为:heads 为 0~254,sectors 为 0~1。
当单位设置为 chs 时,磁盘容量以最后一个扇区的三元组位置来显示,其中 sectors 通常为 1。磁盘总扇区数的计算公式为:总扇区数 = cylinders × 255 × 2 + heads × 2 + sectors + 1。
·% 百分比。
·kiB, MiB, GiB, TiB 基于二进制,后一个单位是前一个单位的 1024 倍。
十二、使用 parted 创建分区表
使用 mklabel 或 mktable 子命令可创建分区表。
注意:mklabel 会在磁盘上创建新的分区表,这会清空该磁盘上原有的全部分区及数据,且不可恢复。请你在执行前确认目标磁盘正确,并已对需要保留的数据完成备份。
使用 parted 交互界面创建分区表
1. 进入交互式界面。
parted <block-device>
2. 创建分区表。若磁盘上已存在分区表,系统将打印告警信息,并需人工确认是否继续。
mklabel LABEL-TYPE
3. 确认分区表是否创建成功。
以下示例展示如何在块设备 /dev/sdb 上创建 gpt 分区表。
parted /dev/sdb
输出示例:
GNU Parted 3.5 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt (parted) quit Information: You may need to update /etc/fstab.
使用 parted 命令行创建分区表
命令如下:
parted <block-device> mklabel LABEL-TYPE
以下示例展示如何在块设备 /dev/sdb 上创建 gpt 分区表。
parted /dev/sdb mklabel gpt
执行成功时无输出。若磁盘上的分区已写入 /etc/fstab,parted 会提示 Information: You may need to update /etc/fstab.,请你根据提示及时更新 /etc/fstab。
十三、使用 parted 创建分区
使用子命令 mkpart 可创建分区。
使用 parted 交互界面创建分区
1. 进入交互式界面。
parted <block-device>
2. 根据实际需求,修改显示单位。
unit <UNIT>
3. 请先查看剩余空间信息,确认是否满足需求。若不满足,则需要调整分区。
print free
4. 创建分区。
mkpart PART-TYPE [FS-TYPE] START END
·PART-TYPE:当分区表为 MSDOS 时,可用值为 primary/extend/logical,分别对应主分区,扩展分区和逻辑分区,当扩展分区已存在时,才可以设置逻辑分区。当分区表为 GPT 时,该选项被设置为分区名称,可以为任意字符串。
·FS-TYPE:可选项,设置分区的文件系统,仅设置分区文件系统字段元数据的值,不会实际创建文件系统。
·START/END:分区起始和结束位置,支持的单位包括 s, B, kB, MB, GB, TB, compact, cyl, chs, %, kiB, MiB, GiB, TiB,不指定单位时使用当前 UNIT 下的默认单位。
5. 分区创建完成后执行 partprobe 命令。部分环境下创建分区后,操作系统可能未及时更新,内存中仍保留旧的分区信息。partprobe 命令可通知操作系统重新扫描磁盘分区表,载入新的分区信息。
partprobe <block-device>
以下示例展示在 /dev/sdb 上创建 test-part 的分区,分区起始位置为 1MiB,结束位置为 1GiB。
parted /dev/sdb
输出示例:
GNU Parted 3.5 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit kiB (parted) print free Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 31457280kiB 9Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 17.0kiB 31457263kiB 31457247kiB Free Space (parted) mkpart test-part 1MiB 1GiB (parted) print free Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 31457280kiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 17.0kiB 1024kiB 1007kiB Free Space 1 1024kiB 1048576kiB 1047552kiB test-part 1048576kiB 31457263kiB 30408688kiB Free Space (parted) quit partprobe /dev/sdb
使用 parted 命令行创建分区
命令如下:
parted <block-device> mkpart PART-TYPE [FS-TYPE] START END
示例如下:
parted /dev/sdb unit MiB print free
输出示例:
Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 30720MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 0.02MiB 1.00MiB 0.98MiB Free Space 1 1.00MiB 1024MiB 1023MiB test-part 1024MiB 30720MiB 29696MiB Free Space parted /dev/sdb mkpart test-part2 1024MiB 2048MiB Information: You may need to update /etc/fstab. partprobe /dev/sdb parted /dev/sdb unit MiB print free Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 30720MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 0.02MiB 1.00MiB 0.98MiB Free Space 1 1.00MiB 1024MiB 1023MiB test-part 2 1024MiB 2048MiB 1024MiB test-part2 2048MiB 30720MiB 28672MiB Free Space
十四、使用 parted 调整分区
使用 parted 交互界面调整分区
1. 进入交互式界面。
parted <block-device>
2. 根据实际需求,修改显示单位。
unit UNIT
3. 查看分区信息。
print free
4. 调整分区大小。
resizepart NUMBER END
·NUMBER:待调整分区的编号。
·END:调整后分区的结束位置,END 不能小于分区的起始大小。
5. 重新扫描分区表。
partprobe <block-device>
示例如下:
parted /dev/sdb
输出示例:
GNU Parted 3.5 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) unit MiB (parted) print free Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 30720MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 0.02MiB 1.00MiB 0.98MiB Free Space 1 1.00MiB 1024MiB 1023MiB test-part 2 1024MiB 2048MiB 1024MiB test-part2 2048MiB 30720MiB 28672MiB Free Space (parted) resizepart 2 4096MiB (parted) print free Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 30720MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 0.02MiB 1.00MiB 0.98MiB Free Space 1 1.00MiB 1024MiB 1023MiB test-part 2 1024MiB 4096MiB 3072MiB test-part2 4096MiB 30720MiB 26624MiB Free Space (parted) quit partprobe /dev/sdb
使用 parted 命令行调整分区
命令如下:
parted <block-device> resizepart NUMBER END
示例如下:
parted /dev/sdb unit MiB print free
输出示例:
Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 30720MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 0.02MiB 1.00MiB 0.98MiB Free Space 1 1.00MiB 1024MiB 1023MiB test-part 2 1024MiB 2048MiB 1024MiB test-part2 2048MiB 30720MiB 28672MiB Free Space parted resizepart 2 4096MiB parted /dev/sdb resizepart 2 4096MiB Information: You may need to update /etc/fstab. partprobe /dev/sdb parted /dev/sdb unit MiB print free Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 30720MiB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 0.02MiB 1.00MiB 0.98MiB Free Space 1 1.00MiB 1024MiB 1023MiB test-part 2 1024MiB 4096MiB 3072MiB test-part2 4096MiB 30720MiB 26624MiB Free Space
注意:缩小分区可能会导致数据丢失甚至文件系统损坏。
十五、使用 parted 删除分区
使用 parted 交互界面删除分区
1. 进入交互式界面。
parted <block-device>
2. 查看分区信息。
3. 删除分区。
rm NUMBER
4. 重新扫描分区表。
partprobe <block-device>
注意:如果删除的分区存在文件系统,且已经写入到 /etc/fstab 文件内,需要从 /etc/fstab 中移除相关配置,否则,可能会导致操作系统启动失败。
示例如下:
parted /dev/sdb
输出示例:
GNU Parted 3.5 Using /dev/sdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1074MB 1073MB ext4 test-part 2 1074MB 2147MB 1074MB ext4 test-part2 (parted) rm 2 (parted) print Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1074MB 1073MB ext4 test-part (parted) quit Information: You may need to update /etc/fstab. partprobe /dev/sdb
使用 parted 命令行删除分区
命令如下:
parted <block-device> rm NUMBER
示例如下:
parted /dev/sdb print
输出示例:
Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1074MB 1073MB ext4 test-part 2 1074MB 2147MB 1074MB ext4 test-part2 parted /dev/sdb rm 2 Information: You may need to update /etc/fstab. parted /dev/sdb print Model: ATA QEMU HARDDISK (scsi) Disk /dev/sdb: 32.2GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 1074MB 1073MB ext4 test-part
更多命令选项请参考 man 手册。
十七、fdisk 概述
fdisk 支持 MSDOS 和 GPT 两种分区表,可以执行查看分区信息、创建分区表、创建分区、修改分区和删除分区等磁盘操作。
执行 fdisk <block-device> 可进入交互界面,fdisk 的大部分操作需要在交互界面中完成,如下所示:
fdisk <block-device>
输出示例:
Command (m for help):
·使用 m 查看帮助信息:
Command (m for help): m
·使用 q 退出交互界面:
Command (m for help): q
十八、使用 fdisk 查看分区
使用命令 p 可查看分区。
1. 进入交互界面。
fdisk <block-device>
2. 查看分区。
Command (m for help): p
以下示例查看磁盘 /dev/sda 的分区。
fdisk /dev/sda
输出示例:
Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. This disk is currently in use – repartitioning is probably a bad idea. It's recommended to umount all file systems, and swapoff all swap partitions on this disk. Command (m for help): print Disk /dev/sda: 60 GiB, 64424509440 bytes, 125829120 sectors Disk model: QEMU HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: gpt Disk identifier: 3C81803B-8934-47FF-BE0B-37AE73EC68C0 Device Start End Sectors Size Type /dev/sda1 2048 4095 2048 1M BIOS boot /dev/sda2 4096 2101247 2097152 1G Linux filesystem /dev/sda3 2101248 125827071 123725824 59G Linux LVM
·Disk /dev/sda :磁盘容量,分别以 GiB,bytes,sectors 三种单位显示。
·Disk model:磁盘型号。
·Units:显示单位。
·Sector size:扇区大小。
·Disklabel type:分区表类型,fdisk 下 MSDOS 分区表显示为 dos。
·Disk identifier:磁盘标识符。
·Device:分区块设备文件名。
·Start/End:起始和结束扇区。
·Sectors:分区总扇区数。
·Size:分区大小。
·Type:分区类型,对应 parted 的分区标记。
也可以使用 fdisk 命令行查看分区,命令如下:
fdisk -l [<block-device>]
如不指定 <block-device>,则显示所有磁盘分区信息。
十九、使用 fdisk 创建分区表
使用子命令 g 可创建 GPT 分区表,使用子命令 o 可创建 MSDOS 分区表。
1. 进入交互界面。
fdisk <block-device>
2. 创建分区表。
Command (m for help): g
3. 保存修改并退出交互界面。
Command (m for help): w
以下示例在块设备 /dev/sdb 上创建 gpt 分区表。
fdisk /dev/sdb
输出示例:
Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): g Created a new GPT disklabel (GUID: AC247B3E-7137-6B42-8F85-7D570A41D7FE). The device contains 'dos' signature and it will be removed by a write command. See fdisk(8) man page and –wipe option for more details. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
20、使用 fdisk 创建分区
使用子命令 n 可创建分区。
1. 进入交互界面。
fdisk <block-device>
2. 使用子命令 n,然后按照提示创建分区。
Command (m for help): n
3. 保存修改并退出交互界面。
Command (m for help): w
4. 重新扫描分区表。
partprobe <block-device>
·示例一:在 MSDOS 分区表的磁盘上创建分区
以下示例在 /dev/sdb 上创建一个主分区,一个扩展分区和一个逻辑分区。
fdisk /dev/sdb
输出示例:
Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): p Partition number (1-4, default 1): First sector (2048-62914559, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914559, default 62914559): +1G Created a new partition 1 of type 'Linux' and of size 1 GiB. Command (m for help): n Partition type p primary (1 primary, 0 extended, 3 free) e extended (container for logical partitions) Select (default p): e Partition number (2-4, default 2): First sector (2099200-62914559, default 2099200): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-62914559, default 62914559): Created a new partition 2 of type 'Extended' and of size GiB. Command (m for help): n All space for primary partitions is in use. Adding logical partition 5 First sector (2101248-62914559, default 2101248): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2101248-62914559, default 62914559): +1G Created a new partition 5 of type 'Linux' and of size 1 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. partprobe /dev/sdb
·示例二:在 GPT 分区表的磁盘上创建分区
以下示例在 /dev/sdb 上创建一个 1G 大小的分区。
fdisk /dev/sdb
输出示例:
Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): n Partition number (1-128, default 1): First sector (2048-62914526, default 2048): Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-62914526, default 62914526): +1G Created a new partition 1 of type 'Linux filesystem' and of size 1 GiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. partprobe /dev/sdb
21、使用 fdisk 删除分区
使用子命令 d 可删除分区。
1. 进入交互界面。
fdisk <block-device>
2. 使用子命令 p,查看分区信息。
Command (m for help): p
3. 使用子命令 d,然后按照提示删除分区。
Command (m for help): d
4. 保存修改并退出交互界面。
Command (m for help): w
5. 重新扫描分区表。
partprobe <block-device>
注意:如果删除的分区存在文件系统,且已经写入到 /etc/fstab 文件内,需要从 /etc/fstab 中移除相关配置,否则,可能会导致操作系统启动失败。
示例如下:
fdisk /dev/sdb
输出示例:
Welcome to fdisk (util-linux 2.37.4). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m for help): p Disk /dev/sdb: 30 GiB, 32212254720 bytes, 62914560 sectors Disk model: QEMU HARDDISK Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xe7cfb001 Device Boot Start End Sectors Size Id Type /dev/sdb1 2048 2099199 2097152 1G 83 Linux /dev/sdb2 2099200 4196351 2097152 1G 83 Linux /dev/sdb3 4196352 8390655 4194304 2G 83 Linux /dev/sdb4 8390656 62914559 54523904 26G 5 Extended /dev/sdb5 8392704 10489855 2097152 1G 83 Linux Command (m for help): d Partition number (1-5, default 5): 2 Partition 2 has been deleted. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks. partprobe /dev/sdb
更多命令选项请参考 man 手册。
22、使用 gdisk 操作磁盘分区
gdisk 为 GPT 版本 fdisk,只支持 GPT 分区表磁盘操作,在 MSDOS 分区表磁盘上操作会将分区表转换成 GPT 分区表。
gdisk 功能与操作方式与 fdisk 类似,可参考 fdisk 操作指引。
23、parted 和 fdisk 工具比较
·parted 和 fdisk 均支持 msdos 和 GPT 两种分区表。
·parted 提供了交互模式和单行命令模式两种交互方式,而 fdisk 仅支持交互模式。
·parted 支持的单位较多,可以通过扇区,柱面,磁柱,百分比,尺寸等进行分区,而 fdisk 仅支持扇区和尺寸。
·parted 功能丰富、子命令多、参数多,而 fdisk 相对简洁。
25、swap 空间概述
当系统物理内存占满时,操作系统将启用 swap 空间(如果存在的情况下),内核将内存中不活跃的页面交换到 swap 空间。
swap 空间可以是专门的 swap 分区,也可以是 swap 文件。推荐的系统 swap 空间如下:
| 物理内存(RAM) | 推荐的 swap 空间大小(不需要休眠) | 推荐的 swap 空间大小(需要休眠) |
| 小于 2G | RAM 的 2 倍 | RAM 的 3 倍 |
| 2G ~ 8G | 与 RAM 相等 | RAM 的 2 倍 |
| 8G ~ 16G | 至少 4G | RAM 的 1.5 倍 |
| 大于 64G | 至少 4G | 不推荐休眠 |
27、添加 swap 分区
1. 首先需要使用 parted 或 fdisk 命令创建一个分区,如 /dev/sdb1:
sdb 8:16 0 64G 0 disk └─sdb1 8:17 0 8G 0 part
2. 格式化 swap 空间:
mkswap /dev/sdb1
3. 在 /etc/fstab 中添加挂载条目:
/dev/sdb1 swap swap defaults 0 0
4. 执行以下命令生成挂载单元:
systemctl daemon-reload
5. 激活 swap:
swapon -v /dev/sdb1
6. 查看 swap 是否生效:
cat /proc/swaps
输出示例:
Filename Type Size Used Priority /dev/sdb1 partition 8388604 0 -2
free -h
输出示例:
total used free shared buff/cache available Mem: 7.3Gi 404Mi 6.5Gi 33Mi 444Mi 6.7Gi Swap: 8.0Gi 0B 8.0Gi
查看输出结果中的 swap 信息,确认配置已生效。也可以使用逻辑卷创建 swap 空间,操作方法类似。
28、添加 swap 文件
1. 首先创建一个空文件:
dd if=/dev/zero of=/data/swapfile bs=1M count=8192
2. 格式化 swap 空间:
mkswap /data/swapfile
3. 在 /etc/fstab 中添加挂载条目:
/data/swapfile swap swap defaults 0 0
4. 执行以下命令生成挂载单元:
systemctl daemon-reload
5. 激活 swap:
swapon -v /data/swapfile
6. 查看 swap 是否生效:
cat /proc/swaps
输出示例:
Filename Type Size Used Priority /data/swapfile file 8388604 0 -2
free -h
输出示例:
total used free shared buff/cache available Mem: 7.3Gi 432Mi 75Mi 33Mi 6.8Gi 6.7Gi Swap: 8.0Gi 0B 8.0Gi
从显示结果可以看到 swap 信息,说明已经生效。
30、删除 swap 空间说明
使用 swapoff 命令可关闭 swap 空间。关闭 swap 空间前需要关注系统内存使用情况,swapoff 命令会通过申请内存将 swap 空间中的内存移会物理内存,如果系统内存不足,会导致 OOM。当 OOM 系统处理策略为杀进程时,swapoff 命令将会被 kill;当 OOM 系统处理策略为 Panic 时,系统将重启。
31、删除 swap 分区
1. 关闭 swap:
swapoff -v /dev/sdb1
2. 删除 sdb1 分区。
parted /dev/sdb rm 1
3. 删除 /etc/fstab 中对应条目。
4. 重新生成挂载单元:
systemctl daemon-reload
5. 查看是否生效:
cat /proc/swaps
输出示例:
Filename Type Size Used Priority
free -h
输出示例:
total used free shared buff/cache available Mem: 7.3Gi 421Mi 92Mi 33Mi 6.8Gi 6.7Gi Swap: 0B 0B 0B
从显示结果可以看到 swap 已经关闭。
32、删除 swap 文件
1. 关闭 swap:
swapoff -v /data/swapfile
2. 删除 swap 文件。
rm /data/swapfile
3. 删除 /etc/fstab 中对应条目。
4. 重新生成挂载单元:
systemctl daemon-reload
5. 查看是否生效:
cat /proc/swaps
输出示例:
Filename Type Size Used Priority
free -h
输出示例:
total used free shared buff/cache available Mem: 7.3Gi 421Mi 92Mi 33Mi 6.8Gi 6.7Gi Swap: 0B 0B 0B
从显示结果可以看到 swap 已经关闭。