1. 问题
之前使用Windows的时候觉得可以随意调整分区的大小特别神奇,感觉Linux上应该也可以随意调整分区大小才行,但是自带的图形界面中的工具有没有修改分区大小的能力。学习了lvm才明白原来一定要使用终端里面的lvm工具才可以调整分区的大小
2. 主要流程
首先要了解PV(Physical)、VG(Volume Group)、LV(Logic Volume)这三个概念。
PV(物理卷)表示实际磁盘上的分区,也就是使用gdisk、fdisk分区出来的分区。
VG表示PV组成的分区组,多个PV的存储空间共同组成VG的储存空间,此时VG就相当于一块新的磁盘。
LV表示在VG磁盘上进行的逻辑分区。
LV在使用的时候是虚拟的磁盘分区,可以用来挂载。LV和普通的物理分区最重要的不同在于LV可以调整大小,普通磁盘的分区不能调整大小。除了LV可以调整大小VG也可以调整大小,只要往VG中加入新的物理卷就行。
因此创建LV的过程如下:
2.1 gdisk阶段
gdisk首先在磁盘上创建三个新的物理卷,如下。最后三个Linux filesystem就是新创建的物理分区。
Number Start (sector) End (sector) Size Code Name
1 2048 1230847 600.0 MiB EF00 EFI System Partition
2 1230848 3327999 1024.0 MiB 8300
3 3328000 55764991 25.0 GiB 8E00
4 55764992 57862143 1024.0 MiB 8300 Linux filesystem
5 57862144 58886143 500.0 MiB 8300 Linux filesystem
6 58886144 59910143 500.0 MiB 8300 Linux filesystem
关于如何物理分区的内容
2.2 PV阶段
PV阶段有点像物理分区阶段的格式化,gdisk分区完之后只需要使用如下指令在物理分区上创建PV即可。
$ pvcreate /dev/sda{4,5,6}
Physical volume "/dev/sda4" successfully created.
Physical volume "/dev/sda5" successfully created.
Physical volume "/dev/sda6" successfully created.
然后使用指令pvscan查看创建过的分区(显示会有一个25G的PV,那是我安装系统时就创建好的)
$ pvscan
PV /dev/sda3 VG fedora_localhost-live lvm2 [25.00 GiB / 7.00 GiB free]
PV /dev/sda4 lvm2 [1.00 GiB]
PV /dev/sda5 lvm2 [500.00 MiB]
PV /dev/sda6 lvm2 [500.00 MiB]
Total: 4 [<26.98 GiB] / in use: 1 [25.00 GiB] / in no VG: 3 [<1.98 GiB]
2.3 VG阶段
VG阶段就是将之前创建好的PV加入一个新创建的(或者旧的)VG。
使用vgcreate在创建VG的同时加入PV
$ vgcreate vg /dev/sda4 /dev/sda5 /dev/sda6
Volume group "vg" successfully created
创建好之后可以使用vgreduce删除一个PV;或者使用vgextend添加一个PV。这样可以达到调整VG大小的目的。
$ vgreduce vg /dev/sda5
Removed "/dev/sda5" from volume group "vg"
$ vgextend vg /dev/sda5
Volume group "vg" successfully extended
2.4 LV阶段
最后可以在VG上创建逻辑分区LV。
使用lvcreate创建逻辑分区,其中-L指定分区的大小,-n指定逻辑分区的名字。
$ lvcreate -L 500M -n first_lv vg
Logical volume "first_lv" created.
接下来可以在/dev/vg/first_lv上找到刚才分出来的逻辑分区。之后就可以使用正常的步骤进行格式化、挂载。
$ mkfs.ext4 /dev/vg/first_lv
$ mkdir /media/logical1
$ mount /dev/vg/first_lv /media/logical1
$ df -Th /media/logical1
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg-first_lv ext4 477M 2.3M 445M 1% /media/logical1
2.5 调整分区大小
首先扩展first_lv的容量,使用lvresize
$ lvresize -L +500M /dev/vg/first_lv
Size of logical volume vg/first_lv changed from 500.00 MiB (125 extents) to 1000.00 MiB (250 extents).
Logical volume vg/first_lv successfully resized.
成功扩大first_lv的容量之后卸载该分区才能对它进行扩展(应该有不用卸载的方法,但是目前没找到)
$ umount /media/logical1/
$ e2fsck -f /dev/vg/first_lv
$ resize2fs /dev/vg/first_lv
$ mount /dev/vg/first_lv /media/logical1/
$ df -Th /media/logical1/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg-first_lv ext4 961M 2.5M 905M 1% /media/logical1
完成挂载之后可以看到该文件系统的容量确实增加到了1000M。
要减少文件系统同样使用lvresize。然而按照上面扩展文件系统的方法我直接把文件系统毁坏了,因此重新创建了一个1000M的first_lv,换了一种方法将它缩小到500M。
$ umount /media/logical1
$ lvresize --resizefs --size 500M /dev/vg/fist_lv
fsck from util-linux 2.35.2
/dev/mapper/vg-fist_lv: clean, 11/64000 files, 8748/256000 blocks
resize2fs 1.45.5 (07-Jan-2020)
Resizing the filesystem on /dev/mapper/vg-fist_lv to 128000 (4k) blocks.
The filesystem on /dev/mapper/vg-fist_lv is now 128000 (4k) blocks long.
Size of logical volume vg/fist_lv changed from 1000.00 MiB (250 extents) to 500.00 MiB (125 extents).
Logical volume vg/fist_lv successfully resized.
$ mount /dev/vg/fist_lv /media/logical1/
$ df -Th /media/logical1/
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vg-fist_lv ext4 477M 1.5M 440M 1% /media/logical1