后我玩 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 字节,但如果 losetup 支持块设备,它应该知道它的真实大小......我仍然应该忽略警告吗?
答案1
losetup
在设备文件上工作得很好。至少在 Ubuntu 14.04 上是如此。Linux 3.13.0-43-generic 和 util-linux 2.20.1-5.1ubuntu20。以及来自 git 的 2.26-rc1。
sudo losetup -o 32256 /dev/loop5 /dev/sdb3
sudo tail -c 32257 /dev/sdb3 | sudo cmp - /dev/loop5
(由于某种原因,进程替换不起作用:sudo cmp <(sudo tail -c 32257 /dev/sdb3) /dev/loop5
“cmp:/dev/fd/63:没有此文件或目录”)
我不再在这个系统上使用 lvm。我不记得 LVM 会破坏正常的环回设备。除非它对普通块设备进行某种形式的锁定,否则它们不能直接使用。