菜鸟科技网

parted命令分区操作如何高效实现?

parted 是一个强大的命令行磁盘分区和分区表管理工具,与 fdisk 相比,parted 更适合处理大容量磁盘(超过 2TB),并且支持多种分区表格式,操作也更为灵活。

parted命令分区操作如何高效实现?-图1
(图片来源网络,侵删)

核心概念

在开始使用 parted 之前,需要了解几个关键概念:

  1. 设备:指的是你的硬盘或块设备,/dev/sda, /dev/nvme0n1
  2. 分区表:定义了磁盘上分区布局的“蓝图”。parted 主要支持两种:
    • MBR (Master Boot Record):传统的分区表格式,最多支持 4 个主分区,或者 3 个主分区 + 1 个扩展分区(扩展分区里可以包含多个逻辑分区),最大支持 2TB 的磁盘。
    • GPT (GUID Partition Table):现代分区表格式,没有数量和容量限制,支持分区唯一标识符,是 UEFI 启动的标准配置。
  3. 分区:在磁盘上划分出的逻辑区域,可以格式化并挂载使用。
  4. 单位parted 默认使用 sectors (扇区) 作为单位,一个扇区通常是 512 字节或 4096 字节(对于高级格式化硬盘),你也可以使用更人性化的单位,如 B (字节), KB, MB, GB, TB, (百分比), cyl (柱面) 等。

基本用法

parted 有两种使用模式:

  • 交互式模式:直接输入 parted 命令,进入一个提示符环境,适合进行一系列操作。
  • 命令行模式:在命令后直接跟上子命令和参数,适合一次性执行简单任务。

强烈推荐使用交互式模式,因为它能提供更好的提示和反馈。

启动 parted

sudo parted /dev/sdX
# 将 sdX 替换为你的设备名,sda, sdb, nvme0n1p1 等

注意:对磁盘进行分区操作需要管理员权限,因此必须使用 sudo

parted命令分区操作如何高效实现?-图2
(图片来源网络,侵删)

进入交互式模式后,你会看到类似下面的提示符:

(parted) 

查看帮助

(parted) 提示符下,输入 help 或 可以查看所有可用命令。

(parted) help

查看磁盘信息

这是使用 parted 的第一步,用来了解磁盘的当前状态。

(parted) print

或者使用缩写 p

parted命令分区操作如何高效实现?-图3
(图片来源网络,侵删)
(parted) p

输出示例 (GPT 分区表):

Model: ATA SanDisk Ultra 3 (scsi)
Disk /dev/sda: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name  Flags
 1      1049kB  538MB   537MB   fat32              boot, esp
 2      538MB   1000GB  1000GB  ext4

输出示例 (MBR 分区表):

Model: WDC WD10EZEX-60M2NA0 (scsi)
Disk /dev/sdb: 1000GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags: 
Number  Start   End     Size    Type      File system  Flags
 1      1049kB  106MB   105MB   primary   fat16         boot, lba
 2      106MB   1000GB  1000GB  primary   ext4

核心操作流程

下面是一个典型的分区操作流程,以一块全新的 20GB 磁盘 /dev/sdb 为例。

步骤 1:选择磁盘并查看状态

sudo parted /dev/sdb
(parted) print

如果磁盘是全新的,输出可能显示 Partition Table: msdosunknown

步骤 2:设置分区表格式

对于现代系统,强烈推荐使用 GPT

(parted) mklabel gpt

如果你确实需要使用 MBR,则使用:

(parted) mklabel msdos

警告mklabel 命令会擦除磁盘上的所有数据!执行前请确保数据已备份或磁盘是全新的。

步骤 3:创建分区

交互式创建

使用 mkpart 命令,它会提示你输入文件系统和起始/结束位置。

(parted) mkpart
Partition name?  []? my_root_partition
File system type?  [ext4]? 
Start?  [2048s]? 1MiB
End?  [20.5GB]? 10GiB

这里的 s 代表 sector(扇区)。1MiB 是一个很好的起始位置,可以避免一些 BIOS/UEFI 的对齐问题。

命令行参数创建

直接在命令中指定所有参数,更快捷。

# 创建一个 1GB 的 FAT32 分区,用于启动
(parted) mkpart primary fat32 1MiB 1GiB
# 创建一个主分区,从 1GiB 到 20GiB,文件系统暂时未知
(parted) mkpart primary ext4 1GiB 20GiB

注意:在 GPT 下,mkpart 的第一个参数(分区类型)通常是 primarylogical,但在 GPT 中这只是一个标签,实际意义不大,在 MBR 下,primarylogical 是有区别的。

