我正在玩我的 LVM 精简安装。创建多个快照,并将它们多次与原点合并。在命令输出中的某个时刻,lvs -a
最旧的快照丢失了其起源。在更详细命令的输出中,lvs -a -o time,name,origin,lv_role
此快照现在具有lv_role
(public
而快照具有 Roles public,snapshot,thinsnapshot
)。merge
现在不可能出现错误is not a mergeable logical volume
。现在我有多个问题:
- 这个孤立的快照是正确的卷还是已损坏?
- 为什么会发生这种情况?(我将创建时间快照的一些中间部分与其起源合并,然后重新创建它们)
- 我可以手动从快照中删除源以使其成为单独的卷吗?
- 有没有办法让这些卷成为快照,并将相同的数据块再次链接到原点以保留空间?
更新。测试脚本。
带有 VG 名称和应该存在的池的初始配置:
VG=vg
Pool="${VG}"/pool0
Test_volume="test"
创建测试 LV 并使其随机
lvcreate -V10M -T "${Pool}" -n "${Test_volume}"
lvchange -ay -Ky "${VG}"/"${Test_volume}"
dd if=/dev/urandom of="/dev/${VG}/${Test_volume}"
lvcreate -n "${Test_volume}_snap_0" --snapshot "${VG}"/"${Test_volume}"
lvchange -ay -Ky "${VG}"/"${Test_volume}_snap_0"
dd if=/dev/urandom of="/dev/${VG}/${Test_volume}"
lvcreate -n "${Test_volume}_snap_1" --snapshot "${VG}"/"${Test_volume}"
lvchange -ay -Ky "${VG}"/"${Test_volume}_snap_1"
dd if=/dev/urandom of="/dev/${VG}/${Test_volume}"
lvcreate -n "${Test_volume}_snap_2" --snapshot "${VG}"/"${Test_volume}"
lvchange -ay -Ky "${VG}"/"${Test_volume}_snap_2"
dd if=/dev/urandom of="/dev/${VG}/${Test_volume}"
lvcreate -n "${Test_volume}_snap_3" --snapshot "${VG}"/"${Test_volume}"
lvchange -ay -Ky "${VG}"/"${Test_volume}_snap_3"
sha256sum "/dev/${VG}/${Test_volume}_snap"*
lvs -a -o name,origin,lv_role| grep "${Test_volume}"
lvs
输出:
test public,origin,thinorigin,multithinorigin
test_snap_0 test public,snapshot,thinsnapshot
test_snap_1 test public,snapshot,thinsnapshot
test_snap_2 test public,snapshot,thinsnapshot
test_snap_3 test public,snapshot,thinsnapshot
现在合并一个快照:
lvconvert --merge "${VG}/${Test_volume}_snap_2"
lvs -a -o name,origin,lv_role| grep "${Test_volume}"
输出:
test public
test_snap_0 public
test_snap_1 public
test_snap_3 public
该快照现在只是卷,它们可能彼此共享一些块,sha256sum
表明数据完好无损,覆盖其中一个不会影响其他快照。
很奇怪为什么它们失去了起源但仍然有共同的数据块。