028-85452772
177-8044-0881
177-8071-8660

Linux中强大的分区工具parted,磁盘分区、格式化和挂载!

来源: | 作者:zxzy-server | 发布时间 :2025-07-21 | 647 次浏览: | 分享到:
1. 进入parted交互模式,如:parted /dev/sda
2. 显示当前磁盘的分区表信息(parted) print
3. 创建分区表(例如:GPT)(parted) mklabel gpt
4. 创建分区(parted) mkpart primary ext4 1MiB 10GiB
5. 设置分区为启动分区(parted) set 1 boot on
6. 退出(parted) quit

parted是Linux中一个功能强大的磁盘分区工具,相对于传统的fdisk,它提供了更多的功能,非常适合对现代大容量磁盘和GPT分区表的管理。 parted的基本用法如下: ``` 1. 进入parted交互模式,如:parted /dev/sda 2. 显示当前磁盘的分区表信息(parted) print 3. 创建分区表(例如:GPT)(parted) mklabel gpt 4. 创建分区(parted) mkpart primary ext4 1MiB 10GiB 5. 设置分区为启动分区(parted) set 1 boot on 6. 退出(parted) quit ``` 下面看看具体的实例,让我们详细了解parted的用法,顺便分享挂载分区的操作。 执行`lsblk`查看磁盘和分区,如下图这里有一个sda的磁盘是还没有分区的 ``` [root@rke2-node01 ~]# 1sblk NAME sda sdb ⊢sdb1 -sdb2 -sdb3 MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS 8:0 0 110G0 disk 8:160 500G0 disk 8:17 0 600M 8:18 0 0 part /boot/efi 1G 8:19 0 498.4G 0 part 公众号·上优榜 0 part ``` 使用parted交互式命令行,操作/dev/sda磁盘进行分区:`parted /dev/sda` 给磁盘创建GPT(GUID Partition Table)分区表类型`mklabel gpt` 这时会警告清空磁盘所有数据,需确认磁盘无重要数据!输入“y”回车 创建一个主分区,容量占用磁盘的全部空间`mkpart primary 0% 100%` 打印列出当前磁盘的分区表信息`print` 退出parted分区交互模式`quit` 退出后,所有更改会立即生效,无需额外保存(不需要像fdisk那样输入w写入) 以上步骤就完成了分区操作。 ``` [root@rke2-node01 ~]# parted /dev/sda GNU Parted 3.5 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) mklabel gpt Warning: The existing disk label on /dev/sda will be destroyed Yes/No? y (parted) mkpart primary 0% 100% (parted) print Model: VMware Virtual disk (scsi) Disk /dev/sda: 118GB Sector size (logical/physical):512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags primary 1 1049kB 118GB 118GB (parted) quit Information: You may need to update /etc/fstab 公众号·上优榜 ``` 可以使用`lsblk`查看刚才创建的分区 ``` [root@rke2-node01 ~]# 1sblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda Lsdal sdb 8:0 0 110G 0 disk 8:10 110G 0 part 8:160 500G0 disk ``` 这里还需要看看分区是否有4K对齐,当使用`mkpart primary 0% 100%`进行分区,一般是默认4K对齐的,可以执行下面这条命令验证: ``` parted /dev/sda align-check optimal 1 ``` ``` [root@rke2-node01 ~]# parted /dev/sda align-check optimal 1 1 aligned ``` 如果返回1 aligned,表示分区是4K对齐的。如果返回1 not aligned,则没有4K对齐,则需要删除分区(下面会讲到),然后在重新创建分区时: `mkpart primary 0% 100%`改成`parted /dev/sda mkpart primary 1MiB 100%` 1MiB(2048 × 512B = 1MiB)是标准的4K对齐方式,适用于几乎所有现代存储设备。 删除分区的操作如下: 如果已经挂载了分区,则先解除挂载,比如`umount /dev/sda1` 如果没有挂载过这个分区,则直接执行如下命令来直接删除分区:`parted /dev/sda` 输入print确认分区序号(这里是1) 输入rm 1删除第1号分区 输入quit退出 删除分区的操作会即生效 ``` [root@rke2-node01 ~]# 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: VMware Virtual disk (scsi) Disk /dev/sda: 118GB Sector size (logical/physical):512B/512B Partition Table: gpt Disk Flags: Number Start 1 End Size File system Name Flags primary 1049kB 118GB 118GB (parted) rm 1 (parted) quit Information: You may need to update /etc/fstab ``` 公众号·上优榜 也可以使用如下命令直接删除分区:`parted /dev/sda rm 1` 数字1表示这个磁盘中的分区的序号,如果有多个分区,需要输入相应的分区序号 虽然分区已创建完成,但要使用这个分区,还需对分区进行格式化和挂载操作: 1. 如果直接作为普通分区: 格式化文件系统(例如ext4):`mkfs.ext4 /dev/sda1`(过程中如有交互选项,使用默认直接按回即可) 挂载使用,如:`mount /dev/sda1 /mnt` 查看sda1分区的文件系统和挂载的目录:`df -Th | grep sda1` ``` [root@rke2-node01 ~]# df -Th | grep sda1 /dev/sdal ext4 1号 103G 24K 108G /mnt ``` 如果需要设置开机自动挂载,就需要编辑`/etc/fstab`文件:`nano /etc/fstab` 添加一行内容: `/dev/sda1    /mnt    ext4    defaults    0 0` 文件系统的类型要对应上面格式化分区的相对应,这里是ext4。`blkid /dev/sda1`命令可以查看sda1这个普通分区的格式。 推荐使用UUID挂载,避免设备名有变化时引起的挂载错误: 先执行`blkid /dev/sda1`命令查看`/dev/sda1`这个磁盘设备分区的UUID号 ``` [root@rke2-node01 ~]# blkid /dev/sdal /dev/sda1: UUID="CTUD3R-DfZh-VZMG-LXuA-UVXf-tCdL-rCXfCT" [root@rke2-node01 ~]# ``` 然后写入/etc/fstab:`nano /etc/fstab` 加入一行: `UUID=CTUD3R-DfZh-VZMG-LXuA-UVXf-tCdL-rCXfCT  /mnt/data  ext4  defaults,nofail  0 0` 这里加入`nofail`参数,是防止某个分区可能出现问题,比如是移动硬盘、U盘、网络存储等,在挂载出现错误时不会阻止系统启动。 然后检查挂载是否有错误: 执行`mount -a`,这个命令会尝试挂载/etc/fstab中所有当前尚未挂载的项,如果没有任何输出,说明配置没有问题 2. 如果把分区用于LVM分区,则执行如下操作: 创建物理卷(PV)`pvcreate /dev/sda1` 创建一个名称为data_vg的卷组(VG),并加入`/dev/sda1`物理卷:`vgcreate data_vg /dev/sda1` 创建逻辑卷,占用全部的磁盘空间,它类似于传统分区,但可以动态调整大小 创建占满整个分区空间的逻辑卷“data_lv” `lvcreate -n data_lv -l 100%FREE data_vg` 格式化并挂载: 格式化为ext4文件系统 `mkfs.ext4 /dev/data_vg/data_lv` 挂载到/mnt `mount /dev/mapper/data_vg-data_lv /mnt  或者  mount /dev/data_vg/data_lv /mnt` ``` [root@rke2-node01 ~]# pvcreate /dev/sda1 Physical volume "/dev/sda1" successfully created. [root@rke2-node01 ~]# vgcreate data_vg /dev/sda1 Volume group "data_vg" successfully created [root@rke2-node01 ~]# 1vcreate -n data_1v -1 100%FREE data_vg Logical volume "data lv" created. [root@rke2-node01 ~]# mkfs.ext4 /dev/data_vg/data_lv mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 12975104 4k blocks and 3244032 inodes Filesystem UUID:3877ed1c-994c-4c31-b876-f10d334e4a8b Superblock backups stored on blocks: 32768, 98304, 163840, 229376,294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624,11239424 Allocating group tables: done Writing inode tables: done Creating journal (65536 blocks): done Writing superblocks and filesystem accounting information: done [root@rke2-node01 ~]# mount /dev/data_vg/data_1v /mnt 公众号·上优榜 [root@rke2-node01 ~]# ``` 写入到/etc/fstab以开机自动挂载`nano /etc/fstab` 加入一行: `mount /dev/mapper/data_vg-data_lv /mnt  ext4  defaults  0 0` 或者 `/dev/data_vg/data_lv  /mnt  ext4  defaults  0 0` 更推荐的使用UUID的方式写入/etc/fstab以开机自动挂载: 先查看设备分区的UUID: `blkid /dev/mapper/data_vg-data_lv  或者  blkid /dev/data_vg/data_lv` ``` [root@rke2-node01 ~]# blkid /dev/mapper/data vg-data lv /dev/mapper/data_vg-data_lv: UUID="58144a65-700a-4b4a-b40c-9fd1dd84896f" TYPE="ext4" [root@rke2-node01 ~]# [root@rke2-node01 ~]# blkid /dev/data vg/data lv /dev/data_vg/data_lv: UUID="58144a65-700a-4b4a-b40c-9fd1dd84896f" TYPE="ext4" ``` `nano /etc/fstab`加入一行: `UUID=58144a65-700a-4b4a-b40c-9fd1dd84896f  /mnt  ext4  defaults  0 0` 修改分区的名称(即LABEL标签) 对于ext2/ext3/ext4文件系统:e2label /dev/sda1 data1 对于xfs文件系统:xfs_admin -L data1 /dev/sda1 lsblk -f 或者 blkid 以上内容是分区的基本操作。如果你想更想更深入一点了解分区的其它场景,请继续往下看。 下面来看看怎样查看磁盘中剩余没分配的空闲空间,并对剩余空间进行分区处理。 这里假设sda磁盘只分配了一部分空间给sda1分区了,还有部分空间分配的,要把剩余没分配的空闲空间创建划分给一个sda2的新分区。 先查看磁盘未分配空间: `parted /dev/sda print free  或 fdis -l /dev/sda` ``` Model: VMware Virtual disk (scsi) Disk /dev/sda: 118GB [root@rke2-node01 ~]# parted /dev/sda print free Sector size (logical/physical):512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 17.4kB 1049kB 1049kB 53.2GB 1031kB 53.1GB Free Space primary lvm 53.2GB 118GB 65.0GB Free Space [root@rke2-node01 ~]# fdisk -1 /dev/sda Disk /dev/sda: 110 GiB, 118111600640 bytes, 230686720 sectors Disk model: Virtual disk Units: sectors of 1 *512 =512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/0 size (minimum/optimal):512 bytes / 512 bytes Disklabel type: gpt Disk identifier:7B1611FC-1D80-48FA-9168-3F86B103ADCA Device /dev/sda1 Start 2048 103809023 103806976 49.5G Linux LVM End Sectors Size TyRR公众号·上优榜 ``` 从上图可以看出sda这个磁盘出未分配空间是从53.2GB开始,往后面还有65GB的剩余空间。 执行如下命令把剩余空间创建为sda2的新分区: `parted /dev/sda mkpart primary 53.2GB 100%` 上面命令就完成了sda2新分区的创建。 执行lsblk可查看到sda2的分区,从下图中可见,sda磁盘有两个分区,sda1(LVM)分区和sda2分区 ``` [root@rke2-node01 ~]# parted /dev/sda mkpart primary 53.2GB 100% Information: You may need to update /etc/fstab. [root@rke2-node01 ~]# 1sblk NAME sda -sda1 Ldata_vg-data_lv MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS 8:0 8:1 0 0 110G0 disk 49.5G 0 part 253:3 049.5G 0 lvm /mnt 公众号·上优榜 sda2 8:2 0 60.5G 0 part ``` 还需要格式化才能使用分区,如果要直接格式化作为普通分区,执行:`mkfs.ext4 /dev/sda2`然后挂载,即可。 或者把`/dev/sda2`用作新的LVM物理卷,创建一个新的逻辑卷来使用: 1. 将`/dev/sda2`创建为新的卷组和逻辑卷(不影响原来sda1的`data_vg卷组`) 创建物理卷`pvcreate /dev/sda2` 创建新的卷组 `vgcreate vg_data2 /dev/sda2` 创建逻辑卷,例如叫`lv_data2`,使用全部空间 `lvcreate -l 100%FREE -n lv_data2 vg_data2` 格式化为文件系统(如`ext4`): `mkfs.ext4 /dev/vg_data2/lv_data2` ``` [root@rke2-node01 ~]# pvcreate /dev/sda2 Physical volume "/dev/sda2" successfully created. [root@rke2-node01 ~]# vgcreate vg_data2 /dev/sda2 Volume group "vg_data2" successfully created [root@rke2-node01 ~]# lvcreate -1 100 FREE -n 1v_data2 vg_data2 Logical volume "1v data2" created. [root@rke2-node01 ~]# mkfs.ext4 /dev/vg_data2/1v_data2 mke2fs 1.46.5 (30-Dec-2021) Creating filesystem with 15858688 4k blocks and 3964928 inodes Filesystem UUID:101a0ef7-e452-4310-a3c8-545775f8a116 Superblock backups stored on blocks: 32768, 98304, 163840, 229376,294912, 819200, 884736, 1605632, 2654208, 4096000,7962624,11239424 Allocating group tables: done Writing inode tables: done Creating journal (65536 blocks): done 公众号·上优榜 Writing superblocks and filesystem accounting information: done [root@rke2-node01 ~]# 1sblk NAME sda 8:0 MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS 0 0 8:1 110G 0 disk ⊢sda1 L-data_vg-data_lv -sda2 Lvg_data2-1v_data2 49.5G 0 part 0 49.5G 253:3 8:2 0 60.5G 0 lvm /mnt 0 part 公众号·上优榜 ``` 然后挂载,即可。 如果要删除这个作为LVM的sda2分区,执行如下命令: `pvs # 查看物理卷信息  vgs # 查看卷组信息  lvs # 查看逻辑卷信息  lvremove /dev/vg_data2/lv_data2 # 删除 LVM 逻辑卷(LV)  vgremove vg_data2 # 删除卷组(VG)  pvremove /dev/sda2 # 删除物理卷(PV)  parted /dev/sda rm 2 # 删除 /dev/sda2 分区` 上面最后的删除分区这一步,也可以使用parted交互式操作来删除分区,避免删错分区: parted /dev/sda 输入print确认分区号(这里是2) 输入rm 2删除第2号分区 输入quit退出 ``` [root@rke2-node01 ~]# 1vremove /dev/vg_data2/lv_data2 GNU Parted 3.5 Using /dev/sda Welcome to GNU Parted! Type 'help' to view a list of commands. Do you really want to remove active logical volume vg_data2/lv_data2? [y/n]: y [root@rke2-node01 ~]# vgremove vg_data2 [root@rke2-node01 ~]# pvremove /dev/sda2 [root@rke2-node01 ~]# parted /dev/sda (parted) print Volume group "vg_data2" successfully removed Labels on physical volume "/dev/sda2"successfully wiped. Logical volume "lv_data2" successfully removed. Model: VMware Virtual disk (scsi) Disk /dev/sda: 118GB Sector size (logical/physical):512B/512B Partition Table: gpt Disk Flags: Number Start 1 End Size File system Name Flags primary 1049kB 118GB 118GB (parted) rm 2 (parted) quit Information: You may need to update /etc/fstab. ``` 2. 将/dev/sda2加入现有卷组data_vg 创建物理卷(PV): `pvcreate /dev/sda2` 加入现有卷组data_vg: `vgextend data_vg /dev/sda2` 创建一个新的逻辑卷来单独使用: `lvcreate -l 100%FREE -n data2_lv data_vg` ``` [root@rke2-node01 ~]# 1vcreate -1 100 %FREE -n data2 1v data vg WARNING: ext4 signature detected on /dev/data_vg/data2_1v at offset 1080. wipe it? [y/n]: y Wiping ext4 signature on /dev/data_vg/data2_lv. Logical volume "data2_1v" created. [root@rke2-node01 ~]# [root@rke2-node01 ~]# 1sblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda sda1 8:0 8:1 0 110G 0 disk 0 49.5G 0 part L-data_vg-data_lv sda2 253:3 8:2 049.5G 0 lvm /mnt 0 part 060.5G 公众号·上优榜 Ldata vg-data2 lv ``` 然后挂载,即可。 当把/dev/sda2加入现有卷组data_vg后,如果要删除这个sda2,可以这样操作: 如果你已经挂载了它(如/data),先卸载: `umount /dev/data_vg/data2_lv` 删除逻辑卷data2_lv: `lvremove /dev/data_vg/data2_lv` 从卷组中移除物理卷/dev/sda2: `vgreduce data_vg /dev/sda2` 删除物理卷标签:`pvremove /dev/sda2` 删除/dev/sda2分区本身:`parted /dev/sda rm 2` ``` [root@rke2-node01 ~]# 1vremove /dev/data_vg/data2 lv Do you really want to remove active logical volume data_vg/data2_lv? [y/n]: 'C Interrupted.. Logical volume data vg/data2 1v not removed. umount: /dev/data_vg/data2_lv: not mounted. Do you really want to remove active logical volume data_vg/data2_lv? [y/n]: y Information: You may need to update /etc/fstab. [root@rke2-node01 ~]# umount /dev/data_vg/data2_lv [root@rke2-node01 ~]# 1vremove /dev/data vg/data2 lv [root@rke2-node01 ~]# vgreduce data_vg /dev/sda2 [root@rke2-node01 ~]# pvremove /dev/sda2 [root@rke2-node01 ~]# parted /dev/sda rm 2 Logical volume "data2_1v" successfully removed. Removed "/dev/sda2" from volume group "data_vg" Labels on physical volume "/dev/sda2" successfully wiped. 公众号·上优榜 [root@rke2-node01 ~]# 1sblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda Lsdal L-data_vg-data_lv 8:0 0110G 0 disk 0 part 8:1 0 49.5G 253:3 0 49.5G 0 lvm 今盆号 上优榜 ``` 如果在加入到原有的卷组data_vg后不创建新的逻辑卷,则可以扩展到当前现有逻辑卷(data_lv)来使用: `lvextend -l +100%FREE /dev/data_vg/data_lv` ``` [root@rke2-node01 ~]# lvextend -1 +100%FREE /dev/data_vg/data_lv Size of logical volume data_vg/data_1v changed from <49.50 GiB (12671 extents) to 109.99 GiB (28158 extents). Logical volume data vg/data lv successfully resized. [root@rke2-node01 ~]# [root@rke2-node01 ~]# 1sblk NAME MAJ:MIN RM sda -sda1 ⌞-data_vg-data_lv SIZE RO TYPE MOUNTPOINTS 8:0 0 110G 0 disk 8:1 0 49.5G 0 part 253:3 0 110G 0 1vm L-data_vg-data_lv sda2 8:2 0 60.5G 0 part 110G01vm 公众号·上优榜 253:3 0 ``` 如果data_lv这个逻辑卷未格式化的,就要格式化它(如`ext4`): `mkfs.ext4 /dev/data_vg/data_lv` 然后挂载即可 `mount /dev/data_vg/data_lv /mnt` 如果data_lv这个逻辑卷已经格式化的,则不需再格式化,而是要扩展文件系统: `扩展文件系统(假设是 ext4):  resize2fs /dev/data_vg/data_lv  扩展文件系统(假设是 xfs):  xfs_growfs /mnt 如果是挂载在 /mnt` ``` [root@rke2-node01 ~]# parted /dev/sa mkpart primary 53.2GB 100% Information: You may need to update /etc/fstab. [root@rke2-node01 ~]# pvcreate /dev/sda2 Physical volume "/dev/sda2" successfully created. [root@rke2-node01 ~]# vgextend data_vg /dev/sda2 Volume group "data vg"successfully extended [root@rke2-node01 ~]# 1vextend -1 +100%FREE /dev/data_vg/data_lv Size of logical volume data_vg/data_ 1v changed from <49.50 GiB (12671 extents) to 109.99 GiB (28158 extents) Logical volume data_vg/data_lv successfully resized. [root@rke2-node01 ~]# resize2fs /dev/data_vg/data_lv resize2fs 1.46.5 (30-Dec-2021) Filesystem at /dev/data_vg/data_lv is mounted on /mnt; on-line resizing required old desc blocks =7, new desc blocks =14 The filesystem on /dev/data_vg/data 1v is now 28833792 (4k) blocks long. [root@rke2-node01 ~]# [root@rke2-node01 ~]# [root@rke2-node01 ~]# 1sblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sda 8:0 0 110G 0 disk -sda1 8:1 0 49.5G 0 part Ldata_vg-data_lv 253:3 0 110G 0 lvm /mnt sda2 8:2 0 60.5G 0 part Ldata vg-data lv 公众号·上优榜 253:3 0 110G 0 lvm /mnt ``` 查看LVM 逻辑卷`data_lv`的挂载信息 `df -Th | grep -i data_lv` ``` [root@rke2-node01 ~]# df -Th | grep -i data_lv /dev/mapper/data_vg-data_lv ext4 108G 24K 103G 1% /mnt [root@rke2-node01 ~]# ``` 以上就是`parted`命令的基本用法和一些实际的使用场景。如果我们使用的系统是EFI启动模式的,或者是NVMe SSD、大容量磁盘,分区时强烈推荐使用`parted`,而不是`fdisk`。