恢复或者合并或者提交快照

接下来,一旦我们完成,就可以恢复快照了。

重要的提示:

在合并快照之前,请确保原始源处于卸载状态,否则合并将因逻辑卷的挂起激活而推迟。

如果原始源处于挂载状态,以下是这两种情况的示例

要合并快照,请使用以下命令

# 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 快照(创建、合并、删除、扩展)

LVM 快照不应与备份混淆。

日期:2020-06-02 22:18:42 来源:oir作者:oir