我即将在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中得出结论。
快照的工作方式是从原始的块级变更。 所以,当原稿写入时,会发生以下情况:
所以,扔掉快照根本不会影响原始的 – 因为原始文件已经被改变了,快照只是包含了这些改变的列表。
回答我自己的问题:
用LVM创build一个新的快照。 如果可以将更新configuration为写入快照安装点,请使用R / W快照。 否则,RO或R / W将会执行。
然后:
我还没有find一个特别的工具来执行这个合并 – 而且,鉴于我的场景并不完全是快照的打算使用,可能不会有一个。 这听起来像rdiff的工作。
LVM在块级别上工作。 它甚至不知道文件系统是什么。 因此,除非从不同的LVM卷上安装文件系统,否则无法仅快照某些目录。
当您制作LVM快照时,您实际上请求“复制写入”卷的副本。 任何将在快照卷上更改的块都将首先保存在快照中。 所以要“改变”你不需要做任何事情。 只需删除快照卷。
我不知道什么是“恢复更改”的推荐方式,因为我在这种情况下从来没有使用过LVM,但是我想在LVM文档中有很好的描述。 不pipe是什么,你可能需要重启任何被改变的东西,重启可能是一个好主意。
lvconvert --merge <snapshot name>
快照“冻结”原始LV的状态。 删除快照意味着忘记那个状态。 合并快照意味着返回到该状态
但在LVM内部,它会将重写的数据保存在快照中:确保快照大小满足LV和快照上预期的更改量
该文件是混乱。 在我看来,lvcreate – merge意味着恢复所有的变化,而lvremove意味着承诺变化。 区别在于你如何使用它。
在大多数情况下,您只是将快照用作活动卷的只读冻结时间点副本,并且活动卷不断变化。 在这种情况下,如果合并,逻辑上这意味着您要用冻结副本覆盖活动卷,换句话说,合并意味着回滚更改,并删除意味着提交更改。
如果您写入快照(LVM2的一个新选项),这看起来并不是默认行为,并且可能需要在其他位置更改configuration以使应用程序写入快照而不是原始卷,则反之亦然。
处理快照时请小心,因为有些人会认为你的意思是单向使用它们,如果你在相反的假设下操作,会给你的指令可能会毁掉你的系统!