我刚刚在 Ubuntu 12.10 上尝试 LVM 中的快照。我创建了一个 6.5 GiB 的快照逻辑卷,在对源进行一些更改后,决定将快照合并回来以撤消它们。一切似乎都很顺利,但我注意到 syslog 中有几条与 LVM 相关的段错误消息。
输入的命令:
sudo lvcreate -L6.5G -n backup_snapshot -s /dev/mapper/vg0-backup
# made some miscellaneous writes
sudo lvconvert --merge /dev/vg0/backup_snapshot
sudo umount /snapshot/backup
sudo umount /backup
sudo lvchange -an /dev/vg0/backup
sudo lvchange -ay /dev/vg0/backup
sudo mount /backup
从系统日志:
Apr 12 04:57:10 bournemouth kernel: [ 5260.813253] EXT4-fs (dm-1): mounted filesystem with ordered data mode. Opts: errors=remount-ro
Apr 12 05:00:11 bournemouth kernel: [ 5441.841401] EXT4-fs (dm-5): mounted filesystem with ordered data mode. Opts: errors=remount-ro
Apr 12 05:02:00 bournemouth kernel: [ 5551.438487] show_signal_msg: 48 callbacks suppressed
Apr 12 05:02:00 bournemouth kernel: [ 5551.438495] lvm[5813]: segfault at 28 ip 000000000047f319 sp 00007fff60873de0 error 4 in lvm[400000+d9000]
Apr 12 05:02:01 bournemouth kernel: [ 5552.458797] lvchange[6449]: segfault at 28 ip 000000000047f319 sp 00007fff935f4380 error 4 in lvm[400000+d9000]
然后我卸载了原始 LV,确保快照不再存在,并fsck.ext4 -f
在其上运行;这样检查就OK了。但我仍然担心段错误。我的数据是否有可能以某种 fsck 无法捕获的方式弄乱了?我正在试验的卷是一个备份卷,我在其上备份的所有文件系统仍然处于工作状态,因此我可以重新开始并再次备份它们。但另一方面,我想保留我的增量备份历史记录。我只是想保证我可以信任这些备份。
答案1
是的,这绝对是一个错误,但别担心,LVM 足够智能来处理这些东西,我曾经在 pvmove 过程中断电,我所要做的就是再次打开服务器“取消”旧的 pvmove 并重新开始。
首先,重要的是要知道您使用的工具只是内核进程的用户空间接口。 LVM 位于内核内部,因此除非您的内核发生恐慌,否则一切都正常。像 pvmove 或 lvchange 这样的用户空间工具只是为我们与 LVM 交互,然后坐下来问内核“嘿,你已经完成了吗?结果怎么样?”或者“嘿,我们现在进展到什么程度了?” (您的具体问题是 lvchange 成功完成后出现 lvchange 段错误,听起来像是最近修复的错误因此您可能需要确保您拥有所有系统更新)。
一般来说,您也不应该对 LVM 是否遇到麻烦如此犹豫或偏执,它旨在很好地处理此类意外错误(即使它们直接影响它,而不仅仅是您正在使用的工具) )并且这种保证是使用卷管理器而不是传统分区的要点的一部分。只有发生什么事你才会有麻烦真的坏事发生了,或者你没有经过深思熟虑就做了某事。 LVM 按盘区(而不是块)进行操作,并且在复制操作成功完成之前,它不会使复制的盘区处于活动状态而使原始盘区处于非活动状态。通过这样做,一半复制的范围将保持标记为未分配,任何后续工具都将覆盖它。我的 pvmove 和你的 lvchange 都是这种情况。
编辑:
看着此邮件列表公告,我们可以更详细地描述您的合并实际上是如何“在幕后”工作的:
当合并处于活动状态时,对源设备的任何访问都会[定向到]正在合并的快照。合并完成后,源目标将无缝重新加载,并删除合并快照。在此期间,[非快照]文件系统可以保持挂载状态。
我觉得了解一下可能会很有趣
答案2
虽然繁重的工作是由内核(设备映射器)处理的,但您的数据本身应该是安全的。然而,LVM 用户层工具仍然具有重要的功能;它们保留 LVM 元数据,即存储内容、存储位置以及存储方式,设备映射器本身不知道也不关心这些元数据。
如果 LVM 工具在更新此类元数据的过程中出现段错误,则可能会导致数据丢失。在某种程度上,LVM 是一个分区文件系统;损坏的 LVM 元数据等同于丢失文件系统超级块。这就是为什么几乎每个更改都会记录/备份到/etc/lvm/...
.
段错误从来都不是好事 - 如果您的 LVM 工具出现这种情况,您应该停止使用它们并切换到适合您稳定的 LVM 版本。并且可能会向您的发行版报告错误,以便可以追踪并永久修复该问题。