lvextend 等环回设备支持的 LVM 操作是否需要随后调用同步?

lvextend 等环回设备支持的 LVM 操作是否需要随后调用同步?
  • 里面有一个操作系统映像文件test.dd和一个 LVM 管理的分区。
  • 扩大操作系统映像文件大小,然后将分区大小扩大至完整。
  • 创建一个loopback设备test.dd,然后获取LVM管理的分区设备,如/dev/loop0p1
  • 激活LVM VG(Volume Group),在其中获取一个LV(Logical Volume),例如/dev/dm-1
  • 将PV(物理卷)大小放大pvresize /dev/loop0p1
  • 将 LV(逻辑卷)大小放大lvextend -l +100%FREE /dev/dm-1

我的问题是(实际上只有一个:如何安全地将其复制test.dd到其他地方):

  1. 我可以test.dd安全地复制出来吗? (我不在乎test.dd磁盘中的内容是否已被物理刷新,我只想将其复制到其他地方,无论是从磁盘还是文件缓冲区)。
  2. 或者我应该sync在复制之前打电话?
  3. 或者我应该在复制之前分离环回设备?
  4. 如果无论如何都无法分离环回设备怎么办?

编辑:我不愿意调用sync命令,因为它有时非常慢并且变得不间断(即,kill -9 那么不起作用)。

编辑:我问这个问题的原因是我在其他情况下遇到了与环回设备和支持文件相关的数据不一致问题。

编辑:现在,我使用一个脚本来调用vgchange --activate n --select vg_uuid=$LVM_VG_UUID以停用卷组,然后losetup --detach /dev/loop0,然后udevadm settle我开始复制test.dd出来。我只是想知道我是否可以复制 test.dd 而不需要这么麻烦。

编辑:抱歉输入命令顺序错误。它实际上是vgchange --activate n --select vg_uuid=$LVM_VG_UUID-> udevadm settle-> losetup --detach /dev/loop0-> cp test.dd ...

答案1

我真的不知道。我会希望没有必要,但我不确定LVM。

我希望如果您停用整个 LVM VG 以及使用循环设备的其他任何内容,那将是安全的。

在 Linux 管理中,通常的规范似乎是结尾sync是多余的。

umount刷新缓存、fdisk呼叫fsync你等等。

此外,Linux 还有一个当块设备的最后一个用户关闭它时隐式同步。因此,如果您已停用所有功能,那么您并没有真正避免跑步sync /dev/loop0:-)。

不过,我绝对同意避免裸露sync,即冲洗所有设备。

如果您要停用所有功能,也许您也可以轻松停用循环设备。这可以帮助确保您没有错过任何使循环设备保持打开状态的东西,并且仍然有未写入的数据。

如果它能让您更开心,内核不会写入(或读取)此 LVM 元数据。一切都在用户空间中。并且没有 LVM 守护进程保存写回缓存。 LV元数据仅是读取缓存。

相关内容