这是在运行 Raspbian 8(Linux 内核 4.9)的 Raspberry Pi 上。我插入了一个 64 GB USB 笔驱动器(作为 /dev/sda)并配置为 LVM 物理卷。只有一个卷组(“数据”)和一个逻辑卷(也是“数据”),其格式为 ext4。我在 fstab 中自动挂载该卷。 (需要明确的是:/dev/sda 是物理卷,而不是 /dev/sda1 - 设备上没有分区。)
直到最近,当我注意到逻辑卷无法访问时,这种方法一直运行良好。我重新启动后发现 LVM 无法启动。systemctl 状态 lvm2揭示了以下内容:
Aug 20 13:27:54 rasputin lvm[1747]: device-mapper: reload ioctl on failed: Read-only file system_dmesg** from boot:
[ 4.963170] sd 0:0:0:0: [sda] Attached SCSI removable disk
[ 5.896509] systemd-udevd[126]: starting version 215
[ 6.778455] sd 0:0:0:0: [sda] 126058496 512-byte logical blocks: (64.5 GB/60.1 GiB)
[ 6.781190] sd 0:0:0:0: [sda] Write Protect is on
[ 6.781219] sd 0:0:0:0: [sda] Mode Sense: 43 00 80 00
[ 7.000522] device-mapper: ioctl: 4.35.0-ioctl (2016-06-23) initialised: [email protected]
[ 7.139872] device-mapper: table: 254:0: linear: Device lookup failed
[ 7.139890] device-mapper: ioctl: error adding target to table
我的解释是 /dev/sda 物理卷存在问题,导致其变为只读。从那时起,我不太确定如何继续,所以它变成了实验。
我试过了fsck /dev/sda没有明显的改进,这也许是有道理的,因为我认为 /dev/sda 不包含正常意义上的文件系统。我还尝试过强制设备关闭只读模式hdparm -r0 /dev/sda,这不会更改尝试启动 lvm2 服务时的错误消息。
尝试了解更多 LVM 特定工具,聚氯乙烯似乎证实了音量表现不佳,但仅此而已:
root@rasputin:~# pvck -v /dev/sda
DEGRADED MODE. Incomplete RAID LVs will be processed.
Scanning /dev/sda
Found label on /dev/sda, sector 1, type=LVM2 001
Found text metadata area: offset=4096, size=1044480
基本上,这就是我的情况。我还可以尝试什么来诊断和/或解决此问题?磁盘上的数据是消耗性的,但如果可能的话,我仍然想恢复它,部分是为了方便,部分是为了探索未来使用的可用选项。
值得注意的是(据我所知)我没有做任何特别的事情来实现这一点。当人们尝试运行 LVM 命令时,谷歌搜索错误消息会出现很多结果。我没有,它工作了大约一个月,重新启动,然后有一天就不行了。
我认为 USB 驱动器可能已损坏,但它几乎是全新的。不管怎样,这将是最后一个假设,而不是第一个假设。
非常感谢任何建议或帮助!
答案1
某些笔式驱动器存在问题(我的情况是这样的闪迪)当遇到电源波动时会进入“锁定”状态,这显然是为了保护数据。
无法在 Linux 或 Win 下格式化 USB。
我与制造商交谈,他们更换了驱动器 FoC。
答案2
dmsetup 命令失败是相当奇怪的; 254:0 表示它是您的第一个设备映射器设备。该命令将包括您的原始设备(/dev/sda)和一些参数(线性目标的块范围),如果它被执行,似乎表明您的 PV 对其 VG 有足够的配置,这包含所有 LV 的完整配置。
因此, /etc/lvm/backup/data (== 文件)中的备份应包含整个基于文本的卷组配置。如果有任何东西实际上损坏了,它应该在那里损坏(您可以使用 vgcfgbackup 生成一个新的)——并且旧的备份应该位于 /etc/lvm/archive/ 中。
但是,由于它已经在尝试映射您的 LV,我怀疑配置没有损坏,但您可以检查;并且问题出在硬件上。
无论如何,您的 PV 接头位于 USB 记忆棒的第 2 区,我相信 VG 接头在下面,还有一些东西可以已经改变了,但是......
最安全的选择是使用 dd (或 ddrescue)将所有内容从你的棒复制到另一个棒上,看看会发生什么。当然不要同时插入它们。