如何在Linux上备份LVM配置(VGCFGBackup&VGCFGRestore)

时间:2020-03-05 15:27:07  来源:igfitidea点击:

由于几种原因,在意外用户干预后,卷组可能会损坏。
除非在卷组上已在卷组上,否则LVM不会意识到这种情况,并可能允许将备用路径添加到不同的卷组。
作为LVM的一部分提供的两个有用命令是VGCFGBackup和VGCFGRestore。
这些命令允许我们备份卷组的元数据。
这可能看起来不太多,但是有一些场景,其中备份卷组元数据可以节省一些时间,也可能是Sanity。

缺省情况下,元数据备份存储在"/etc/lvm/backup"文件中,元数据归档存储在"/etc/lvm/archive"文件中。
在每个文件的顶部,它将告诉我们当文件生成时的时间/数据,因此我们可以使用旧元数据的副本,因为它在不可逆操作之前。

在许多情况下,LVM配置已损坏。

LVM也可以在某些磁盘故障中损坏,并且在reboot操作系统上无法启动。

因此,具有LVM配置备份非常重要。

请参阅下面的LVM配置:

# pvs
 PV VG Fmt Attr PSize PFree 
 /dev/sda2 centos lvm2 a-- 19.51g 40.00m
 /dev/sdb vg-01 lvm2 a-- 15.00g 13.30g
 /dev/sdc vg-01 lvm2 a-- 20.00g 19.30g

我们的卷组信息:

root@centos7-srv admin]# vgs
VG #PV #LV #SN Attr VSize VFree 
centos 1 2 0 wz--n- 19.51g 40.00m
vg-01 2 3 0 wz--n- 34.99g 32.59g

现在,逻辑卷信息:

# lvs
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 root centos -wi-ao---- 17.47g 
 swap centos -wi-ao---- 2.00g 
 lv_linear vg-01 -wi-a----- 1.00g 
 lv_mirror vg-01 rwi-a-r--- 200.00m 100.00 
 lv_stripe vg-01 -wi-a----- 1.00g

1. VGCFGBACKUP.

每当我们执行LVCreate等任何LVM活动时,删除,磁盘添加...应在"/etc/lvm /"目录下的相应卷组conf文件中更新。
如果磁盘失败,我们可以使用此备份配置文件将LVM配置还原到磁盘上。
vgcfgbackup命令从磁盘的LVM标题中获取配置元数据,并保存到默认文件位置/etc/lvm/backup/vg_name
默认情况下,VGCFGBackup每次都会自动运行,LVM命令更改LVM配置。
它从磁盘的系统区域读取LVM标题详细信息并将其复制到文件。
此文件可在新添加的磁盘上还原配置代替可能已损坏或者失败的旧磁盘。

请注意,元数据备份不会备份逻辑卷中包含的用户和系统数据。
建议在每个LVM级别更改后拍摄此备份。
默认情况下,更改LVM详细信息的所有LVM命令都旨在自动拍摄此备份,因此不需要手动运行命令。

# vgcfgbackup [-f path_newfilename ] vg_name
  • vg_name:卷组的路径名
  • -f path_newfilename:使用指定路径的路径中的新文件名保存CON FIENAME。如果省略了-f,则默认文件名称为"/etc/lvm/backup/vg_name"的形式,其中vg_name是vg_name的基本名称。如果未指定新路径,它将保存当前目录中的新文件。

例子:

# vgcfgbackup /dev/vg-01
 Volume group "vg-01" successfully backed up.

我们可以看到我们的备份的邮件取得了成功。
让我们看看备份文件夹

# ls -l /etc/lvm/backup/
total 8
-rw-------. 1 root root 1715 Apr 25 16:50 centos
-rw-------. 1 root root 4089 Jan 4 01:39 vg-01

默认文件名类似于我们的卷组名称。
现在,让我们看看我们使用-f选项时发生了什么

# vgcfgbackup -f vg-01_bak /dev/vg-01
 Volume group "vg-01" successfully backed up.

这是成功的。
让我们在备份目录中查看我们的文件vg-01_bak

# ls /etc/lvm/backup/
centos vg-01

仅存在上一个文件。
我们没有看到我们的文件。
现在让我们检查当前目录

# ls -l
total 56392
-rwxrwxrwx. 1 admin admin 1975 Apr 25 17:01 manifest.txt
-rwxrwxrwx. 1 admin admin 2287 Apr 25 17:01 run_upgrader.sh
-rw-------. 1 root root 4074 Jan 4 02:05 vg-01_bak

我们可以在最后一行中看到我们的文件。
现在让我们重试相同的命令,但我们将指定默认备份文件夹。

