Avamar — 如果 Linux 虚拟机备份是从模板部署的,则可能存在 LVM 元数据不一致
症状
在还原过程中,会看到以下症状:
1.FLR 操作失败,并提及 LVM 问题:
或
2. VM
2. 映像还原的作业在 Avamar UI 中成功,但在 VMware 中,虚拟机可能由于 LVM 问题而出现启动问题。
启动问题示例 1:
在下面的 redhat 示例中,操作系统启动进入紧急 dracut shell
(在此示例中)从 dracut shell 中,以下 lvm 命令修复 LVM 状态,其输出显示问题在于其中一个 lvm 磁盘 (sdb) 已从 LVM 中错误地删除。
dracut:/# lvm pvscan --config 'global{locking_type=1}'
现在,恢复的虚拟机将能够启动。
启动问题示例 2:
在下面的 Debian 示例中,操作系统启动进入 busybox shell
(在此示例中)从 busybox shell 中,以下 lvm 命令从以前的配置还原 LVM 卷组状态
(initramfs) lvm vgcfgrestore vm1-vg --config 'global{locking_type=1}'
提醒: 在本示例中,vm1-vg 是卷组名称
现在,恢复的虚拟机将能够启动。
其他症状:
3. 在 VMware 中,生产虚拟机成功重新启动。 此问题仅影响使用 LVM 并从同一模板部署的 Linux 虚拟机的备份拷贝。
4.不使用 LVM 配置的 Windows 和 Linux 虚拟机不会显示备份拷贝的 FLR 或启动问题。
原因
- 如果从同一模板克隆或部署具有 LVM 配置的 Linux 虚拟机,则生成的新虚拟机将具有相同的 LVM 唯一标识符 (UUID)
- 在 Linux 中,当进行任何 LVM 磁盘更改时(例如将虚拟磁盘添加到 LVM),LVM 元数据信息将更新。 LVM 使用名为修订序列号 (vg_seqno) 的字段跟踪更新。每当进行更改时,此数字就会递增。
热添加备份问题:
在 Avamar 备份期间,如果满足以下条件:
1.使用热添加(默认传输方法)同时备份源和克隆虚拟机
并且
2.使用相同的 Avamar 代理热添加两个虚拟机
并且
3.热添加的虚拟机之间的 LVM 版本不同。
那么:
Avamar 代理 Linux 内核可能会错误地认为这两个虚拟机磁盘属于同一 LVM 卷组,并使用不正确的信息自动更新热添加磁盘上的 LVM 元数据。 如果在扫描磁盘以进行备份之前进行此 LVM 更新,则备份拷贝中的 LVM 元数据将不一致。
提醒:在备份操作结束时,当从代理中热删除虚拟磁盘后,任何 lvm 更新都将被丢弃,并且不会影响生产虚拟机。
还原问题:在映像/FLR 恢复期间,虚拟机可能会显示缺少 LVM 物理盘区或事务 ID 不匹配,这是热添加备份期间发生的错误 LVM 元数据更新导致的。
可能需要恢复 LVM 工具(例如 vgcfgrestore、vgextend –restoremissing、vgchange -ay –activationmodepartial),以便允许完整启动或修复备份拷贝以更正 LVM 状态。
解决方案
Avamar 19.4 333146
Avamar 19.3 333148
Avamar 19.2 333149
较旧的 Avamar 版本: 请参阅下面的注释
这些热修复在 Avamar 代理上重新配置 LVM 设置,以阻止在热添加操作期间更新 LVM 元数据。
热修复之前
194proxy:~ # lvm config | grep filter filter="a/.*/"
热修复之后
194proxy:~ # lvm config | grep filter filter=["r|/dev/s.*|","r|/dev/disk.*|","a/.*/"]
对于受此问题影响的任何客户端,我们需要强制执行 CBT L0 备份,以确保在新备份中捕获正确的 LVM 元数据。
为了帮助检测客户端,Avamar 工程部门创建了一个新脚本来扫描 Linux 备份并检查 LVM 不一致,如果发现不一致,则会自动重置 cbt 以执行下一个作业。
vmlvmcheck.pl
1.此脚本必须安装在 Avamar Server 上
2.脚本必须以 root 用户身份运行
3.此脚本将扫描所有 Linux 虚拟机客户端的最新备份并检查 LVM 一致性。
4.如果扫描许多虚拟机,此脚本可能需要较长的持续时间(数小时)。 默认情况下,如果扫描的虚拟机数超过 50,则脚本将在后台/守护程序模式中运行
脚本逻辑:
在 vmdk 备份中查找 LVM 逻辑卷,并检查以下条件
I. 所有物理卷都存在于备份中
II. 所有物理卷都与一个 LVM 卷组关联
III. 同一卷组的所有物理卷具有相同的序列号。
误报:
I. 如果发现的卷组的某些虚拟磁盘不在备份中,此工具将标记备份。 根本原因与上述热添加问题无关。 在这种情况下,请确保 Avamar 正在备份所有虚拟磁盘。
II. 如果任何虚拟磁盘包含未完全初始化的 LVM 分区,则工具会将备份标识为损坏,但在这种情况下,如果 Linux 虚拟机未使用这些磁盘,则操作系统不会有启动问题。
从 FTP 站点下载:
root@ave194:~/#: mkdir vmlvmcheck root@ave194:~/#: cd vmlvmcheck/ root@ave194:~/vmlvmcheck/#: curl --disable-eprt -P - -O ftp://avamar_ftp:anonymous@ftp.avamar.com/software/scripts/vmlvmcheck.pl % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 42639 100 42639 0 0 150k 0 --:--:-- --:--:-- --:--:-- 151k
示例 1(只读功能)扫描所有 linux 虚拟机备份的最新备份。
root@ave194:~/vmlvmcheck/#: perl vmlvmcheck.pl 11:37:13 2021-10-06 : vmlvmcheck.pl version 19.04 @ave194 11:37:14 14 VMs populated. Processing backups for these... “===== 3 Vm(s) with potential LVM inconsistency in backup === vm1,vm2,vm3 11:40:08 COMPLETED. Statistics on ave194 (vmvlmcheck ver 19.04) --- (after 2 minutes, 55 seconds) 11 Activities examined 11 Backups to DD 30 Files Examined 12.500 Run Sec per VM 2.917 Run Time Minutes 14 VMs Enabled 14 VMs Total 3 VMs With Inconsistent backups 21.43 % VMs With Inconsistent backups %
或者,当扫描的虚拟机总数超过 50 时,脚本将在后台自动运行,屏幕输出将如下所示:
root@ave194:/home/admin/#: perl vmlvmcheck.pl 10:55:34 2021-11-17 : vmlvmcheck.pl version 19.15 @ave194 10:55:35 55 VMs populated. Processing backups for these... Output is now going to /usr/local/avamar/var/log/vmvlmcheck.log . PID# 3563 is now running vmlvmcheck as a background process. To terminate daemon process, enter: kill 3563 Please run: tail -f /usr/local/avamar/var/log/vmvlmcheck.log
示例 2(只读功能)使用 --vm 标记扫描单个客户端的最新备份
root@ave194:/home/admin/#: perl vmlvmcheck.pl --vm cloud2116-clone1 18:13:57 2021-10-05 : vmlvmcheck.pl version 19.04 @ave194 18:13:57 1 VMs populated. Processing backups for these... INFO:============ cloud2116-clone1 /vc6-avamar.gslabs.lab.emc.com/ContainerClients: 1 Backups WARNING: pvs Did not see a LVM on /dev/loop1 ERROR: Expected LVM member appears damaged:VMFiles/2/virtdisk-flat.vmdk. INFO: No partitions found in VMFiles/2/virtdisk-flat.vmdk. VM cskpcloud2116-clone1 has 1 LVMs inside 2 vmdks. ERROR: Bad backup: labelnum=2 2 Snapshots to be deleted ...Option DELETE_SNAPSHOTS=0. 18:14:09 COMPLETED. Statistics on ave194 (vmvlmcheck ver 19.04) --- 1 Activities examined 1 Backups to DD 2 Files Examined 12.000 Run Sec per VM 0.200 Run Time Minutes 1 VMs Enabled 1 VMs Total
示例 3(可写功能)与示例 1 和 2 相同,但这次添加了 --DELETE_SNAPSHOTS 选项
root@ave194:~/vmlvmcheck/#: perl vmlvmcheck.pl --vm cloud2116-clone1 --DELETE_SNAPSHOTS 14:13:35 2021-10-06 : vmlvmcheck.pl version 19.04 @ave194 14:13:36 1 VMs populated. Processing backups for these... INFO:============ cloud2116-clone1 /vc6-avamar.gslabs.lab.emc.com/ContainerClients: 1 Backups WARNING: pvs Did not see a LVM on /dev/loop1 ERROR: Expected LVM member appears damaged:VMFiles/2/virtdisk-flat.vmdk. INFO: No partitions found in VMFiles/2/virtdisk-flat.vmdk. VM cskpcloud2116-clone1 has 1 LVMs inside 2 vmdks. ERROR: Bad backup: labelnum=2 2 Snapshots to be deleted ...Option DELETE_SNAPSHOTS=1. 14:13:49 COMPLETED. Statistics on ave194 (vmvlmcheck ver 19.04) --- 1 Activities examined 1 Backups to DD 2 Files Examined 14.000 Run Sec per VM 0.233 Run Time Minutes 1 VMs Enabled 1 VMs Total
关于“DELETE_SNAPSHOTS”选项的说明:
1. 此选项将仅更新 Avamar 数据库的快照表。 此更新将导致下一次备份自动切换到 CBT 级别 0。
2. 标识的备份将不会被删除,此操作将不会阻止还原功能正常工作。
其他信息
1.以代理 root 身份备份 lvm.conf 文件。
194proxyga:~ # cp /etc/lvm/lvm.conf /etc/lvm/lvm.conf-`date +%s
2. 编辑 /etc/lvm/lvm.conf,查找现有的“filter”行,然后更改如下
之前
filter = [ "a/.*/" ]
之后
filter = ["r|/dev/s.*|","r|/dev/disk.*|","a/.*/"]
3. 通过运行此命令验证新筛选器设置是否已设置完成
194proxy:~ # lvm config | grep filter filter=["r|/dev/s.*|","r|/dev/disk.*|","a/.*/"]