LVM快照作为备份策略


17

xen domU的定期LVM快照作为备份策略的可行性如何?优点,缺点,任何陷阱?

对我来说,这似乎是快速,轻松地恢复的完美解决方案。在domU成功运行而不会中断的情况下,可以对损坏的逻辑卷进行任何调查。

编辑:

在进行完整的系统备份时,这就是我现在的位置。

  • domU磁盘的lvm快照
  • 一个新的逻辑卷,其大小等于快照的大小。
  • dd if = / dev / snapshot = / dev / new_lv
  • 用lvremove处理快照
  • 使用kpartx / mount / ls进行可选验证

现在我需要使它自动化。

Answers:


32

LVM快照旨在以冻结状态捕获文件系统。 它们本身并不能作为备份。但是,它们对于获取一致的备份映像很有用,因为冻结的映像在备份过程中不能也不会更改。 因此,尽管您不会直接使用它们进行长期备份,但它们在您决定使用的任何备份过程中都将具有巨大的价值。

有几个步骤可以实现快照。首先是必须分配新的逻辑卷。该卷的目的是提供一个记录文件系统增量(更改)的区域。这允许原始卷继续运行而不会中断任何现有的读/写访问。缺点是快照区域的大小是有限的,这意味着在忙于写入的系统上,快照区域可以很快填满。对于具有大量写活动的卷,您将需要增加快照的大小,以便为记录所有更改留出足够的空间。如果快照溢出(填满),则两个快照都将停止并标记为不可用。如果发生这种情况,您将需要释放快照,以便使原始卷恢复在线。发布完成后,您将

发生的第二件事是LVM现在“交换”了有关卷的真正目的。您会认为,新分配的快照将是查找文件系统任何更改的地方,毕竟,这是所有写操作要去的地方,对吗?不,这是另一回事。文件系统已安装到LVM卷,因此从系统其余部分的下面换出该名称将是不可以的(因为快照使用了不同的名称)。因此,这里的解决方案很简单:访问原始卷名时,它将继续引用您为其做快照的卷的实时(读/写)版本。您创建的快照卷将引用冻结的您打算备份的卷的(只读)版本。刚开始时有些混乱,但这很有道理。

所有这些都在不到2秒的时间内完成。系统的其余部分甚至都没有注意到。当然,除非您在快照溢出之前不释放快照...

在某些时候,您将需要释放快照以回收其占用的空间。发布完成后,快照卷将释放回该卷中,并且原始卷仍然保留。

我不建议将此作为长期备份策略。您仍将数据托管在可能发生故障的同一物理驱动器上,并且从发生故障的驱动器恢复文件系统根本就没有备份。

因此,简而言之:

  • 快照有助于辅助备份
  • 快照本身并不是备份的一种形式
  • 快照不会永远持续下去
  • 完整的快照不是一件好事
  • 快照需要在某个时候发布
  • 如果您明智地使用LVM,它将是您的朋友。

4
此外,LVM快照性能会线性下降-8个快照是IO的8倍。
史蒂文

9
您的描述中有几点我认为是不正确的。在当前版本的LVM中,如果快照已满,则仅将其标记为不可用,需要将其删除。设备上的I / O不会停止。其次,删除快照时,不会将任何数据复制回原始卷。本质上,当您写入实时卷时,首先将原始块复制到快照中,然后再更新实时块。然后,当您删除快照时,只需从设备映射器中删除条目即可。无需复制。
卡米尔·基西尔

2
为了完整性,Kamil Kisiel是正确的。参见:tldp.org/HOWTO/LVM-HOWTO/snapshotintro.html
ktower 2010年

1
在因误导我而抱怨很多之后,答案已根据多种文献和讨论来源进行了修改。抱歉,我不好。
艾利·佩恩

10

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快照对于生成可靠的数据库(如数据库)备份非常有用,而且您通常希望关闭备份以免文件争用,但它们不适合作为快速恢复的长期操作。


9

IMO,这不是一个好主意。

快照以写时复制的方式实现,因此您可以将每次写入转换为一次读取和两次写入(要更新到的块首先从主卷中读取,并在将新数据放入其中之前存储在快照卷中)。它的位置),因此如果在VM上进行大量写入操作,您将看到性能下降。

此外,IIRC,如果快照卷已满,则可以毫不客气地将其删除。这不利于备份!因此,如果您尝试将其作为备份方法,请确保使快照卷足够大,以处理快照有效期内将发生的所有更改。当然,如果您知道并监视大小问题,而性能问题对您来说不是问题,那么您提出的建议可能会对您现有的其他备份过程有所帮助。

