Linux parted命令 详解

parted是Linux下的磁盘分区工具,支持创建、删除、调整分区大小,同时支持MBR和GPT分区表格式,适用于大容量硬盘管理。

基本语法

parted [选项] [设备 [命令 [参数...]]]

# 常见选项
-l, --list             # 列出所有磁盘分区信息
-s, --script           # 从不提示用户
-a, --align            # 对齐类型(none, cylinder, minimal, optimal)
-v, --version          # 显示版本信息
-h, --help             # 显示帮助信息

分区表类型

MBR(主引导记录)
  • 最大支持2TB磁盘
  • 最多4个主分区
  • 可使用扩展分区创建逻辑分区
  • 兼容性好,适用于旧系统
GPT(GUID分区表)
  • 支持超过2TB的大容量硬盘
  • 最多128个分区(Windows)
  • 支持UEFI启动
  • 具有分区表备份,更安全

交互模式

# 进入交互模式(以/dev/sda为例)
sudo parted /dev/sda

# 交互模式下的操作
(parted) help                # 查看帮助
(parted) print               # 显示分区信息
(parted) mklabel             # 创建分区表(msdos或gpt)
(parted) mkpart              # 创建新分区
(parted) rm                  # 删除分区
(parted) resizepart          # 调整分区大小
(parted) quit                # 退出

非交互模式

常用非交互命令示例
# 查看所有磁盘分区信息
sudo parted -l

# 查看指定磁盘信息
sudo parted /dev/sda print

# 创建GPT分区表
sudo parted /dev/sdb mklabel gpt

# 创建MBR分区表(msdos)
sudo parted /dev/sdb mklabel msdos

# 创建主分区(从1GB到10GB,格式为ext4)
sudo parted /dev/sdb mkpart primary ext4 1GB 10GB

# 创建交换分区
sudo parted /dev/sdb mkpart primary linux-swap 10GB 12GB

# 删除分区编号为1的分区
sudo parted /dev/sdb rm 1

# 调整分区大小(将分区1扩展到15GB)
sudo parted /dev/sdb resizepart 1 15GB

常用操作详解

1. 查看磁盘分区信息
# 查看所有磁盘
sudo parted -l

# 查看指定磁盘的详细信息
sudo parted /dev/sda print

# 查看磁盘型号、容量、扇区大小等
sudo parted /dev/sda unit GB print

# 查看分区表类型
sudo parted /dev/sda print | grep 'Partition Table'

# 配合lsblk查看更详细的信息
lsblk -f
fdisk -l
2. 创建分区表

警告:创建分区表会清除磁盘上所有数据!

# 创建GPT分区表(推荐新硬盘使用)
sudo parted /dev/sdb mklabel gpt

# 创建MBR分区表(兼容旧系统)
sudo parted /dev/sdb mklabel msdos

# 创建分区表时指定对齐方式
sudo parted /dev/sdb mklabel gpt align optimal
3. 创建分区
# 创建主分区(从0%到50%的位置)
sudo parted /dev/sdb mkpart primary ext4 0% 50%

# 创建逻辑分区(MBR中)
sudo parted /dev/sdb mkpart logical ext4 50% 100%

# 创建指定大小的分区(从1GB开始,创建10GB分区)
sudo parted /dev/sdb mkpart primary ext4 1GB 11GB

# 创建整个磁盘的分区
sudo parted /dev/sdb mkpart primary ext4 0% 100%

# 创建交换分区
sudo parted /dev/sdb mkpart primary linux-swap 11GB 13GB

# 创建EFI系统分区(UEFI启动必需)
sudo parted /dev/sdb mkpart ESP fat32 1MB 513MB
sudo parted /dev/sdb set 1 boot on
4. 删除分区
# 删除分区编号为2的分区
sudo parted /dev/sdb rm 2

# 删除前先查看分区编号
sudo parted /dev/sdb print

# 删除多个分区
sudo parted /dev/sdb rm 2 rm 3

