我将在CentOS 5服务器上进行实验性升级。如果升级失败,我希望能够撤消对文件系统的更改。这种情况似乎类似于LVM HOWTO的3.8节中有关LVM2读写快照的示例-但是该示例实际上缺少实际操作方法。
我将如何提交更改,将其重新合并到原始分区中?
如何还原更改,将文件系统恢复到原始状态?我是否应该假设我需要重新启动几个服务,如果不能完全重新启动?
是否可以仅对分区上的某些目录进行快照,还是对整个分区进行操作?
我将在CentOS 5服务器上进行实验性升级。如果升级失败,我希望能够撤消对文件系统的更改。这种情况似乎类似于LVM HOWTO的3.8节中有关LVM2读写快照的示例-但是该示例实际上缺少实际操作方法。
我将如何提交更改,将其重新合并到原始分区中?
如何还原更改,将文件系统恢复到原始状态?我是否应该假设我需要重新启动几个服务,如果不能完全重新启动?
是否可以仅对分区上的某些目录进行快照,还是对整个分区进行操作?
Answers:
如果您正在运行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
但是我还不能告诉你如何正确使用它;-)
我刚刚尝试使用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的一部分,因此新旧内核将并排放置。
好的,我认为通过重新阅读HOWTO 3.8可以解决问题。
快照的工作方式是对原始数据进行块级更改。因此,当原始文档被写入时,会发生以下情况:
因此,丢弃快照根本不会影响原始文档-因为原始文档已更改,并且快照仅包含这些更改的列表。
回答我自己的问题:
使用LVM创建新的快照。如果可以将更新配置为写入快照安装点,请使用R / W快照。否则,将使用RO或R / W。
然后:
我仍然没有找到专门用于执行此合并的工具-并且,鉴于我的情况并非快照的确切用途,因此可能没有快照。这听起来像是rdiff的工作。
lvconvert --merge <snapshot-name>
将原始磁盘“还原”到该快照,并删除该快照。您当然可以立即将其还原。
LVM在块级别工作。它甚至“不知道”什么是文件系统。因此,除非从另一个LVM卷安装了文件系统,否则您不能仅快照某些目录。
制作LVM快照时,实际上是请求卷的“写入时复制”副本。快照卷上将要更改的任何块都将首先未经修改地存储在快照中。因此,“提交更改”无需执行任何操作。只需删除快照卷即可。
我不太了解“还原更改”的推荐方法,因为我从未在这种情况下使用过LVM,但是我想它在LVM文档中的某个地方描述得很好。无论是什么,您都可能需要重新启动所有已更改的内容,重新启动可能是个好主意。
lvconvert --merge <snapshot name>
快照“冻结”原始LV的状态。删除快照意味着忘记该状态。合并快照意味着返回到该状态
但是在LVM内部,它将重写的数据保存在快照中:请确保快照大小符合LV和快照上预期的更改量
该文档令人困惑。在我看来,lvcreate --merge表示还原所有更改,lvremove表示提交更改。区别在于您如何使用它。
在大多数情况下,您只是将快照用作实时卷的只读冻结时间点副本,实时卷会不断变化。在这种情况下,如果进行合并,从逻辑上讲,这意味着您将用冻结的副本覆盖实时卷,换句话说,合并意味着回滚更改,而删除意味着提交更改。
如果您写入快照(LVM2的新选项),这似乎不是默认行为,并且可能需要更改其他配置以使应用程序写入快照而不是原始卷,那么情况将相反。
在处理快照时,请小心,因为某些人会假设您是要使用快照的一种方式,并且会给您说明,如果您在相反的假设下运行,可能会破坏您的系统!
dmsetup targets
如果是这种情况,则应显示快照合并,应用于快照lv的合并命令将恢复为拍摄快照的状态。