我想运行thin_dump
和thin_check
。他们说它们不能在实时元数据上运行。我同意。问题是我不知道如何让元数据不实时,同时仍然能够给出thin_dump
和thin_check
在什么上运行的参数。
我知道还有另一种使用元数据快照的方法,用于实时元数据,但我不想那样做。我现在不想更改驱动器上的任何内容。
# lvs -a
disk1thin lvm twi-aot--- <4.53t 92.10 83.47
[disk1thin_tdata] lvm Twi-ao---- <4.53t
[disk1thin_tmeta] lvm ewi-ao---- 640.00m
# # Need to de-activate the metadata - this is the only way I know how, but must not be right
# lvchange -an lvm/disk1thin
# lvs -a
disk1thin lvm twi---t--- <4.53t
[disk1thin_tdata] lvm Twi------- <4.53t
[disk1thin_tmeta] lvm ewi------- 640.00m
# thin_dump <uhh, what goes here?>
# thin_dump lvm/disk1thin
Couldn't stat path
# thin_dump lvm/disk1thin_tdata
Couldn't stat path
# thin_dump lvm/disk1thin_tmeta
Couldn't stat path
# thin_dump lvm/disk1thin-tpool
Couldn't stat path
# ls -la /dev/mapper
# crw------- 1 root root 10, 236 May 31 00:28 control
# # Not listed
# ls -la /dev/lvm/
ls: cannot access '/dev/lvm/': No such file or directory
# lvchange -ay lvm/disk1thin_tmeta
Operation not permitted on hidden LV lvm/disk1thin_tmeta
# # Nope, that didn't work...
我也尝试过在激活它们之后dmsetup suspend
在它们上运行,但是这确实会暂停对它们的所有读取,就像它的手册页所说的那样,所以虽然它们存在于中/dev/lvm
,thin_dump
但thin_check
无法在它们上运行。
一旦精简池被停用,我也尝试过:
# thin_dump /dev/sdh3
bad checksum in superblock, wanted 3832019051
并且它表示任何其他带有精简卷的设备都存在校验和错误。我知道并非所有磁盘都出现问题,因此我很确定这不是一个合适的选项。尽管精简池位于此设备上,但该设备以较小的非精简 lv 开始,因此该选项实际上并没有告诉它在正确的位置查找精简卷。
答案1
我不会将此标记为答案,因为我认为它很糟糕。而且,我不推荐它。它对我有用。
但是,一定有更好的方法。希望有人知道。
确保绝对没有任何东西在使用精简池。您无法在其上启动。如果它是您的根卷,则必须从 ISO 运行。您 umount
可能正在使用的任何环回设备,停止交换文件等。 lvchange -an
精简池中的所有 lv 以停用它们。(但不要停用精简卷本身。)
# dmsetup info -c
Name Maj Min Stat Open
lvm-disk1thin-tpool 253 10 L--w 1...
lvm-disk1thin_tdata 253 9 L--w 0...
lvm-disk1thin_tmeta 253 8 L--w 0...
确保_tdata
和 的open 为 0。_tmeta
我不知道为什么 的 open 为 1。-tpool
我不明白如何将其设为 0。
# dmsetup remove lvm-disk1thin-tpool
device-mapper: remove ioctl on lvm-disk1thin-tpool failed: Device or resource busy
因此,为了安全起见,想办法将其设为 0。或者,如果你喜欢冒险:
# dmsetup remove -f lvm-disk1thin-tpool
device-mapper: remove ioctl on lvm-disk1thin-tpool failed: Device or resource busy
Command failed
但,真的有吗?
# lvs -a
disk1thin lvm twi-XXt-X- <4.53t
[disk1thin_tdata] lvm Twi------- <4.53t
[disk1thin_tmeta] lvm ewi-a----- 640.00m
这些 X 代表状态未知、设备开放性未知、卷健康未知。
# thin_dump lvm-disk1thin_tmeta
(YAY, output!)
然后,让精简池再次处于活动状态:
# lvchange -ay lvm/disk1thin
(您需要重新激活所有已停用的 lv,重新挂载并启动所有已停止的程序,等等。)
答案2
@user1902689 解决方案是(适用于 Ubuntu 18.04):
# Reserve the metadata snapshot
dmsetup message /dev/mapper/volg-volg--thinpool-tpool 0 reserve_metadata_snap
# Run the dump (the -m is the crtical part here)
thin_dump --format xml -m /dev/mapper/volg-volg--thinpool_tmeta
# Release the metadata snapshot
dmsetup message /dev/mapper/volg-volg--thinpool-tpool 0 release_metadata_snap
我相信元数据快照在内存中,因此您不想长时间保存它。
仅供参考 - volg 是我的卷组 - thinpool 是 thinpool 的卷 - tpool 是隐藏的。
# lvs -a
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
[lvol0_pmspare] volg ewi------- 12.00m
thin_volume volg Vwi-a-tz-- 6.00g volg-thinpool 31.96
thin_volume_snap1 volg Vwi---tz-k 6.00g volg-thinpool thin_volume
thin_volume_snap2 volg Vwi---tz-k 6.00g volg-thinpool thin_volume
thin_volume_snap3 volg Vwi---tz-k 6.00g volg-thinpool thin_volume
volg-thinpool volg twi-aotz-- 9.80g 20.51 9.41
[volg-thinpool_tdata] volg Twi-ao---- 9.80g
[volg-thinpool_tmeta] volg ewi-ao---- 12.00m