作为备份策略,定期对 xen domU 进行 LVM 快照是否可行?优点、缺点、有什么问题吗?
在我看来,这似乎是快速、无脑恢复的完美解决方案。任何调查都可以在损坏的逻辑卷上进行,domU 可以顺利运行而不会中断。
编辑:
这是我现在进行完整系统备份时的状态。
- domU盘的lvm快照
- 一个大小等于快照大小的新逻辑卷。
- dd if=/dev/snapshot of=/dev/new_lv
- 使用 lvremove 处理快照
- 使用 kpartx/mount/ls 进行可选验证
现在我需要使它自动化。
答案1
LVM 快照旨在捕获处于冻结状态的文件系统。 它们本身并不是备份。但它们对于获取一致的备份映像很有用,因为冻结映像在备份过程中不能也不会改变。 因此,虽然您不会直接使用它们进行长期备份,但它们在您决定使用的任何备份过程中都具有巨大的价值。
实现快照有几个步骤。首先,必须分配一个新的逻辑卷。此卷的目的是提供一个区域,用于记录文件系统的增量(更改)。这允许原始卷继续运行而不会中断任何现有的读/写访问。缺点是快照区域的大小是有限的,这意味着在写入繁忙的系统上,它会很快填满。对于具有大量写入活动的卷,您需要增加快照的大小以留出足够的空间来记录所有更改。如果快照溢出(填满),快照将停止并被标记为不可用。如果发生这种情况,您需要释放快照,以便使原始卷重新联机。释放完成后,您将能够将卷重新安装为读/写,并使其上的文件系统可用。
发生的第二件事是 LVM 现在“交换”了相关卷的真正用途。您可能会认为新分配的快照将是查找文件系统的任何更改的地方,毕竟,它是所有写入操作的目的地,对吗?不,事实恰恰相反。文件系统被挂载到 LVM 卷名称,因此换出姓名从系统其余部分下面进行操作是不行的(因为快照使用不同的名称)。因此,这里的解决方案很简单:当您访问原始卷名称时,它将继续引用居住(读/写)版本的快照。您创建的快照卷将引用冻结您要备份的卷的 (只读) 版本。一开始可能有点混乱,但还是很有意义的。
这一切都发生在不到 2 秒的时间内。系统的其余部分甚至不会注意到。当然,除非你没有在快照溢出之前释放它……
有时候,您会想要释放快照以回收其占用的空间。释放完成后,快照卷将释放回卷中,而原始卷仍保留。
我不建议将此作为长期备份策略。您仍将数据托管在可能发生故障的同一物理驱动器上,并且从发生故障的驱动器恢复文件系统根本不是备份。
简而言之:
- 快照有助于辅助备份
- 快照本身并不是备份的一种形式
- 快照不会永远存在
- 完整快照不是一件好事
- 快照需要在某个时间点发布
- 如果您明智地使用 LVM,它就是您的朋友。
答案2
LVM 快照非常适合在不使服务器脱机的情况下备份服务器。如前所述,LVM 快照几乎是即时副本。您可以使用命令创建它们,lvcreate
就像创建 LV 本身一样,只是您为其提供了选项--snapshot
和原始 LV 而不是 VG。例如:
lvcreate -L <LV size> -s -n <snapshot name> /dev/<VG name>/<LV name>
这将创建具有指定快照名称的给定 LV 的快照,然后您可以挂载并使用此快照 LV 执行备份,而不必担心文件正在被使用。如果您尝试备份活动的数据库服务器,这将特别有用。
从快照备份完成后,您可能希望将其删除,以减少任何额外的 I/O 开销或其他性能问题,正如其他人提到的那样:
lvremove /dev/<VG name>/<snapshot name>
虽然 LVM 快照对于生成数据库等系统的可靠备份非常有价值,您通常需要关闭以进行备份以避免文件争用,但它们并不适合作为快速恢复的长期操作。
答案3
在我看来,这不是一个好主意。
快照以写时复制的方式实现,因此您将每次写入变成一次读取和两次写入(您要更新的块首先从主卷读取并存储在快照卷中,然后再将新数据放置在其位置),因此如果虚拟机上经常进行大量写入,您会看到性能有所下降。
此外,如果我没记错的话,如果快照卷满了,它就会被毫不留情地删除。这对于备份来说并不好!因此,如果您确实尝试将此作为备份方法,请确保快照卷足够大,以处理快照使用寿命期间发生的所有更改。当然,如果您意识到并监控大小问题,并且性能问题对您来说不是问题,那么您的建议可能会对您现有的其他备份流程有所帮助。
LVM 快照在备份过程中非常有用(拍摄快照、备份快照到其他地方以确保备份的一致性,而不必禁用对“真实”卷的更新,然后删除快照),等等,但它们本身并不旨在作为备份工具。
答案4
在这些看似精巧的东西背后,LVM 实际上“只是”一个设备映射器技巧。使用 lvcreate 创建快照只不过是一些 dmsetup 东西的包装器。包装器从一个旧卷(原始 lv)和一个新卷(写时复制卷)创建一个新设备(快照卷)。与此同时,原始 LV 被重命名为 -real(见下文,即 dmsetup ls --tree 输出)。这个 -real LV 映射到快照卷和原始卷,因此可以在两个地方使用它。写时复制卷充当 -real LV 的覆盖。-snap LV 向您显示写时复制卷和 -real 卷的组合。这确实会产生一些性能开销。
Volume00-snap (253:11)
|-Volume00-snap-cow (253:13)
| `- (104:2)
`-Volume00-LogVol01-real (253:12)
`- (104:2)
Volume00-LogVol01 (253:5)
`-Volume00-LogVol01-real (253:12)
`- (104:2)
删除快照时,会再次发生一些重命名和映射。之后,情况将再次类似于
Volume00-LogVol01 (253:5)
`- (104:2)
至于在多大程度上这是一个很好的备份方法:它是可以的,如果您考虑到这将(1)对虚拟机 RAM 没有帮助,(2)造成性能损失,并且(3)您将需要将快照的图像存储在其他地方。
顺便说一句,VMware VCB 也可以与快照一起使用,尽管不是 LVM 快照。