在我使用 mdadm 有点太用力之后,我现在正在尝试恢复位于原始 RAID1 阵列中的 lvm2 卷。pvscan 什么也没找到,但这并不奇怪:因为 mdadm 无法重建阵列,所以 pvscan 没有 /dev/md1 可供查看。
但是我知道(呃......我希望)我的 lvm2 卷仍然存在,我想我只删除了 raid 元数据。
我的想法是使用实时 sysresccd 在 /dev/loop1 下使用偏移量来丢失 /dev/sdc2,以便我跳过 /dev/sdc2 中损坏的 RAID 元数据并到达 PV 本身。我计划类似:
losetup -o xxxxxx /dev/loop1 /dev/sdc2
pvscan
然后 pvscan 可以在 /dev/loop1 中找到卷。问题是我不知道偏移量(但这可以通过学习或反复试验来克服),最重要的是,losetup 不适用于物理设备。如何创建一个指向另一个具有偏移量的设备的设备?或者,如何使 pvscan 使用偏移量查找物理卷?
在@lsd 评论后编辑:
当我尝试时:
losetup -o 32256 /dev/loop1 /dev/sdc2
我有:
losetup: /dev/sdc2: warning: file smaller than 512 bytes, the loop device maybe be useless or invisible for system tools.
我认为警告告诉我出了点问题,因为 /dev/sdc2 仅当您将其视为普通文件时才小于 512 字节,但如果 losttup 支持块设备,它应该知道它的实际大小......我应该忽略然而警告?
losetup
在设备文件上工作得很好。至少在 Ubuntu 14.04 上。Linux 3.13.0-43-generic 和 util-linux 2.20.1-5.1ubuntu20。并使用来自 git 的 2.26-rc1。(由于某种原因,进程替换不起作用:
sudo cmp <(sudo tail -c 32257 /dev/sdb3) /dev/loop5
.“cmp: /dev/fd/63: No such file or directory”)我不再在这个系统上使用 lvm 了。我不记得 LVM 破坏了正常的环回设备。除非它对普通块设备进行某种形式的锁定,否则它们不能直接使用。