Linux 中的 Parted 命令是一个用来管理磁盘分区的工具,但凡对磁盘分区的新增、删除、大小的变更等动作都可以用这个工具来处理。
传统上 Linux 系统中若要管理磁盘分区,最常用的工具就是 Parted。fdisk 只适合于用容量较小的硬盘,容量太大的硬盘就无法使用 fdisk 进行处理。
fdisk 所能处理的的磁盘容量上限是2TB,若磁盘的容量大于 2TB就无法使用 fdisk,这时候就要改用支持GPT的格式的Parted,以现在最新的硬盘来说,容量通常都是在2TB以上,所以学习使用Parted来管理磁盘分区是很重要的。
由于 Parted 的执行效果会立即生效,所有磁盘分区的变更都会马上写入硬盘中,如果您没有使用过 Parted 的经验,建议可以找一台米有用的电脑来练习,或是使用虚拟机 (VirtualBox),以免不小心造成磁盘的资料损毁。
sudo apt-get install parted在 RHEL、CentOS 或 Fedora 中,則使用 yum 安裝:
sudo yum install parted在 Fedora 22 以上的版本则使用 dnf 安裝:
dnf install partedParted 命令分为两种模式:命令行模式和交互模式。
options
-h --help 显示帮助信息
-s --script 从不提示用户
-v --version 显示版本
-i --interactive 在必要时,提示用户
-l --list 显示所有块设备上的分区
device
对哪个块设备进行操作,如果没有指定则使用第一个块设备
command [options...]
check partition 对分区做一个简单的检测
cp [source-device] source dest 复制source-device设备上的source分区到当前设备的dest分区
mklabel label-type 创建新分区表类型,label-type可以是:"bsd", "dvh", "gpt", "loop","mac", "msdos", "pc98", or "sun" 一般的pc机都是msdos格式,如果分区大于2T则需要选用gpt格式的分区表。
mkfs partition fs-type 在partition分区上创建一个fs-type文件系统,fs-type可以是:"fat16", "fat32", "ext2", "linux-swap","reiserfs" 注意不支持ext3格式的文件系统,只能先分区然后用专有命令进行格式化。
mkpart part-type [fs-type] start end 创建一个part-type类型的分区,part-type可以是:"primary", "logical", or "extended" 如果指定fs-type则在创建分区的同时进行格式化。start和end指的是分区的起始位置,单位默认是M。
eg:mkpart primary 0 -1 0表示分区的开始 -1表示分区的结尾 意思是划分整个硬盘空间为主分区
name partition name 给分区设置一个名字,这种设置只能用在Mac, PC98, and GPT类型的分区表,设置时名字用引号括起来
select device 在机器上有多个硬盘时,选择操作那个硬盘
resize partition start end 调整分区大小
rm partition 删除一个分区
rescue start end 拯救一个位于stat和end之间的分区
unit unit 在前面分区时,默认分区时数值的单位是M,这个参数卡伊改变默认单位,"kB", "MB", "GB", "TB"
move partition start end 移动partition分区
print 显示分区表信息 quit 退出parted
parted
:sudo parted
GNU Parted 2.3
Using /dev/sda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted)
(parted) help如果要离开 Parted 操作环境,可以執行
quit
(parted) quit
print
指令可以列出目前的磁盘分区表信息:
(parted) print输出类似这样:
Model: ATA TOSHIBA MQ01ACF0 (scsi) Disk /dev/sda: 500GB Sector size (logical/physical): 512B/4096B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 420MB 419MB ntfs Basic data partition hidden, diag 2 420MB 735MB 315MB fat32 EFI system partition boot 3 735MB 869MB 134MB Microsoft reserved partition msftres 4 869MB 216GB 215GB ntfs Basic data partition msftdata 8 216GB 316GB 100GB ext4 5 316GB 468GB 152GB fat32 msftdata 6 468GB 470GB 1979MB linux-swap(v1) 7 470GB 500GB 30.5GB ntfs Basic data partition hidden, diag
print
指令会列出系統上第一个硬盘的分区信息,如果您的系統中有多块硬盘,可以使用
select
指令來选择要操作的硬盘,例如选择
/dev/sdb
则执行:
(parted) select /dev/sdb输出为:
Using /dev/sdb接着就可以使用
print
列出
/dev/sdb
的磁盘分区信息。
parted
指令时用参数指定:sudo parted /dev/sdb
print
确认一下目前所选择的硬盘是否正确:(parted) print如果是沒有任何资料的硬盘,可能會出現类似这样的信息:
Error: /dev/sdb: unrecognised disk label请小心确认目前的磁盘,若改动错误的磁盘,可能会造成磁盘中的资料全部损毁!
msdos
:(parted) mklabel msdos如果是大于 2TB 的硬盘,可以使用
gpt
:
(parted) mklabel gpt如果硬盘中已经存在有磁盘分区表的信息,就会出现这样的警告:
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want to continue? Yes/No?若确定无误,则输入
y
继续。
(parted) print输出会类似:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags
(parted) mkpart接着输入一些设定参数:
Partition name? []? my_part 1 File system type? [ext2]? 2 Start? 1 3 End? 10000 4
1 输入分区名称
2 分区系统格式,使用预设即可,之后格式化的时候可以再改。
3 輸入起始位置。
4 輸入結束位置。
如果是使用msdos
的磁盘分区表,在建立磁盘分区时会有不同的选项:
Partition type? primary/extended? primary File system type? [ext2]? Start? 1 End? 10000主要的差异是要选择分区表的类型,
primary
是主分区,而
extended 则是扩展分区
。
print
确认:(parted) print输出为:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 10.0GB 9999MB my_part接着离开 Parted 的操作环境。
(parted) quit在 shell 中使用
mkfs.ext4
格式化分区:
mkfs.ext4 /dev/sdb1输出为:
mke2fs 1.42.9 (4-Feb-2014) Filesystem label= OS type: Linux Block size=4096 (log=2) Fragment size=4096 (log=2) Stride=0 blocks, Stripe width=0 blocks 610800 inodes, 2441216 blocks 122060 blocks (5.00%) reserved for the super user First data block=0 Maximum filesystem blocks=2499805184 75 block groups 32768 blocks per group, 32768 fragments per group 8144 inodes per group Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done如果需要将分区格式化成其他的文件系统,可以使用其他的
mkfs.*
工具。
mkfs
系列的工具),所以建议在建立好分区之后,离开 Parted 环境再用一般的工具格式化。mount
將分区挂载起來使用:sudo mkdir /mnt/my_part sudo mount /dev/sdb1 /mnt/my_part/用
df
查看一下挂在后的磁盘状况:
sudo df -h输出为:
Filesystem Size Used Avail Use% Mounted on /dev/sda1 5.8G 2.4G 3.2G 44% / none 4.0K 0 4.0K 0% /sys/fs/cgroup udev 986M 4.0K 986M 1% /dev tmpfs 201M 928K 200M 1% /run none 5.0M 0 5.0M 0% /run/lock none 1001M 136K 1001M 1% /run/shm none 100M 28K 100M 1% /run/user /dev/sdb1 9.1G 21M 8.6G 1% /mnt/my_part
resizepart
指令可以用来更改 Linux 的磁盘分区大小,在变更磁盘分区之前,要先用
print
指令查询磁盘分区编号:
(parted) print在
print
的输出中,可以查到每个磁盘分区的编号:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 10.0GB 9999MB ext4 my_part第一列
Number
就是磁盘分区的编号,以这个
my_part
分区而言,它的编号就是
1
。接着执行
resizepart
:
(parted) resizepart接着输入编号和大小:
Partition number? 1 1 End? [10.0GB]? 5G 2 Warning: Shrinking a partition can cause data loss, are you sure you want to continue? Yes/No? y 31 输入分区编号;
y
。print
确认:(parted) print输出为:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Number Start End Size File system Name Flags 1 1049kB 5000MB 4999MB ext4 my_part