LVM快照在备份过程中非常有用(拍摄快照,将快照备份到其他位置以确保备份一致,而不必禁用对“实际”卷的更新,然后删除快照),避免其他事情,但不能单独用作备份工具。


也许我不了解快照的工作原理。该手册说,快照几乎是逻辑卷的即时副本,避免了使使用它的系统脱机的麻烦。从您的描述来看,快照似乎更多是分支,副本而不是冻结副本。快照完成后,是否会使用原始系统中进行的所有更改来更新快照?如果是这样,我需要立即从中删除数据并销毁快照,因为它不打算用作备份的存储机制?谢谢!
Karolis T.

2
它是从其创建卷的冻结副本,但仅包含自拍摄快照以来已更改的块(因此,快照卷可能远远小于其快照的卷)。如果在实时卷中更新了块,则原始块的内容将添加到快照的存储中,因此当您查看快照时,LVM可以为原始块提供服务,而不是更新后的块。
David Spillett

但是,如果更改了(快照),那么“冻结”是从哪里来的呢?假设我有这种情况,一个工作系统会随着时间的流逝而损坏。当它正常工作时,我有它的快照。快照是系统仍在正常运行时的一种表示形式,还是具有最初使原始系统损坏的更改?希望我足够清楚,只是想确保我真的理解。
Karolis T.

要了解冻结的来源,请意识到您现在有两个单独的卷-包含活动文件系统的原始卷和更改文件系统的冻结版本的快照。请参阅我的答案以获取更多详细信息。
艾利·佩恩

1
你们使它听起来比实际复杂。快照存储创建快照时源文件系统的状态。当源fs更改时,快照也不会更改,这使您可以将备份程序指向快照(而不是源fs)进行读取。是的,写后复制发生在屏幕后面,但是用户除了额外的IO使用外没有注意到这一点。
Martijn Heemels,2010年

6

在制作快照之前,您需要确保磁盘上的数据处于一致状态。例如mysql可能通过转储数据库或将其关闭而将数据缓存在需要强制插入磁盘的内存中。有关详细信息,请参见您的应用程序手册。


5

在外观漂亮的东西下面,LVM实际上只是“设备映射器”的把戏。使用lvcreate创建快照仅是一些dmsetup东西的包装。包装器从一个旧卷(原始lv)和一个新卷(写时复制卷)创建一个新设备(快照卷)。同时,原始LV被重命名为-real(请参见下文,即dmsetup ls --tree输出)。该实际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快照。


4

即使快照不会对性能造成任何影响,您也必须了解:快照只不过是备份到同一磁盘上另一个文件夹的副本而已,而不仅仅是备份。

如果磁盘制动,则数据和备份都将丢失。即使将快照区域分配给VG中的另一个PE,它也仅包含自快照以来修改的数据。

备份意味着至少要复制到完全独立的驱动器。


是的,我知道。RAID 1可以防止存储设备故障,并备份到远程位置-防止软件损坏。当您不知道f发生了什么并且现在需要在线系统时,我正在考虑将LVM快照用作真正快速还原的工具。还有其他选择,更快然后从LVM备份还原domU吗?
Karolis T.

3

我将这样的设置用于vmware服务器计算机和mysql数据库的快照。到目前为止工作正常。进行了两次还原-都没有问题。要考虑的一件事-在使用快照lvm运行时,I / O操作的性能显着下降。看这里。忽略他们谈论mysql的事实,I / O Ops是I / O Ops ...不管哪种数据位于lvm上。


1
啊哈 是的-我认为快照将被拍摄并导出到远程存储服务器。没有留在本地主机上。
pQd

2

我仅使用lvm快照在单独的Vg中复制DomU Lv的另一个快照,每个Domain中都有三个要备份的“节点”。

此后,快照将被销毁,备用Lv将保留到下一轮。如果要进行还原,则只需从备份Vg中选择一个源Lv,然后将其复制到域Lv。

有时,备份Lv被转储到单独服务器上的映像文件中。

所有这些都是通过脚本自动进行的,每两天进行一次备份,每周进行一次转储。

我什至想到了“紧急”模式,在该模式下,将还原Domain Lv,但从快照运行,然后每2小时重置一次,以防止严重的黑客攻击使站点保持联机状态,直到可以组织适当的防御措施为止。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.