# vgcfgbackup -f /etc/lvm/backup/vg-01_bak /dev/vg-01
 Volume group "vg-01" successfully backed up.

现在让我们检查一下。

# ls -l /etc/lvm/backup/
total 12
-rw-------. 1 root root 1715 Apr 25 16:50 centos
-rw-------. 1 root root 4089 Jan 4 01:39 vg-01
-rw-------. 1 root root 4090 Jan 4 02:26 vg-01_bak

2. VGCFGRestore.

VGCFGRestore命令将LVM卷组配置为卷组中的所有物理卷还原。
如果在共享模式下激活卷组,则无法执行恢复。
确保使用具有-f标志的vgcfgbackup命令进行现有工作配置的当前副本,为输出指定不同的文件,以便我们不会更改"/etc/lvm//的任何文件/备份(备份)或者"/etc/lvm/archive"文件夹。
确保使用我们希望恢复的配置将当前配置差异,以验证我们要应用的唯一更改是否要恢复错误操作。

vgcfgrestore [-f|--file <filename>] [-t|--test] [-v] vg_name
  • vg_name:相应的卷组的名称
  • -f filename:loct指定要用于恢复vg_name的元数据备份或者存档文件的LVM元数据备份文件的名称
  • --test:可用于检查可能发生的命令的错误
  • -v:有目前发生的细节

在下面的示例中,我们将模拟缺点逻辑卷,我们将尝试恢复它。

NB:以下示例可能是危险和破坏性的,因此可以非常小心,如果可能的话有完整的备份。
请务必在测试环境中尝试

步骤1:删除逻辑卷

# lvremove /dev/vg-01/lv_linear 
Do you really want to remove active logical volume lv_linear? [y/n]: y
 Logical volume "lv_linear" successfully removed

查看

# lvs
 LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
 root centos -wi-ao---- 17.47g 
 swap centos -wi-ao---- 2.00g 
 lv_mirror vg-01 rwi-a-r--- 200.00m 100.00 
 lv_stripe vg-01 -wi-a----- 1.00g

第2步:现在查找"/etc/lvm/archive/vgname_(xxxxx).vg"的存档文件。
只是查看我们删除了逻辑卷的日期。
在我们的情况下,它是列表的最后一个文件

# ls -l /etc/lvm/archive/
total 28
-rw-------. 1 root root 1716 Apr 25 16:50 centos_00000-34432512.vg
-rw-------. 1 root root 1562 Jan 1 16:02 vg-01_00002-1413920221.vg
-rw-------. 1 root root 2009 Jan 1 16:07 vg-01_00003-718049637.vg
-rw-------. 1 root root 4097 Jan 4 03:51 vg-01_00004-306926489.vg

步骤3:验证文件的内容以检查生成文件时的时间/数据以及指示之前完成操作的描述

# head /etc/lvm/archive/vg-01_00004-306926489.vg 
# Generated by LVM2 version 2.02.130(2)-RHEL7 (2014-10-14): Thu Jan 4 03:51:35 2016
contents = "Text Format Volume Group"
version = 1
description = "Created *before* executing 'lvremove /dev/vg-01/lv_linear'"
creation_host = "centos7-srv" # Linux centos7-srv 3.10.0-514.16.1.el7.x86_64 #1
creation_time = 1493866295 # Thu Jan 4 03:51:35 2016

我们可以看到说明在执行lvremove命令之前创建该文件的描述。

第4步:现在恢复它。
我们可以在使用- --test选项恢复之前测试

# vgcfgrestore vg-01 -v -f /etc/lvm/archive/vg-01_00004-306926489.vg 
 Found same device /dev/sdb with same pvid 3vXbKwkq63cBiydWgQfkd2aaBeYo6b5I
 Found same device /dev/sdc with same pvid E9wih1232IjADxwkSwRC9kVV3VPJbD5O
 Restored volume group vg-01

第5步:现在我们可以检查一下

<# lvscan
 ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
 ACTIVE '/dev/centos/root' [17.47 GiB] inherit
 inactive '/dev/vg-01/lv_linear' [1.00 GiB] inherit
 ACTIVE '/dev/vg-01/lv_stripe' [1.00 GiB] inherit
 ACTIVE '/dev/vg-01/lv_mirror' [200.00 MiB] inherit

我们可以看到我们的逻辑在第三行中不活动。
我们将激活它并再次检查

# lvchange -ay /dev/vg-01/lv_linear
# lvscan | grep lv_linear
 ACTIVE '/dev/vg-01/lv_linear' [1.00 GiB] inherit