JSB*_*ոգչ 9 ext4 data-recovery hard-disk
我的硬盘驱动器似乎在日志中出现了某种硬件问题。这可以防止驱动器被加载。运行mount -r -t ext4 /dev/sda5 /mnt/root
结果在以下内核喷涌:
[ 1420.671055] ata1.00: exception Emask 0x0 SAct 0x1000000 SErr 0x0 action 0x0
[ 1420.673862] ata1.00: irq_stat 0x40000008
[ 1420.676600] ata1.00: failed command: READ FPDMA QUEUED
[ 1420.679326] ata1.00: cmd 60/40:c0:a8:9d:0a/00:00:08:00:00/40 tag 24 ncq 32768 in
[ 1420.679326] res 41/40:40:e1:9d:0a/00:00:08:00:00/00 Emask 0x409 (media error) <F>
[ 1420.685014] ata1.00: status: { DRDY ERR }
[ 1420.687858] ata1.00: error: { UNC }
[ 1420.761064] ata1.00: configured for UDMA/133
[ 1420.763863] sd 0:0:0:0: >[sda] Unhandled sense code
[ 1420.766653] sd 0:0:0:0: >[sda]
[ 1420.769364] Result: hostbyte=DID_OK driverbyte=DRIVER_SENSE
[ 1420.772104] sd 0:0:0:0: >[sda]
[ 1420.774780] Sense Key : Medium Error [current] [descriptor]
[ 1420.777491] Descriptor sense data with sense descriptors (in hex):
[ 1420.780249] 72 03 11 04 00 00 00 0c 00 0a 80 00 00 00 00 00
[ 1420.783175] 08 0a 9d e1
[ 1420.785972] sd 0:0:0:0: >[sda]
[ 1420.788730] Add. Sense: Unrecovered read error - auto reallocate failed
[ 1420.791545] sd 0:0:0:0: >[sda] CDB:
[ 1420.794331] Read(10): 28 00 08 0a 9d a8 00 00 40 00
[ 1420.797242] end_request: I/O error, dev sda, sector 134913505
[ 1420.800072] ata1: EH complete
[ 1420.800077] JBD2: Failed to read block at offset 2748
[ 1420.812529] JBD2: recovery failed
[ 1420.815275] EXT4-fs (sda5): error loading journal
Run Code Online (Sandbox Code Playgroud)
我几乎不明白这意味着什么,但它确实看起来像是阻止加载日志的硬件问题。有没有办法解决这个问题?例如,可以将日志重新定位到不同的偏移量,同时保持驱动器的其余部分基本完好无损吗?我无意继续使用该驱动器;我只是想挂载它,以便我可以复制一些关键文件。
看看输出smartctl -a /dev/sda
。如果不是电缆问题,则磁盘可能会死。如果您没有最近的备份,您应该尝试使用 dd_rescue 或 dd 以及相应的选项复制块设备内容(无需安装)。
之后你可以尝试hdparm --write-sector
(这些“非常危险”的选项总是很有趣......)。
另一种选择是创建一个绕过缺陷扇区的 DM 设备。当然,这不会恢复它们的内容。您必须将sda偏移量(134913505)转换为sda5偏移量(找出sda5的第一个扇区的编号并减去它)。让我们假设 sda5 偏移量为 12345。您创建一个块设备,其扇区 12345 未映射到 sda5 而是其他位置(例如循环设备)。设备定义(用于 dmsetup create)如下所示:
0 12345 linear /dev/sda5 0
12345 1 linear /dev/loop0 0
12346 99987653 /dev/sda5 12345
# format:
# logical_start_sector num_sectors linear destination_device start_sector
Run Code Online (Sandbox Code Playgroud)
您不会幸运到只有一个有缺陷的扇区。您可以根据需要绘制任意数量(导致 DM 设备为这些扇区提供零但可写),但计算 loop0 中的偏移量可能会变得有趣。另一种选择是使用相同大小的虚拟设备进行重新映射,并使用精简配置或零目标设备的快照(具有小块大小,例如 1 个扇区)。
编辑 1
当然,循环设备不应指向同一磁盘 (sda) 上的文件。