步骤 4:设置分区标志

分区标志用于指定分区的特殊用途,boot, esp, swap, lvm 等。

  • boot:用于 BIOS 启动。
  • esp:用于 UEFI 系统的 EFI 系统分区。
  • swap:用于交换分区。
# 假设第一个分区是 ESP (EFI System Partition)
(parted) set 1 esp on
# 假设第二个分区是启动分区
(parted) set 2 boot on
# 假设第三个分区是交换分区
(parted) set 3 swap on

这里的 1, 2, 3 是分区的编号。

步骤 5:查看分区表

创建完分区后,务必再次使用 print 查看结果,确保一切正确。

(parted) print

输出示例:

Model: Virtual Disk (virtblk)
Disk /dev/vdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 
Number  Start   End     Size    File system  Name              Flags
 1      1049kB  1074MB  1073MB  fat32                         esp
 2      1074MB  11.1GB  10.0GB               my_root_partition

步骤 6:退出 parted

确认无误后,退出 parted

(parted) quit

步骤 7:格式化分区

parted 只负责创建分区,不负责格式化,你需要使用 mkfs 系列命令来格式化分区。

# 格式化第一个分区为 FAT32
sudo mkfs.vfat -F 32 /dev/sdb1
# 格式化第二个分区为 ext4
sudo mkfs.ext4 /dev/sdb2
# 格式化第三个分区为 swap
sudo mkswap /dev/sdb3

步骤 8:挂载分区

格式化完成后,就可以创建挂载点并挂载使用了。

# 创建挂载点
sudo mkdir /mnt/mydisk
# 挂载 ext4 分区
sudo mount /dev/sdb2 /mnt/mydisk
# 挂载 ESP 分区
sudo mkdir /boot/efi
sudo mount /dev/sdb1 /boot/efi
# 启用 swap 分区
sudo swapon /dev/sdb3

常用命令速查表

命令 描述 示例
print (或 p) 打印当前设备的分区表信息 (parted) print
unit <unit> 设置默认的显示单位 (parted) unit GB
mklabel <type> 创建新的分区表 (parted) mklabel gpt
mkpart 创建新分区 (parted) mkpart primary ext4 1GiB 10GiB
rm <num> 删除分区 (parted) rm 2
set <num> <flag> <on/off> 设置或取消分区的标志 (parted) set 1 boot on
rescue <start> <end> 尝试恢复一个可能丢失的分区 (parted) rescue 100MiB 200MiB
quit 退出 parted (parted) quit

注意事项与最佳实践

  1. 数据备份:在操作任何包含重要数据的磁盘之前,务必备份! parted 的误操作可能会导致数据永久丢失。
  2. GPT 优先:对于新系统,尤其是 UEFI 启动的系统,始终使用 GPT 分区表。
  3. 对齐:现代硬盘(尤其是 SSD 和大容量 HDD)有扇区对齐的要求(通常是 4K 或 1M),从 1MiB 开始创建分区通常是一个安全的选择,可以避免性能下降。
  4. 谨慎使用 rmrm 命令会立即删除分区,数据不会进入回收站,删除前请用 print 确认分区编号是否正确。
  5. 处理损坏的 GPT:有时 GPT 表可能损坏,但分区数据还在,可以使用 rescue 命令尝试找回分区。

高级示例:调整分区大小

parted 也可以调整分区大小,但风险极高,同样需要备份。

假设我们要将 /dev/sdb2 分区从 10GB 扩展到 20GB。

  1. 确保文件系统可以在线调整大小ext4 通常可以,但 xfsbtrfs 可能需要卸载或使用特定工具。

  2. 缩小文件系统:在扩大分区前,最好先缩小文件系统本身,以防数据损坏。

    # 先卸载分区
    sudo umount /dev/sdb2
    # 检查文件系统
    sudo e2fsck -f /dev/sdb2
    # 缩小文件系统到 8GB
    sudo resize2fs /dev/sdb2 8G
  3. 使用 parted 调整分区大小

    sudo parted /dev/sdb
    (parted) print
    (parted) resizepart 2 20GiB  # 将分区2调整为20GB结束
    (parted) print
    (parted) quit
  4. 扩展文件系统

    # 检查文件系统
    sudo e2fsck -f /dev/sdb2
    # 将文件系统扩展到分区最大大小
    sudo resize2fs /dev/sdb2
    # 重新挂载
    sudo mount /dev/sdb2 /mnt/mydisk

希望这份详细的指南能帮助你熟练掌握 parted 命令!

分享:
扫描分享到社交APP
上一篇
下一篇