Linux VG卷组的管理(建立、查看、扩容、减小和删除)
将多个 PV (Physical Volume,物理卷)合并起来就组成了 VG(Volume Group,卷组)。组成同一个 VG 的 PV 可以是同一块硬盘的不同分区,也可以是不同硬盘的不同分区,或者是不同硬盘。
在已经把物理分区创建成 PV 前提下,接下来就可以建立 VG。可以把 VG 想象成基本分区中的硬盘,VG 是由多个 PV 组成的。当VG空间不足时,可以通过向 VG 中添加新的 PV 来对 VG 空间进行扩容,相反,如果将 VG 中的 PV 移除,就会缩减 VG 空间。
例如,我们有 3 个可用 PV,分别是 /dev/nvmeon1p1、/dev/nvmeon1p2、/dev/nvmeon2,先把 /dev/nvmeon1p1 和 /dev/nvmeon1p2 加入 myvg 卷组,将 /dev/nvmeon2 留作扩容使用,命令如下:
vgscan 命令主要用于查看系统中是否存在 VG,命令如下:
而 vgdisplay 命令则用于查看 VG 的详细状态,命令如下:
在已经把物理分区创建成 PV 前提下,接下来就可以建立 VG。可以把 VG 想象成基本分区中的硬盘,VG 是由多个 PV 组成的。当VG空间不足时,可以通过向 VG 中添加新的 PV 来对 VG 空间进行扩容,相反,如果将 VG 中的 PV 移除,就会缩减 VG 空间。
建立VG
建立 VG 使用的命令是 vgcreate,具体命令格式如下:[root@localhost ~]# vgcreate [选项] VG名 PV名选项:
- -s PE大小:指定 PE 的大小,单位可以是 MB、GB、TB 等。如果不写,默认 PE 大小为 4MB。
例如,我们有 3 个可用 PV,分别是 /dev/nvmeon1p1、/dev/nvmeon1p2、/dev/nvmeon2,先把 /dev/nvmeon1p1 和 /dev/nvmeon1p2 加入 myvg 卷组,将 /dev/nvmeon2 留作扩容使用,命令如下:
[root@localhost ~]# vgcreate myvg /dev/nvme0n1p1 /dev/nvme0n1p2 Volume group "myvg" successfully created #myvg 卷组创建成功使用 /dev/nvme0n1p1 和 /dev/nvme0n1p2 两个 PV 组成 myvg 卷组。其中,卷组名可以自定义。
查看VG
查看 VG 的命令为 vgscan 和 vgdisplay。vgscan 命令主要用于查看系统中是否存在 VG,命令如下:
[root@localhost ~]# vgscan Found volume group "myvg" using metadata type lvm2 Found volume group "rl_192" using metadata type lvm2 #系统中存在 myvg 和 rl_192 卷组
而 vgdisplay 命令则用于查看 VG 的详细状态,命令如下:
[root@localhost ~]# vgdisplay myvg #查看myvg卷组详细信息,如果不指定卷组名,就显示系统中所有卷组的详细信息 -- Volume group --- VG Name myvg <-VG 名 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 1 VG Access read/write <-VG 访问状态 VG Status resizable <-VG 状态 MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 <-VG 中的 PV 数量 Act PV 2 VG Size 19.99 GiB <-VG 大小 PE Size 4.00 MiB <-单个 PE 大小 Total PE 5118 <-VG 中 PE 的总数 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19.99 GiB <-空闲 PE 数量 / 大小 VG UUID j3ffh7-BDjm-7qnd-apjC-Qd0v-p1W6-177Rf0 <-VG 的 UUID
增加VG容量
我们现在要把 /dev/nvme0n2 加入 myvg 卷组,使用的命令是 vgextend,具体如下:[root@localhost ~]# vgextend myvg /dev/nvme0n2 Volume group "myvg" successfully extended #将物理卷/dev/nvme0n2 加入 myvg 卷组 [root@localhost ~]# vgdisplay myvg #查看扩容后 myvg 卷组的详细信息 -- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 3 Metadata Sequence No 2 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 3 Act PV 3 VG Size <39.99 GiB <-卷组大小增加了 20GB PE Size 4.00 MiB Total PE 10237 Alloc PE / Size 0 / 0 Free PE / Size 10237 / <39.99 GiB VG UUID j3ffh7-BDjm-7qnd-apjC-Qd0v-p1W6-177Rf0
减少VG容量
既然增加 VG 内的 PV 数量可以进一步增加 VG 容量,那么也可以通过移除 VG 内 PV 的方式来减少 VG 容量,可以使用 vgreduce 命令在 VG 中移除 PV,命令如下:[root@localhost ~]# vgreduce myvg /dev/nvme0n2 Removed "/dev/nvme0n2" from volume group "myvg" #将/dev/nvme0n2 物理卷从 myvg 卷组中移除 [root@localhost ~]# vgdisplay myvg #查看容量减少后 myvg 卷组的详细信息 -- Volume group --- VG Name myvg System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 0 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 19.99 GiB <-卷组大小减少了 20GB PE Size 4.00 MiB Total PE 5118 Alloc PE / Size 0 / 0 Free PE / Size 5118 / 19.99 GiB VG UUID j3ffh7-BDjm-7qnd-apjC-Qd0v-p1W6-177Rf0 [root@localhost ~]# vgreduce -a myvg Removed "/dev/nvme0n1p2" from volume group "myvg" Removed "/dev/nvme0n1p1" from volume group "myvg" Can't remove final physical volume "/dev/nvme0n2" from volume group "myvg" #在移除 PV 时需要注意,在 VG 中应至少存在 1 个 PV,也就是说,当前 myvg 卷组由 3 个 PV 组成,我们最多可以移除其中的 2 个 PV注意,LVM 采用线性存储模式,即如果是由 2 个 PV 组成的 VG,就先把第 1 个 PV 写满,再向第 2 个 PV 中写入数据。一旦删除已经存储数据的 PV,就会造成数据丢失。
删除VG
删除 VG 使用的命令为 vgremove,具体如下:[root@localhost ~]# vgremove myvg Volume group "myvg" successfully removed #删除 myvg 卷组只有在删除 VG 之后,才能删除 PV。还要注意的是,myvg 卷组中还没有添加任何 LV,如果拥有了 LV,那么记得先删除 LV,再删除 VG。再次强调,删除和创建 LVM 的过程相反,每一步都不能跳过。