# dd if=/dev/sde1 of=backup.img conv=sync,noerror status=progress
简单做一个记录,其中sync作用是遇到坏块时以0填充,保证字节的相对位置
noerror则在遇到坏块时不退出,而是配合sync填充0之后继续读取
最近有一个硬盘,因为super block损坏,导致硬盘无法挂载,经过一番折腾恢复了文件。基本上除非硬盘直接烧了或者磁头出问题,都是可以自己修复的。
super block就是记录了硬盘的文件结构和关键信息的几个块,如果这个损坏硬盘的文件结构就丢失了。ext4作为linux常用的文件结构,会自动在硬盘其他位置进行备份super block。
首先,可以利用mke2fs -n /dev/sdxx命令查看硬盘是否有super block的备份。
然后,如果不是硬盘的第一个块刚好是坏块,则直接使用e2fsck -b (super block的位置) /dev/sdxx,一般就会自动修复好。
但是,可能会遇到和我一样倒霉的情况,我的super block那个硬盘块变成了坏块,e2fsck修复后,直接因为坏块无法写入,所以修复都是无效的。同时我也尝试了直接使用mount -o sb的参数指定备份的super block进行挂载,但是尝试了所有的super block都不行,并且网上也有很多人发现mount根本这个所谓的指定super block是有问题的。
那么到了这里,我想既然e2fsck可以修复,只是无法最后写入修复结果到硬盘,我能不能先用dd备份硬盘,到一个好的硬盘上,再修复。
于是我就用上面提到的dd命令将坏的硬盘100%同步到了好的硬盘上,然后再进行修复,一次就成功了。于是我的文件全都找回了。
从这里也能看出来,首先备份的super block是有效的,是可以直接用来修复的,但是不知道为什么mount会识别不了,如果大家也遇到了类似的问题,可以尝试如此修复。
全部评论