逻辑卷快照
LVM还具备有“快照卷”功能,该功能类似于虚拟机软件的还原时间点功能。例如,对某一个逻辑卷设备做一次快照,如果日后发现数据被改错了,就可以利用之前做好的快照卷进行覆盖还原。LVM的快照卷功能有两个特点:
快照卷的容量必须等同于逻辑卷的容量;
快照卷仅一次有效,一旦执行还原操作后则会被立即自动删除。
在正式操作前,先看看VG(卷组)中的容量是否够用:
[root@abc ~]# vgdisplay
--- Volume group ---
VG Name storage
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 4
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 30 / 120.00 MiB
Free PE / Size 10208 / <39.88 GiB
VG UUID k3ZnaP-wGPr-TQJ5-PCtA-0RgO-jvsi-9elZ5M
………………省略部分输出信息………………
通过卷组的输出信息可以清晰看到,卷组中已经使用了120MB的容量,空闲容量还有39.88GB。接下来用重定向往逻辑卷设备所挂载的目录中写入一个文件。
[root@abc ~]# echo "Welcome to abc.com" > /abc/readme.txt
[root@abc ~]# ls -l /abc
total 14
drwx------. 2 root root 12288 Jan 15 01:11 lost+found
-rw-r--r--. 1 root root 26 Jan 15 07:01 readme.txt
第1步:使使用-s参数生成一个快照卷,使用-L参数指定切割的大小,需要与要做快照的设备容量保持一致。另外,还需要在命令后面写上是针对哪个逻辑卷执行的快照操作,稍后数据也会还原到这个相应的设备上。
[root@abc ~]# lvcreate -L 120M -s -n SNAP /dev/storage/vo
Logical volume "SNAP" created
[root@abc ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/SNAP
LV Name SNAP
VG Name storage
LV UUID qd7l6w-3Iv1-6E3X-RGkC-t5xl-170r-rDZSEf
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-01-15 07:02:44 +0800
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 0.01%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:5
………………省略部分输出信息………………
第2步:在逻辑卷所挂载的目录中创建一个100MB的垃圾文件,然后再查看快照卷的状态。可以发现存储空间的占用量上升了。
[root@abc ~]# dd if=/dev/zero of=/abc/files count=1 bs=100M
1+0 records in
1+0 records out
104857600 bytes (105 MB, 100 MiB) copied, 0.312057 s, 336 MB/s
[root@abc ~]# lvdisplay
--- Logical volume ---
LV Path /dev/storage/SNAP
LV Name SNAP
VG Name storage
LV UUID qd7l6w-3Iv1-6E3X-RGkC-t5xl-170r-rDZSEf
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2021-01-15 07:02:44 +0800
LV snapshot status active destination for vo
LV Status available
# open 0
LV Size 120.00 MiB
Current LE 30
COW-table size 120.00 MiB
COW-table LE 30
Allocated to snapshot 83.71%
Snapshot chunk size 4.00 KiB
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:5
………………省略部分输出信息………………
第3步:为了校验快照卷的效果,需要对逻辑卷进行快照还原操作。在此之前记得先卸载掉逻辑卷设备与目录的挂载。
lvconvert命令用于管理逻辑卷的快照,语法格式为“lvconvert [参数]快照卷名称”。
使用lvconvert命令能自动回复逻辑卷的快照,在早期的RHEL/CentOS 5版本中要写全格式:“--mergesnapshot”,而从RHEL 6到RHEL 8,已经允许用户只输入--merge参数进行操作了,系统会自动分辨设备的类型。
[root@abc ~]# umount /abc
[root@abc ~]# lvconvert --merge /dev/storage/SNAP
Merging of volume storage/SNAP started.
storage/vo: Merged: 36.41%
storage/vo: Merged: 100.00%
第4步:快照卷会被自动删除掉,并且刚刚在逻辑卷设备被执行快照操作后再创建出来的100MB的垃圾文件也被清除了。
[root@abc ~]# mount -a
[root@abc ~]# cd /abc/
[root@abc abc]# ls
lost+found readme.txt
[root@abc abc]# cat readme.txt
Welcome to abc.com
删除逻辑卷
当生产环境中想要重新部署LVM或者不再需要使用LVM时,则需要执行LVM的删除操作。为此,需要提前备份好重要的数据信息,然后依次删除逻辑卷、卷组、物理卷设备,这个顺序不可颠倒。
第1步:取消逻辑卷与目录的挂载关联,删除配置文件中永久生效的设备参数。
[root@abc ~]# umount /abc
[root@abc ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Tue Jul 21 05:03:40 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rhel-root / xfs defaults 0 0
UUID=2db66eb4-d9c1-4522-8fab-ac074cd3ea0b /boot xfs defaults 0 0
/dev/mapper/rhel-swap swap swap defaults 0 0
/dev/cdrom /media/cdrom iso9660 defaults 0 0
/dev/storage/vo /abc ext4 defaults 0 0
第2步:删除逻辑卷设备,需要输入y来确认操作。
[root@abc ~]# lvremove /dev/storage/vo
Do you really want to remove active logical volume storage/vo? [y/n]: y
Logical volume "vo" successfully removed
第3步:删除卷组,此处只写卷组名称即可,不需要设备的绝对路径。
[root@abc ~]# vgremove storage
Volume group "storage" successfully removed
第4步:删除物理卷设备。
[root@abc ~]# pvremove /dev/sdb /dev/sdc
Labels on physical volume "/dev/sdb" successfully wiped.
Labels on physical volume "/dev/sdc" successfully wiped.
在上述操作执行完毕之后,再执行lvdisplay、vgdisplay、pvdisplay命令来查看LVM的信息时就不会再看到相关信息了(前提是上述步骤的操作是正确的)。干净利落!