[命令] Linux 命令组 lvm (逻辑卷管理)

内容一:LVM 的原理

1.1 LVM 的目的

将零散的空闲存储整合成虚拟磁盘,再将虚拟的磁盘整合成虚拟的分区

1.2 LVM 的结构

1.2.1 LVM 的第一层

物理卷
Physical Volume

1.2.2 LVM 的第二层

卷组
Volume Group

1.2.3 LVM 的第三层

逻辑卷
Logical Volume

内容二:LVM 管理的命令集

Function  Physical Volume  Volume group  Logical Volume
Scan      pvscan           vgscan        lvscan
Display   pvdisplay        vgdisplay     lvdisplay
Create    pvcreate         vgcreate      lvcreate
Extend                     vgextend      lvextend
Resize    pvresize                       lvresize
Remove    pvremove         vgremove      lvremove

内容三:快速部署逻辑卷的思路

1)准备至少一个空闲分区

2)创建卷组:

# vgcreate <volume group> <free partition>

3)创建逻辑卷:

# lvcreate -L <logical volume size> -n <logical volume> <volume group>

内容四:创建逻辑卷

4.1 创建卷组

4.1.1 创建卷组的格式
# vgcreate <volume group> <free partition>
4.1.2 创建卷组的案例
# vgcreate vg /dev/vdb2

(补充:这里以使用硬盘 /dev/vdb2 创建名为 vg 的卷组为例)

4.2 创建逻辑卷

4.2.1 创建逻辑卷的格式
4.2.1.1 第一种格式:创建指定大小的逻辑卷
# lvcreate -L <size> <unit> -n <logical volume> <volume group>
4.2.1.2 第二种格式:创建大小是卷组剩余空间百分比的逻辑卷
# lvcreate -l <percentage>%Free -n <logical volume> <volume group>
4.2.1.3 第三种格式:创建大小是卷组全部空间百分比的逻辑卷
# lvcreate -l <percentage>%VG -n <logical volume> <volume group>
4.2.2 创建逻辑卷的案例
4.2.2.1 案例一:创建指定大小的逻辑卷
# lvcreate -L 200M -n vo vg
 Logical volume "vo" created

(补充:这里以使用卷组 vg 创建名为 vo 大小为 200M 的逻辑卷为例)

4.2.2.2 案例二:创建大小是卷组剩余空间百分比的逻辑卷
# lvcreate -l 80%Free -n vo vg
 Logical volume "vo" created

(补充:这里以使用卷组 vg 创建名为 vo 大小为卷组 vg 剩余空间 80% 的逻辑卷为例)

4.2.2.3 案例三:创建大小是卷组全部空间百分比的逻辑据
# lvcreate -l 80%VG -n vo vg
 Logical volume "vo" created

(补充:这里以使用卷组 vg 创建名为 vo 大小为卷组 vg 全部空间 80% 的逻辑卷为例)

4.3 显示已创建的逻辑卷

如果是 CentOS Linux 7 & RHEL 7:

# lvscan
ACTIVE '/dev/vg/vo' [200.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/vg/vo 的大小为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvscan
ACTIVE '/dev/mapper/vg-vo' [200.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/mapper/vg-vo 的大小为例)

4.4 将新创建的逻辑卷格式化、挂载并使用

(步骤略)

内容五:扩展逻辑卷

5.1 检查现有逻辑卷大小

如果是 CentOS Linux 7 & RHEL 7:

# lvscan | grep vo
ACIVE '/dev/vg/vo' [200.00 MiB] inherit
......

(补充:这里以显示逻辑卷 /dev/vg/vo 的大小为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvscan | grep vo
ACIVE '/dev/mapper/vg-vo' [200.00 MiB] inherit
......

(补充:这里以显示逻辑卷 /dev/mapper/vg-vo 的大小为例)

5.2 检查逻辑卷所在卷组的剩余空间,看是否够逻辑卷扩展

# vgdisplay vg | grep Free
 Free PE/Size 4/300.00 MiB

(补充:这里以显示卷组 vg 的大小为例)

5.3 扩展卷组

(注意:如果卷组的剩余空间足够大,则可以跳过次步骤,执行步骤 5.4)

5.3.1 扩展卷组的格式
# vgextend <volume group name> <free partition>
5.3.2 扩展卷组的案例
5.3.2.1 扩展卷组
# vgextend vg /dev/vdb3
 Physical volume "/dev/vdb3" successfully created
 Volume group "vg" successfully extended

(补充:这里以将硬盘 /dev/vdb 添加到卷组 vg 为例)

5.3.2.2 显示扩展后的卷组
# vgdisplay vg | grep 'Free'
 Free PE/Size 128/512.00 MiB

(补充:这里以显示卷组 vg 的剩余大小为例)

5.3.2.3 之后就可以扩展逻辑卷了

5.4 扩展逻辑卷

(注意:只有当卷组剩余空间充足时才能扩展逻辑卷,如果卷组的剩余空间不够大则需要执行步骤 5.3)

5.4.1 扩展逻辑卷的格式
5.4.1.1 第一种格式:将逻辑卷扩展到指定大小

如果是 CentOS Linux 7 & RHEL 7:

# lvextend -L <new size of logical volume> /dev/<volume group>/<logical volume>

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvextend -L <new size of logical volume> /dev/mapper/<volume group>-<logical volume>


补充:如果此时添加 -r 参数,则不需要再执行 5.5.3 和 5.5.4 里刷新文件系统的内容,例:

# lvextend -r -L <new size of logical volume> /dev/<volume group>/<logical volume>

5.4.1.2 第二种格式:给逻辑卷添加指定大小的空间

如果是 CentOS Linux 7 & RHEL 7:

# lvextend -L +<the size of the logical volume add> /dev/<volume group>/<logical volume>

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvextend -L +<the size of the logical volume added> /dev/mapper/<volume group>-<logical volume>


补充:如果此时添加 -r 参数,则不需要再执行 5.5.3 和 5.5.4 里刷新文件系统的内容,例:

# lvextend -r -L +<the size of the logical volume add> /dev/<volume group>/<logical volume>

5.4.1.3 第三种格式:将剩余空间的百分比添加给逻辑卷

如果是 CentOS Linux 7 & RHEL 7:

# lvextend -l +<percentage of remaining size>FREE /dev/<volume group>/<logical volume>

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvextend -l +<percentage of remaining size>FREE /dev/mapper/<volume group>-<logical volume>


补充:如果此时添加 -r 参数,则不需要再执行 5.5.3 和 5.5.4 里刷新文件系统的内容,例:

# lvextend -r -l +<percentage of remaining size>FREE /dev/<volume group>/<logical volume>

5.4.2 扩展逻辑卷的案例
5.4.2.1 案例一:将逻辑卷扩展到某个值

如果是 CentOS Linux 7 & RHEL 7:

# lvextend -L 300MiB /dev/vg/vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以将逻辑卷 /dev/vg/vo 扩展到 300M 为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvextend -L 300MiB /dev/mapper/vg-vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以将逻辑卷 /dev/mapper/vg-vo 扩展到 300M 为例)

5.4.2.2 案例二:给逻辑卷添加某个值

如果是 CentOS Linux 7 & RHEL 7:

# lvextend -L +100MiB /dev/vg/vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以给逻辑卷 /dev/vg/vo 添加 100M 为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvextend -L +100MiB /dev/mapper/vg-vo
 Extending logical volume vo to 300.00 MiB
 Logical volume vo successfully resized

(补充:这里以给逻辑卷 /dev/mapper/vg-vo 添加 100M 为例)

5.4.2.3 案例三:将所有剩余空间添加给逻辑卷,并强制刷新文件系统容量

如果是 CentOS Linux 7 & RHEL 7:

# lvextend -r -l +100%FREE /dev/vg/vo
 Extending logical volume vo to 500.00 MiB
 Logical volume vo successfully resized


补充:
1) 这里以将卷组所有剩余空间都添加给逻辑卷 /dev/vg/vo 为例
2) 这里使用 -r 参数就不需要再执行 5.5.3 和 5.5.4 中刷新文件系统的内容

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvextend -r -l +100%FREE /dev/mapper/vg-vo
 Extending logical volume vo to 500.00 MiB
 Logical volume vo successfully resized


补充:
1) 这里以将卷组所有剩余空间都添加给逻辑卷 /dev/mapper/vg-vo 为例
2) 这里使用 -r 参数就不需要再执行 5.5.3 和 5.5.4 中刷新文件系统的内容

5.4.2.2 显示扩展后的逻辑卷

如果是 CentOS Linux 7 & RHEL 7:

