LVM命令:

pv(物理卷) vg(卷组) lv(逻辑卷) 注:输入pv/vg/lv,然后按tab两下即可查看相关命令。 PE:物理扩展 LE:逻辑扩展 注:每个PE默认大小为4M。

通过案例来理解pv、vg、lv的创建、挂载、扩容、缩容以及卸载删除等相关的操作命令。 案例1:将sdb、sdc硬盘用LVM进行管理,将它们创建成一个名称为vg0的卷组,在vg0卷组中创建一个7G且名称为lv 0的逻辑卷,然后格式化成ext4文件系统,手动挂载到/mnt/lv0目录,复制/etc/host*到/mnt/lv0目录中。

#第1步,创建pv,并查状态信息。 lsblk #显示块设备 pvcreate /dev/sd[bc] #创建pv。格式说明:pvcreate 硬盘或分区设备 pvs #显示pv状态(根据需要选择其中一条命令即可) pvdisplay #显示所有pv的详细信息 pvscan #扫描已存在的pv设备

#第2步,创建vg卷组,并查状态信息。 pvs #显示pv状态 vgcreate vg0 /dev/sd[bc] #将sdb和sdc组成vg0卷组。格式说明:vgcreate 卷组名 pv设备 vgs #显示vg状态(根据需要选择其中一条命令即可) vgdisplay #显示所有vg的详细信息 vgscan #扫描已存在的vg设备

#第3步,创建lv,显示状态信息。 vgs #显示vg状态 lvcreate -L 7G -n lv0 vg0 3创建lv。格式说明:lvcreate -L 容量 -n lv名称 卷组名称 lvs #显示lv状态(根据需要选择其中一条命令即可) lvdisplay #显示所有lv的详细信息 lvscan #扫描已存在的lv设备

#第4步,格式化创建文件系统,手动挂载lv。写入数据。 lvscan #扫描已存在的lv设备 mkfs.ext4 /dev/vg0/lv0 #格式化 mkdir -pv /mnt/lv0 #创建目录 mount /dev/vg0/lv0 /mnt/lv0 #手动挂载 mount 3查挂载信息 cp -v /etc/host* /mnt/lv0/ #复制文件

案例2:将sdd和sde加入到vg0卷组中(卷组扩容),再将sde从vg0卷组中移除(卷组缩容)。 pvs pvcreate /dev/sd[de] vgs vgextend vg0 /dev/sd[de] #vg扩展 vgreduce vg0 /dev/sde #vg缩容 警告:vg缩容时,如果要移除的硬盘上有数据,必须先用pvmove将这块硬盘的数据迁移到vg卷组中其他的硬盘上。例:pvmove /dev/sdb /dev/sdd

案例3:将lv0逻辑卷容量扩充到12G,并查看状态,再查看文件系统的空间使用状态。 思路:先扩充逻辑卷的容量,再更新文件系统的容量值。 vgs lvextend -L +5G /dev/vg0/lv0 lvs
df -h #发现lv0的文件系统容量并未更新 resize2fs -p /dev/vg0/lv0 #更新文件系统的容量值 注:xfs文件系统更新容量值用”xfs_growfs 挂载点”

案例4:将lv0逻辑卷容量缩小到6G,并查看状态,再查看文件系统的空间使用状态。 思路:先卸载逻辑卷的文件系统,然后扫描逻辑卷的文件系统是否有错误,再缩小文件系统容量,最后缩小逻辑卷的容量。 umount /dev/vg0/lv0 #卸载 e2fsck -f /dev/vg0/lv0 #强制扫描 resize2fs /dev/vg0/lv0 6G # 缩文件系统 lvs
lvreduce -L 6G /dev/vg0/lv0 #缩逻辑卷 mount /dev/vg0/lv0 /mnt/lv0 #挂载 df -h #发现lv0的文件系统容量并未更新 ls /mnt/lv0 #显示lv0逻辑卷中的文件 cat /mnt/lv0/hosts #查看指定文件,发现内容是好的 注:xfs文件系统更新容量值用”xfs_growfs 挂载点”

关于快照卷 1.为lv0制作快照 lvcreate -s -n lv0.snap -L 1G /dev/vg0/lv0 lvs 信息如下 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root cl -wi-ao---- 17.00g
swap cl -wi-ao---- 2.00g
lv0 vg0 owi-aos--- 6.00g
lv0.snap vg0 swi-a-s--- 1.00g lv0 0.00

案例1:对源逻辑卷的数据进行更改,看lvs中的data%值的变化。 df cp -v /etc/*.conf /mnt/lv0 dd if=/dev/zero of=/mnt/lv0/100m bs=10M count=10 lvs

案例2:挂载快照卷。看快照中的数据是什么。 mkdir -pv /mnt/lv0snap lvscan mount /dev/vg0/lv0.snap /mnt/lv0snap ls /mnt/lv0snap #发现快照卷中是创建快照时刻的数据。

案例3:恢复数据 1.打包备份快照卷中的数据(选做) tar -cvf /opt/lv0snap.tar /mnt/lv0snap #保留快照数据就做tar这一步 umount /mnt/lv0 #卸载 umount /mnt/lv0snap lvremove /dev/vg0/lv0snap #删除快照卷

2.恢复数据会删除快照卷 恢复之前要卸载 如果没有卸载要重启才能恢复数据 注:恢复数据,源逻辑卷中更改的数据就会丢失。 lvconvert --merge /dev/vg0/lv0.snap #恢复快照 lvs

mount /dev/vg0/lv0 /mnt/lv0 #挂载 ls /mnt/lv0 #发现是创建快照时候的数据

最后谈谈个人对于快照卷的通俗简单的理解(不足之处请谅解): 假如lv0里面存有h、a、m三个文件,此时给lv0创建一个快照lv0.snap,此时的lv0.snap里面是没有任何文件的,即lv0.snap是一个空文件。当改动lv0里面的h文件时,则原始的h文件,即改动前的h文件会备份到lv0.snap文件,而改动后h.new文件则不会保存到lv0.snap中,且无论之后何如改动h.new文件 都不会备份到lv0.snap中。即lv0.snap只会在创建快照时的原始文件h、a、m被改动时才会把原始的h、a、m文件备份到lv0.snap中。即lv0.snap不会保存除了原始h、a、m文件以外的任何文件。