# 交互模式下删除
sudo parted /dev/sdb
(parted) rm 1
5. 调整分区大小

注意:调整分区前需要先卸载分区,并且分区文件系统必须支持调整!

# 调整分区1的大小为20GB
sudo parted /dev/sdb resizepart 1 20GB

# 扩展分区到磁盘末尾
sudo parted /dev/sdb resizepart 1 100%

# 调整交换分区大小
sudo swapoff /dev/sdb2          # 先关闭交换分区
sudo parted /dev/sdb resizepart 2 5GB
sudo mkswap /dev/sdb2           # 重新格式化
sudo swapon /dev/sdb2           # 重新启用

实战示例

示例1:为新硬盘分区(GPT格式)
# 假设新硬盘为/dev/sdb
# 1. 查看磁盘信息
sudo parted /dev/sdb print

# 2. 创建GPT分区表
sudo parted /dev/sdb mklabel gpt

# 3. 创建EFI系统分区(UEFI启动需要)
sudo parted /dev/sdb mkpart ESP fat32 1MB 513MB
sudo parted /dev/sdb set 1 esp on

# 4. 创建根分区
sudo parted /dev/sdb mkpart primary ext4 513MB 30GB

# 5. 创建交换分区
sudo parted /dev/sdb mkpart primary linux-swap 30GB 34GB

# 6. 创建home分区
sudo parted /dev/sdb mkpart primary ext4 34GB 100%

# 7. 查看分区结果
sudo parted /dev/sdb print

# 8. 格式化分区
sudo mkfs.fat -F32 /dev/sdb1    # EFI分区
sudo mkfs.ext4 /dev/sdb2        # 根分区
sudo mkswap /dev/sdb3           # 交换分区
sudo mkfs.ext4 /dev/sdb4        # home分区

# 9. 启用交换分区
sudo swapon /dev/sdb3
示例2:调整已有分区大小
# 场景:将/home分区缩小,扩大/分区
# 1. 卸载/home分区(如果挂载了)
sudo umount /home

# 2. 检查文件系统
sudo e2fsck -f /dev/sda3

# 3. 缩小文件系统(先缩小文件系统,再缩小分区)
sudo resize2fs /dev/sda3 50G

# 4. 缩小分区
sudo parted /dev/sda resizepart 3 53GB

# 5. 删除/分区并重新创建更大的分区
# 注意:这会导致/分区数据丢失,需要先备份!
# 更好的做法是使用LVM逻辑卷管理

故障排除

# 查看哪些进程在使用设备
sudo lsof /dev/sda1
sudo fuser -m /dev/sda1

# 卸载分区
sudo umount /dev/sda1

# 如果是交换分区,先关闭
sudo swapoff /dev/sda2

# 使用fsck修复文件系统
sudo fsck -y /dev/sda1

# 使用testdisk恢复分区表
sudo apt-get install testdisk
sudo testdisk

# 使用gpart恢复分区表
sudo apt-get install gpart
sudo gpart /dev/sda

# 检查分区类型
sudo blkid /dev/sda1

# 检查文件系统
sudo fsck -n /dev/sda1

# 查看内核识别的分区
sudo cat /proc/partitions

# 重新读取分区表
sudo partprobe /dev/sda
sudo hdparm -z /dev/sda
最佳实践
  • 操作前务必备份重要数据
  • 使用lsblkfdisk -l确认磁盘设备名
  • 对于生产服务器,建议在维护窗口操作
  • 大容量硬盘使用GPT分区表
  • 考虑使用LVM(逻辑卷管理)提供更灵活的分区管理
  • 操作前卸载分区,操作后使用partprobe更新内核分区表
注意事项
  • 数据无价! 操作前务必备份
  • 创建分区表会清除所有数据
  • 调整分区大小可能导致数据丢失
  • 操作时需要root权限
  • 某些操作需要重启才能生效
  • 不同文件系统对调整大小的支持不同