恢复或者合并或者提交快照
接下来,一旦我们完成,就可以恢复快照了。
重要的提示:
在合并快照之前,请确保原始源处于卸载状态,否则合并将因逻辑卷的挂起激活而推迟。
如果原始源处于挂载状态,以下是这两种情况的示例
要合并快照,请使用以下命令
# lvconvert --merge /dev/system/snap_data Can't merge until oroirn volume is closed. Merging of snapshot system/snap_data will occur on next activation of system/data.
由于 /data 分区处于挂载状态,快照合并失败,要执行此合并,我们必须执行手动 lvm 激活。
卸载“数据”分区
# umount /data/
取消激活数据分区
# lvchange -an /dev/system/data
重新激活一样
# lvchange -ay /dev/system/data
现在验证“数据”分区的内容。
# ls -l /data/ total 524320 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir1 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir2 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir3 -rw-r--r-- 1 root root 0 Sep 13 03:24 file1 -rw-r--r-- 1 root root 0 Sep 13 03:24 file2 -rw-r--r-- 1 root root 0 Sep 13 03:24 file3 drwx------ 2 root root 16384 Sep 13 03:17 lost+found
说明:
如果由于某种原因我们无法执行此重新激活,则此快照合并将在节点下次重新启动期间发生
如果原点处于未安装状态
# lvconvert --merge /dev/system/snap_data Merging of volume system/snap_data started. data: Merged: 33.20% data: Merged: 54.44% data: Merged: 75.88% data: Merged: 98.10% data: Merged: 100.00%
在另一个终端上,如果我们检查我们可以看到数据分区具有“O”属性,这意味着快照正在与源合并
# lvs LV VG Attr LSize Pool Oroirn Data% Meta% Move Log Cpy%Sync Convert data system Owi-a-s--- 2.00g 49.74 mgtserv system -wi-ao---- 2.00g opt system -wi-ao---- 2.00g root system -wi-ao---- 2.00g swap system -wi-ao---- 4.00g tmp system -wi-ao---- 12.00g var system -wi-ao---- 2.00g
到这里就完成了,我们的“数据”分区恢复到原来的状态
# ls -l /data/ total 524320 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir1 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir2 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir3 -rw-r--r-- 1 root root 0 Sep 13 03:24 file1 -rw-r--r-- 1 root root 0 Sep 13 03:24 file2 -rw-r--r-- 1 root root 0 Sep 13 03:24 file3 drwx------ 2 root root 16384 Sep 13 03:17 lost+found
快照大小如何工作?它与备份有何不同?
LVM 快照的空间效率非常高,空间效率我的意思是当为具有 10GB 空间的逻辑卷创建快照时,快照将占用非常少的空间(几乎没有),但随着源卷的内容增加快照卷大小也会相应增加。
因此,必须创建快照,但不应将其保存很长时间,否则最终会占用大量空间。
在这种情况下,备份是首选选项,而不是快照。
LVM 快照的空间效率如何?
大量变化 = 空间效率不高
少量更改 = 非常节省空间
重要的提示:
在 LVM 中,我们有一个功能,可以扩展快照大小,但这并不意味着创建快照后修改的任何数据也将恢复,因为快照是在稍后的时间点扩展的。
快照将恢复到拍摄点的状态,拍摄快照后修改的任何数据都将被覆盖。
让我们从一些例子开始
我有以下逻辑卷的设置
# lvs LV VG Attr LSize Pool Oroirn Data% Meta% Move Log Cpy%Sync Convert data system -wi-a----- 2.00g opt system -wi-ao---- 2.00g root system -wi-ao---- 2.00g swap system -wi-ao---- 4.00g tmp system -wi-ao---- 12.00g var system -wi-ao---- 2.00g
为了本文,我们将创建“数据”分区的快照。
但在此之前让我们检查我们数据分区的现有内容
我们的逻辑卷挂载在 /data 目录
# df -Th /data/ Filesystem Type Size Used Avail Use% Mounted on /dev/mapper/system-data ext4 2.0G 6.1M 1.8G 1% /data
以下内容
# ls -l /data/ total 28 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir1 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir2 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir3 -rw-r--r-- 1 root root 0 Sep 13 2015 file1 -rw-r--r-- 1 root root 0 Sep 13 2015 file2 -rw-r--r-- 1 root root 0 Sep 13 2015 file3 drwx------ 2 root root 16384 Sep 13 03:17 lost+found
因此,在执行 lvm 快照合并后,预期也是如此。
我们如何避免 LVM 快照损坏
如果原始卷分区大小达到阈值,我们可以选择自动扩展逻辑卷,或者在快照大小变为 100% 占用之前手动扩展快照大小。
说明:
首选自动方法,因为一旦快照卷达到 100% 的空间,快照将被损坏,如上所示。
手动扩展快照卷
用于手动扩展快照卷
扩展快照卷之前
# lvdisplay /dev/system/snap_data --- Logical volume -- LV Path /dev/system/snap_data LV Name snap_data VG Name system LV UUID ETHmgE-sgz0-4o7Q-3GDQ-pUy4-CJPo-D3nlIe LV Write Access read/write LV Creation host, time nds18-rdssrv, 2015-09-13 05:21:37 -0400 LV snapshot status active destination for data LV Status available # open 0 LV Size 2.00 GiB Current LE 64 COW-table size 1.00 GiB COW-table LE 32 Allocated to snapshot 0.00% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:12
接下来我们将扩展我们的快照逻辑卷
# lvextend -L +1G /dev/system/snap_data Size of logical volume system/snap_data changed from 1.00 GiB (32 extents) to 2.00 GiB (64 extents). Logical volume system/snap_data successfully resized.
扩展快照卷后
# lvdisplay /dev/system/snap_data --- Logical volume -- LV Path /dev/system/snap_data LV Name snap_data VG Name system LV UUID ETHmgE-sgz0-4o7Q-3GDQ-pUy4-CJPo-D3nlIe LV Write Access read/write LV Creation host, time nds18-rdssrv, 2015-09-13 05:21:37 -0400 LV snapshot status active destination for data LV Status available # open 0 LV Size 2.00 GiB Current LE 64 COW-table size 2.00 GiB COW-table LE 64 Allocated to snapshot 0.00% Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:12
如我们所见,LVM COW 表大小(写时复制)大小已从 1 Gb 增加到 2 GB
自动扩展快照卷
用于自动扩展快照卷
打开以下文件并将 snapshot_autoextend_threshold 值从 100 更改为低于 100 的其他值,将 snapshot_autoextend_percent 更改为我们想要扩展快照卷的值,日志文件中提供了有关此属性的更多详细信息
# vim /etc/lvm/lvm.conf # Configuration option activation/snapshot_autoextend_threshold. # Auto-extend a snapshot when its usage exceeds this percent. # Setting this to 100 disables automatic extension. # The minimum value is 50 (a smaller value is treated as 50.) # Also see snapshot_autoextend_percent. # Automatic extension requires dmeventd to be monitoring the LV. # # Example # Using 70% autoextend threshold and 20% autoextend size, when a 1G # snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds # 840M, it is extended to 1.44G: # snapshot_autoextend_threshold = 70 # snapshot_autoextend_threshold = 70 # Configuration option activation/snapshot_autoextend_percent. # Auto-extending a snapshot adds this percent extra space. # The amount of additional space added to a snapshot is this # percent of its current size. # # Example # Using 70% autoextend threshold and 20% autoextend size, when a 1G # snapshot exceeds 700M, it is extended to 1.2G, and when it exceeds # 840M, it is extended to 1.44G: # snapshot_autoextend_percent = 20 # snapshot_autoextend_percent = 50
对于本文,我将使用上述值
接下来我们需要从头开始,这意味着创建一个新的快照卷
# lvcreate -L 1G -s -n snap_data /dev/system/data
现在让我们再次尝试用超过 1G 的数据填充 /data 分区
第一次尝试我将创建 512MB 的虚拟文件
# dd if=/dev/zero of=/data/dummy_file2 bs=512M count=1 oflag=dsync 1+0 records in 1+0 records out 536870912 bytes (537 MB) copied, 16.3479 s, 32.8 MB/s
让我们检查一下快照卷的大小,因为快照卷是 1G,它很容易在不扩展其卷大小的情况下承受这种变化
# lvs LV VG Attr LSize Pool Oroirn Data% Meta% Move Log Cpy%Sync Convert data system owi-aos--- 2.00g mgtserv system -wi-ao---- 2.00g opt system -wi-ao---- 2.00g root system -wi-ao---- 2.00g snap_data system swi-a-s--- 1.00g data 50.21
接下来让我们再创建一个包含另外 512M 数据的虚拟文件
# dd if=/dev/zero of=/data/dummy_file bs=512M count=1 oflag=dsync 1+0 records in 1+0 records out 536870912 bytes (537 MB) copied, 28.1028 s, 19.1 MB/s
现在让我们检查 snap_data 的 lvs 状态,因为我们看到卷大小增加到 1.5GB,因为我们已经要求 lvm 在达到阈值时扩展到 50%
# lvs LV VG Attr LSize Pool Oroirn Data% Meta% Move Log Cpy%Sync Convert data system owi-aos--- 2.00g mgtserv system -wi-ao---- 2.00g opt system -wi-ao---- 2.00g root system -wi-ao---- 2.00g snap_data system swi-a-s--- 1.50g data 66.94 swap system -wi-ao---- 4.00g tmp system -wi-ao---- 12.00g var system -wi-ao---- 2.00g
所以这很完美。
但请确保原始数据大小不会增加超过 1.5GB 的 rlse 快照将再次损坏
创建快照
使用以下命令创建快照
# lvcreate -L 1G -s -n snap_data /dev/system/data Using default stripesize 64.00 KiB. Logical volume "snap_data" created.
这里,
-L means assign LogicalVolume Size -s or (--snapshot) means create a snapshot volume -n or (--name) means the name of the snapshot logical volume
最后 (/dev/system/data) 是必须创建其快照的逻辑卷的路径
这里我们正在为 /dev/system/data 逻辑卷创建一个 1G 大小的快照卷(snap_data)
这些快照是读写的,因此我们可以挂载此快照卷并检查数据/内容。
# mount /dev/system/snap_data /mnt/
检查快照的内容
# ls -l /mnt/ total 28 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir1 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir2 drwxr-xr-x 2 root root 4096 Sep 13 03:24 dir3 -rw-r--r-- 1 root root 0 Sep 13 2015 file1 -rw-r--r-- 1 root root 0 Sep 13 2015 file2 -rw-r--r-- 1 root root 0 Sep 13 2015 file3 drwx------ 2 root root 16384 Sep 13 03:17 lost+found
我们可以获取快照和父逻辑卷的详细信息
# lvs /dev/system/snap_data LV VG Attr LSize Pool Oroirn Data% Meta% Move Log Cpy%Sync Convert snap_data system swi-aos--- 1.00g data 0.00
如我们所见,新的逻辑快照卷在上述信息中可见
重要的提示:
如果我们觉得原始卷将被长时间排除在外并且大量数据将写入源分区,因为快照有可能损坏,请确保快照卷大小始终等于原始卷如果原始卷大小变得大于快照卷大小。
什么是 LVM 大小增长超过快照大小
这里我的快照卷大小是 1G,而实际卷大小是 2G,其中只使用了几 MB
# df -h /data/ Filesystem Size Used Avail Use% Mounted on /dev/mapper/system-data 2.0G 6.1M 1.8G 1% /data
让我在 /data 分区中放一些 1G 大小的虚拟内容
# dd if=/dev/zero of=/data/dummy_file2 bs=1G count=1 oflag=dsync 1+0 records in 1+0 records out 1073741824 bytes (1.1 GB) copied, 98.5545 s, 10.9 MB/s
检查快照状态
# lvs LV VG Attr LSize Pool Oroirn Data% Meta% Move Log Cpy%Sync Convert data system owi-aos--- 2.00g mgtserv system -wi-ao---- 2.00g opt system -wi-ao---- 2.00g root system -wi-ao---- 2.00g snap_data system swi-I-s--- 1.00g data 100.00 swap system -wi-ao---- 4.00g tmp system -wi-ao---- 12.00g var system -wi-ao---- 2.00g
如我们所见,它显示 100% 的快照大小已被占用,这意味着现在此快照已损坏且无法使用
使用以下命令进一步检查
# lvdisplay /dev/system/snap_data --- Logical volume -- LV Path /dev/system/snap_data LV Name snap_data VG Name system LV UUID NwJSQu-NjIr-7Qn0-Wo0q-ig7d-3apy-eChdWD LV Write Access read/write LV Creation host, time nds18-rdssrv, 2015-09-13 04:23:35 -0400 LV snapshot status INACTIVE destination for data LV Status available # open 0 LV Size 2.00 GiB Current LE 64 COW-table size 1.00 GiB COW-table LE 32 Snapshot chunk size 4.00 KiB Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:12
检查 dmsetup 状态
# dmsetup status system-var: 0 4194304 linear system-snap_data: 0 4194304 snapshot Invalid
系统日志中快照字符串的 Grep
# grep Snapshot /var/log/messages Sep 13 03:32:19 nds18-rdssrv lvm[12168]: WARNING: Snapshot system-snap_data is now 80.02% full. Sep 13 03:54:07 nds18-rdssrv lvm[1595]: WARNING: Snapshot system-snap_data is now 83.52% full. Sep 13 04:29:52 nds18-rdssrv lvm[1606]: WARNING: Snapshot system-snap_data changed state to: Invalid and should be removed.
如我们所见,一旦快照大小变满,它将变得无法使用,因此必须将其删除
# lvremove -f /dev/system/snap_data Logical volume "snap_data" successfully removed
LVM 快照不应与备份混淆。