提交还是还原Linux LVM快照?


16

我将在CentOS 5服务器上进行实验性升级。如果升级失败,我希望能够撤消对文件系统的更改。这种情况似乎类似于LVM HOWTO的3.8节中有关LVM2读写快照的示例-但是该示例实际上缺少实际操作方法。

  1. 我将如何提交更改,将其重新合并到原始分区中?

  2. 如何还原更改,将文件系统恢复到原始状态?我是否应该假设我需要重新启动几个服务,如果不能完全重新启动?

  3. 是否可以仅对分区上的某些目录进行快照,还是对整个分区进行操作?

Answers:


11

如果您正在运行Linux 2.6.33+并使用LVM 2.0.58+,则LVM2 /设备映射器快照合并功能可用:

lvconvert --merge

看到这个帖子:http : //www.jonnor.com/2010/02/lvm-snapshot-merging-avaliable/

它引用了http://kernelnewbies.org/Linux_2_6_33(请参见第5章,MD / DM)和LVM更改日志(位于2.0.58):ftp : //sources.redhat.com/pub/lvm2/WHATS_NEW

但是我还不能告诉你如何正确使用它;-)


dmsetup targets如果是这种情况,则应显示快照合并,应用于快照lv的合并命令将恢复为拍摄快照的状态。
Nils

OP似乎对通过某种合并步骤提交更改感到困惑。随着快照大小的增加,更改将被提交。(更改的快照)是通过lvconvert --merge备份所需的信息。如果OP对自己的更改满意,则可以通过lvremove删除快照。
文斯

21

我刚刚尝试使用Ubuntu进行基于快照的升级。是的,我需要重启几次。首先将原始root-lv重命名为其他名称,以便为快照赋予原始名称(因为升级会产生很多更改,并且快照上的更改比原始快照上的更改更快):

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G

大小应适当选择。然后重新启动,因此“新的” lvm / ubuntu将作为root挂载,您可以执行升级。现在,您可以测试新版本,甚至可以通过以下方式更改为旧系统

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot

如果要放弃升级,请运行(从旧系统运行)

# lvremove lvm/root-new

如果要提交更改,请运行(从旧系统运行)

# lvconvert --merge lvm/root-new

或者,从新系统

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root

然后重新启动。由于卷已打开,系统将立即拒绝合并。因此,合并将在引导过程中开始,并在您已经可以使用系统的情况下继续进行。

哦,顺便说一句:在系统之间进行更改时,请记住使用适当的内核。由于/ boot不是lvm的一部分,因此新旧内核将并排放置。


感谢您的回答。我刚刚在CentOS 7虚拟机中重播了您的过程,它的工作原理很吸引人。在合并过程中重置我的虚拟机后,LVM子系统在系统仍在访问升级文件的同时将其恢复。
Anderson Medeiros Gomes

该答案的一部分似乎建议通过lvconvert --merge提交更改。随着快照大小的增加,更改也将提交。lvconvert --merge使用快照信息还原(撤消)更改。
文斯

10

好的,我认为通过重新阅读HOWTO 3.8可以解决问题。

  • 只读快照(如LVM1)在创建快照后包含块级差异-原始快照仍会更改,但快照会保留原始快照的表示形式。快照读取将显示当时的数据。
  • 可以将读写快照(LVM2中的默认快照)写入:它们是原始分区的分支。写入快照不改变原来的。

快照的工作方式是对原始数据进行块级更改。因此,当原始文档被写入时,会发生以下情况:

  1. 某些内容尝试写入原始内容。
  2. 读取原始文件,并将原始文件中的块复制到快照。
  3. 原稿变了。
  4. 快照包含“反向差异”-使原始外观看起来像创建快照时所做的更改。

因此,丢弃快照根本不会影响原始文档-因为原始文档已更改,并且快照仅包含这些更改的列表。

回答我自己的问题:

使用LVM创建新的快照。如果可以将更新配置为写入快照安装点,请使用R / W快照。否则,将使用RO或R / W。

然后:

  • 如果要写入R / W快照安装点,请通过将快照写入原始快照来提交,并通过丢弃快照来还原
  • 如果写入原始挂载点,请丢弃快照以提交,并通过从快照写入原始快照来还原

我仍然没有找到专门用于执行此合并的工具-并且,鉴于我的情况并非快照的确切用途,因此可能没有快照。这听起来像是rdiff的工作。


目前没有可用的LVM合并工具。它已经在进行中,但是我不认为它是完整的。
伊格纳西奥·巴斯克斯

合并工具现已存在(至少在Ubuntu Trusty上)- lvconvert --merge <snapshot-name>将原始磁盘“还原”到该快照,并删除该快照。您当然可以立即将其还原。
dpb

3

LVM在块级别工作。它甚至“不知道”什么是文件系统。因此,除非从另一个LVM卷安装了文件系统,否则您不能仅快照某些目录。

制作LVM快照时,实际上是请求卷的“写入时复制”副本。快照卷上将要更改的任何块都将首先未经修改地存储在快照中。因此,“提交更改”无需执行任何操作。只需删除快照卷即可。

我不太了解“还原更改”的推荐方法,因为我从未在这种情况下使用过LVM,但是我想它在LVM文档中的某个地方描述得很好。无论是什么,您都可能需要重新启动所有已更改的内容,重新启动可能是个好主意。


2
  1. 没有理由合并一些。只需删除快照,源LV保持更改
  2. 合并需要还原更改 lvconvert --merge <snapshot name>
  3. LVM与块设备一起使用。与FS相关的任何更改均应根据FS类型由特殊实用程序(xfs_growfs,e2fsck等)完成

快照“冻结”原始LV的状态。删除快照意味着忘记该状态。合并快照意味着返回到该状态

但是在LVM内部,它将重写的数据保存在快照中:请确保快照大小符合LV和快照上预期的更改量


实际上,快照不会冻结任何内容。它会将更改记录在一个额外的位置,以便可以在需要时将其还原。
文斯

0

该文档令人困惑。在我看来,lvcreate --merge表示还原所有更改,lvremove表示提交更改。区别在于您如何使用它。

在大多数情况下,您只是将快照用作实时卷的只读冻结时间点副本,实时卷会不断变化。在这种情况下,如果进行合并,从逻辑上讲,这意味着您将用冻结的副本覆盖实时卷,换句话说,合并意味着回滚更改,而删除意味着提交更改。

如果您写入快照(LVM2的新选项),这似乎不是默认行为,并且可能需要更改其他配置以使应用程序写入快照而不是原始卷,那么情况将相反。

在处理快照时,请小心,因为某些人会假设您是要使用快照的一种方式,并且会给您说明,如果您在相反的假设下运行,可能会破坏您的系统!


您只需安装快照即可写入快照。安装在何处的内容与LVM默认值无关-它不关心您对每个逻辑卷到底要做什么,无论它是否是快照,它只跟踪它是否打开。
Josip Rodin
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.