提交或恢复 Linux LVM 快照?

She*_*fig 17 linux lvm snapshot

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

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

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

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

小智 21

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

 # lvrename lvm root root-old
 # lvcreate -n root -s lvm/root-old -L 10G
Run Code Online (Sandbox Code Playgroud)

The size should be chosen appropriately. 然后重新启动,以便“新”lvm/ubuntu 以 root 身份挂载,您可以执行升级。现在您可以通过以下方式测试新版本甚至更改为旧系统

 # lvrename lvm root root-new
 # lvrename lvm root-old root
 # reboot
Run Code Online (Sandbox Code Playgroud)

如果您想放弃升级,只需运行(从旧系统)

# lvremove lvm/root-new
Run Code Online (Sandbox Code Playgroud)

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

# lvconvert --merge lvm/root-new
Run Code Online (Sandbox Code Playgroud)

或者,从新系统

# lvrename lvm root root-new
# lvconvert --merge lvm/root-new
# lvrename lvm root-old root
Run Code Online (Sandbox Code Playgroud)

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

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


She*_*fig 12

好的,我想我已经通过重新阅读 HOWTO 3.8 弄清楚了。

  • 只读快照(如 LVM1)包含快照创建后的块级差异 - 原始快照仍会发生更改,但快照保留了原始快照的表示。阅读快照呈现的数据,因为它似乎在那个时候。
  • 可以写入读写快照(LVM2 中的默认值):它们是原始分区的分支。写入快照不改变原来的。

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

  1. 有些东西试图写入原始文件。
  2. 读取原始数据,并将原始数据块复制到快照。
  3. 原版变了。
  4. 快照包含“反向差异” - 使原始看起来像创建快照时所做的更改。

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

回答我自己的问题:

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

然后:

  • 如果写入R/W 快照挂载点,则通过将快照写入原始快照来提交,并通过丢弃快照来恢复
  • 如果写入原始挂载点,则通过丢弃快照来提交,并通过从快照写入原始文件来恢复

我仍然没有找到专门用于执行此合并的工具 - 而且,鉴于我的场景并不是快照的预期用途,因此可能没有。这听起来像是 rdiff 的工作。


小智 11

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

lvconvert --merge
Run Code Online (Sandbox Code Playgroud)

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

它引用了http://kernelnewbies.org/Linux_2_6_33(查看第 5 节,MD/DM)和 2.0.58 的 LVM 变更日志:ftp: //sources.redhat.com/pub/lvm2/WHATS_NEW

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

  • OP 似乎对通过某种合并步骤提交更改感到困惑。随着快照大小的增加,正在提交更改。(更改的)快照是通过 lvconvert --merge 将其备份所需的信息。如果 OP 对他的更改感到满意,他可以通过 lvremove 删除快照。 (2认同)