Linux 中的 Parted 命令是一个用来管理磁盘分区的工具,但凡对磁盘分区的新增、删除、大小的变更等动作都可以用这个工具来处理。
传统上 Linux 系统中若要管理磁盘分区,最常用的工具就是 Parted。fdisk 只适合于用容量较小的硬盘,容量太大的硬盘就无法使用 fdisk 进行处理。
fdisk 所能处理的的磁盘容量上限是2TB,若磁盘的容量大于 2TB就无法使用 fdisk,这时候就要改用支持GPT的格式的Parted,以现在最新的硬盘来说,容量通常都是在2TB以上,所以学习使用Parted来管理磁盘分区是很重要的。
由于 Parted 的执行效果会立即生效,所有磁盘分区的变更都会马上写入硬盘中,如果您没有使用过 Parted 的经验,建议可以找一台米有用的电脑来练习,或是使用虚拟机 (VirtualBox),以免不小心造成磁盘的资料损毁。
安装 Parted 磁盘分区工具
在 Debian 系列的 Linux 中(如 Ubuntu、Linux Mint 等),可以使用 apt 安装 Parted:
sudo apt-get install parted
在 RHEL、CentOS 或 Fedora 中,則使用 yum 安裝:
sudo yum install parted
在 Fedora 22 以上的版本则使用 dnf 安裝:
dnf install parted
Parted 命令分为两种模式:命令行模式和交互模式。
- 命令行模式: parted [option] device [command],该模式可以直接在命令行下对磁盘进行分区操作,比较适合编程应用。
- 交互模式:parted [option] device 类似于使用fdisk /dev/xxx
MBR:MBR分区表(即主引导记录)大家都很熟悉。所支持的最大卷:2T,而且对分区有限制:最多4个主分区或3个主分区加一个扩展分区
GPT: GPT(即GUID分区表)。是源自EFI标准的一种较新的磁盘分区表结构的标准,是未来磁盘分区的主要形式。与MBR分区方式相比,具有如下优点。突破MBR 4个主分区限制,每个磁盘最多支持128个分区。支持大于2T的分区,最大卷可达18EB。
parted是一个可以分区并进行分区调整的工具,他可以创建,破坏,移动,复制,调整ext2 linux-swap fat fat32 reiserfs类型的分区,可以创建,调整,移动Macintosh的HFS分区,检测jfs,ntfs,ufs,xfs分区。
使用方法:parted [options] [device [command [options…]…]]
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分区
显示分区表信息 quit 退出parted
基本 Parted 使用方式
使用 root 管理者权限执行 parted:
sudo parted
这样就会进入到 Parted 的操作环境中,这时候终端机上会提示 parted 的版本资讯,并且出现(parted)的提示字样,类似这样:
GNU Parted 2.3 Using /dev/sda Welcome to GNU Parted! Type ‘help’ to
view a list of commands.(parted)
在 Parted 的操作环境中执行 help 指令可以提示简单的指令列表与操作说明:
(parted) help
如果要离开 Parted 操作环境,可以執行 quit
(parted) quit
列出 Linux 磁盘分区表
在 Parted 的操作环境中,执行 print 指令可以列出目前的磁盘分区表信息:
(parted) print
输出类似这样:
Model: ATA TOSHIBA MQ01ACF0 (scsi) Disk /dev/sda: 500GB Sector size
(logical/physical): 512B/4096B Partition Table: gptNumber 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
建立磁盘分区表
Parted 可以用來建立磁盘的主分区表与逻辑分区表,两种分区的建立方式是相同的,这里师范主分区表的建立步驟。
在建立分区表之前,请先执行 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: gptNumber Start End Size File system Name Flags
接着家里磁盘分区,建立分区可以使用 mkpart 指令来建立:
(parted) mkpart
接着输入一些设定参数:
Partition name? []? my_part 1
File system type? [ext2]? 2
Start? 1 3
End? 10000 41 输入分区名称
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: gptNumber 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,
1605632Allocating group tables: done Writing
inode tables: done Creating journal (32768
blocks): done Writing superblocks and filesystem accounting
information: done
如果需要将分区格式化成其他的文件系统,可以使用其他的 mkfs.* 工具。
虽然 Parted 操作环境之中也有格式化分区的功能,但是它的稳定性不如一般专门的格式化工具(如 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
调整磁盘分区大小
Parted 的 resizepart 指令可以用来更改 Linux 的磁盘分区大小,在变更磁盘分区之前,要先用 print 指令查询磁盘分区编号:
(parted) print
在 print 的输出中,可以查到每个磁盘分区的编号:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size
(logical/physical): 512B/512B Partition Table: gptNumber 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 3
1 输入分区编号;
2 输入分区结束位置。
3 如果是缩小分区,可能会造成资料的损失,若确认要执行,则输入 y。
用 print 确认:
(parted) print
输出为:
Model: ATA VBOX HARDDISK (scsi) Disk /dev/sdb: 10.7GB Sector size
(logical/physical): 512B/512B Partition Table: gptNumber Start End Size File system Name Flags 1
1049kB 5000MB 4999MB ext4 my_part