Linux LVM快照提交还是恢复?

我即将在CentOS 5服务器上进行实验升级。 如果升级失败,我希望能够退出对文件系统的更改。 这种情况看起来与LVM HOWTO的3.8节LVM2读写快照中的例子类似,但是这个例子在实际操作方面还是比较缺乏。

1)我将如何提交更改,将它们合并回原始分区?

2)我将如何恢复更改,恢复文件系统恢复到原来的状态? 我应该假设我需要重新启动几个服务,如果不彻底重启?

3)是否可以仅快照某个分区上的某些目录,还是分区操作?

谢谢…

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

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

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

我刚刚尝试使用Ubuntu进行基于快照的升级。 是的,我需要重新启动几次。 首先将原始root-lv重命名为其他名称,以便您可以为快照提供原始名称(因为升级会创build大量更改,并且快照上的更改比原始快):

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

大小应适当select。 然后重新启动,所以“新”lvm / ubuntu以root身份挂载,您可以执行升级。 现在您可以testing新版本,甚至可以通过更改旧系统

  # 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的一部分,新旧内核将并排放置。

好吧,我想我已经从重新阅读HOWTO 3.8中得出结论。

  • 只读快照(如LVM1)在创build快照后包含块级差异 – 原始数据仍然被更改,但快照保留了原始数据的表示。 快照中读取显示当时出现的数据。
  • 读写快照(LVM2中的默认设置)可写入:它们是原始分区的一个分支 。 写入快照不会更改原始内容。

快照的工作方式是从原始的块级变更。 所以,当原稿写入时,会发生以下情况:

  1. 有些东西试图写入原件。
  2. 原始数据被读取,原始数据块被复制到快照中。
  3. 原始被改变。
  4. 快照包含“反向差异” – 使创build快照时的原始外观变化。

所以,扔掉快照根本不会影响原始的 – 因为原始文件已经被改变了,快照只是包含了这些改变的列表。

回答我自己的问题:

用LVM创build一个新的快照。 如果可以将更新configuration为写入快照安装点,请使用R / W快照。 否则,RO或R / W将会执行。

然后:

  • 如果写入R / W快照挂载点,则通过将快照写入原始文件来提交 ,并通过丢弃快照来还原
  • 如果写入到原始的挂载点,则通过丢弃快照来提交 ,并且通过从快照写入到原始来进行还原

我还没有find一个特别的工具来执行这个合并 – 而且,鉴于我的场景并不完全是快照的打算使用,可能不会有一个。 这听起来像rdiff的工作。

LVM在块级别上工作。 它甚至不知道文件系统是什么。 因此,除非从不同的LVM卷上安装文件系统,否则无法仅快照某些目录。

当您制作LVM快照时,您实际上请求“复制写入”卷的副本。 任何将在快照卷上更改的块都将首先保存在快照中。 所以要“改变”你不需要做任何事情。 只需删除快照卷。

我不知道什么是“恢复更改”的推荐方式,因为我在这种情况下从来没有使用过LVM,但是我想在LVM文档中有很好的描述。 不pipe是什么,你可能需要重启任何被改变的东西,重启可能是一个好主意。

  1. 没有理由合并一些。 只要删除快照,源LV保持改变
  2. 合并需要恢复更改lvconvert --merge <snapshot name>
  3. LVM与块设备一起工作。 任何与FS相关的更改应该由特殊实用程序(xfs_growfs,e2fsck,…)根据FStypes

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

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

该文件是混乱。 在我看来,lvcreate – merge意味着恢复所有的变化,而lvremove意味着承诺变化。 区别在于你如何使用它。

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

如果您写入快照(LVM2的一个新选项),这看起来并不是默认行为,并且可能需要在其他位置更改configuration以使应用程序写入快照而不是原始卷,则反之亦然。

处理快照时请小心,因为有些人会认为你的意思是单向使用它们,如果你在相反的假设下操作,会给你的指令可能会毁掉你的系统!