使用损坏的日志恢复ext4文件系统


9

我的硬盘驱动器似乎在日记中出现了某种硬件问题。这样可以防止驱动器被加载。运行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

我几乎不明白这意味着什么,但是它肯定看起来像是一个硬件问题,阻止了日记的加载。是否有任何解决方法?例如,是否可以将轴颈重定位到其他偏移量,同时使其余驱动器保持完整?我无意继续使用该驱动器;我只想挂载它,以便可以复制一些关键文件。


两件事:确保断开并重新连接电缆。如果甚至可以暂时摆脱硬件问题。如果是这样,请获得新电缆。否则,也可以使用另一根电缆在另一台计算机上尝试使用该磁盘。
0xC0000022L13年

您是否尝试fsck过文件系统?
psusi

今天我遇到了类似的问题,在解锁加密的ext4分区时,我设法以某种方式破坏了日记。我只能以只读方式挂载。我设法通过对GParted中的分区运行“检查”例程来修复它。“检查”例程发现了日记的问题并自动纠正了问题。
navnav

Answers:


8

要以只读方式安装它,而不重播日志,以便您可以访问文件(您可能会丢失一些尚未提交给常规fs的更改):

mount -o ro,noload ...


7

看一下的输出smartctl -a /dev/sda。如果不是电缆问题,则说明磁盘可能快要死了。如果您没有最新的备份,则应尝试使用dd_rescue或dd以及相应选项来复制块设备内容(不进行安装)。

之后,您可以尝试hdparm --write-sector(总是有趣的是这些“非常危险”选项...)。

另一种选择是创建一个绕过缺陷扇区的DM设备。当然,那不会恢复其内容。您必须将sda偏移量(134913505)转换为sda5偏移量(找出sda5的第一个扇区的编号并将其减去)。假设sda5偏移为12345。您创建一个块设备,其扇区12345并未映射到sda5,而是映射到其他位置(例如,循环设备)。设备定义(用于dmsetup创建)如下所示:

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

您不会很幸运只有一个缺陷扇区。您可以根据需要映射任意数量(导致DM设备为这些扇区提供零但可写),但计算loop0中的偏移量可能会很有趣。另一个选择是使用相同大小的虚拟设备进行重新映射,并使用精简配置或零目标设备的快照(具有小块大小,例如1个扇区)。

编辑1

当然,循环设备不应指向同一磁盘(sda)上的文件。


很好的一点。--write-sector是来自“危险”的FAR。事实上,这其实是理想的在使用时一定损坏的选项部门阻止你得到一个连续的原始扇区映象(dd会救助与“设备I / O错误”;有些硬盘甚至会要求对电源循环机( !)再次被OS识别)。但是,如果要用于扇区范围,则必须了解shell脚本。--write-sector
语法错误

0

您可以在恢复模式下启动,在该模式下,FS将以只读方式安装,然后复制您的东西。


我正在以只读方式安装。我更正了上面显示的命令行,以使其更加清晰。
JSBձոգչ2013年

您可以访问驱动器吗?
schaiba

否。尝试安装驱动器RO(或在R / W中没有区别)会导致上面显示的错误提示。
JSBձոգչ2013年

然后,有关电缆交换的建议可能会派上用场。关于您的问题,日记无法按照您想要的方式移动。
schaiba
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.