# lvscan
......
ACTIVE '/dev/vg/vo' [300.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/vg/vo 的大小为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvscan
......
ACTIVE '/dev/mapper/vg-vo' [300.00 MiB] inherit

(补充:这里以显示逻辑卷 /dev/mapper/vg-vo 的大小为例)

5.5 刷新文件系统

5.5.1 更新文件系统大小的目的

对于格式化过的逻辑卷,扩展后应该通知 Linux 内核,否则使用 df 等工具时看到的仍是扩展前的大小

5.5.2 显示文件系统的格式
# df -hT
5.5.3 刷新系统容量的格式
5.5.3.1 EXT3/4 文件系统刷新的格式

如果是 CentOS Linux 7 & RHEL 7:

# resize2fs /dev/<volume group>/<logical volume>

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# resize2fs /dev/mapper/<volume group>-<logical volume>

或者:

# resize2fs <logical volume mount point>
5.5.3.2 XFS 文件系统刷新的格式
# xfs_growfs <logical volume mount point>
5.5.3.3 btrfs 文件系统刷新的格式
# btrfs filesystem resize max <logical volume mount point>
5.5.4 刷新文件系统的案例
5.5.4.1 以逻辑卷块作为目标进行刷新

如果是 CentOS Linux 7 & RHEL 7:

# resize2fs /dev/vg/vo

(补充:这里以刷新逻辑卷 /dev/vg/vo 为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# resize2fs /dev/mapper/vg-vo

(补充:这里以刷新逻辑卷 /dev/mapper/vg-vo 为例)

5.5.4.2 以目录作为目标进行刷新
# resize2fs /

(补充:这里以刷新挂载在 / 目录上的逻辑卷为例)

内容六:创建卷组时固定 PE 大小

6.1 创建卷组的时候固定 PE 大小

6.1.1 创建卷组时固定 PE 大小的格式
# vgcreate -s <PE size> <volume group> <free partition>
6.1.2 创建卷组时设置 PE 大小的案例
# vgcreate -s 20MiB pevg /dev/vdb6 Physical volume "/dev/vdb4" 
successfully created Volume group "pevg" successfully created 

(补充:这里以使用 /dev/vdb6 硬盘创建名为 pevg PE 大小为 20M 的卷组为例)

6.2 创建逻辑卷的时候指定 PE 个数

6.2.1 创建逻辑卷的时候指定 PE 个数的格式
# lvcreate -l <number of PE> -n <logical volume> <volume group>
6.2.2 创建逻辑卷的时候指定 PE 个数的案例
# lvcreate -l 50 -n pelo pevg 
 Logical volume "pelo" created

(补充:这里以使用卷组 pevg 创建包含 50 个 PE 个数的逻辑卷为例)

6.2.3 显示刚刚创建的制定了 PE 大小和个数的逻辑卷

如果是 CentOS Linux 7 & RHEL 7:

# lvscan
 ACTIVE '/dev/pevg/pelo' [1000.00 MiB] inherit

(补充:会发现它的大小是精确的)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvscan
 ACTIVE '/dev/mapper/pevg-pelo' [1000.00 MiB] inherit

(补充:会发现它的大小是精确的)

内容七:管理卷组

7.1 激活卷组

7.1.1 激活卷组的格式
# vgchange --activate y <volume group>

或者:

# vgchange -a y <volume group>
7.1.2 激活卷组的案例
# vgchange --activate y vg

或者:

# vgchange -a y vg

(补充:这里以激活卷组 vg 为例)

7.2 取消激活卷组

7.2.1 取消卷组里所有逻辑卷的挂载

(步骤略)

7.2.2 取消激活卷组
7.2.2.1 取消激活卷组的格式
# vgchange --activate n <volume group>

或者:

# vgchange -a n <volume group>
7.2.2.2 取消激活卷组的案例
# vgchange --activate n vg

或者:

# vgchange -a n vg

(补充:这里以取消激活卷组 vg 为例)

内容八:删除卷组和逻辑卷

8.1 删除逻辑卷

(注意:只有先取消此逻辑卷的挂载以后才能删除此逻辑卷)

8.1.1 删除逻辑卷的格式

如果是 CentOS Linux 7 & RHEL 7:

# lvremove /dev/<volume group>/<logical volume>

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvremove /dev/mapper/<volume group>-<logical volume>
8.1.2 删除逻辑卷的案例

如果是 CentOS Linux 7 & RHEL 7:

# lvremove /dev/vg/vo

(补充:这里以删除逻辑卷 /dev/vg/vo 为例)

如果是 Rocky Linux 8 & RHEL 8 & openSUSE & SLE:

# lvremove /dev/mapper/vg-vo

(补充:这里以删除逻辑卷 /dev/mapper/vg-vo 为例)

8.2 删除卷组

(注意:只有先删除此卷组里的所有逻辑卷以后才能再删除此卷组)

8.2.1 删除卷组的格式
# vgremove <volume group>
8.2.2 删除卷组的案例
# vgremove vg

(补充:这里以删除卷组 vg 为例)