当我启动我的笔记本电脑时(只安装了 opensuse,没有其他操作系统),我看到了error: failure reading sector 0x802 from 'hd0'.
GRUB 救援提示。
我使用原始安装 USB 启动了救援 Linux 系统。这是fdisk - l
救援 shell 的输出(磁盘是笔记本电脑附带的 1TB HDD,只有一半已分区并正在使用):
sda1
是包含 Opensuse 的 30 GB 分区,sda3
是 350+ GB 的数据分区。尝试fsck /dev/sda1
给出
fsck.ext2: Input/output error while trying to open /dev/sda1
The superblock could not be read or does not describe a valid ext2/ext3/ext4 filesystem.
接下来是建议“尝试使用备用超级块运行 e2fsck”(注意:fsck
onsda3
表示“干净”)。dumpe2fsck
按建议运行在 Opensuse wiki 上返回与上述相同的错误消息。我尝试过e2fsck -b <superblock> /dev/sda1
- 将超级块设置为 8193(显示“超级块中的魔法数字错误”),并将超级块设置为 32768,结果提示修复许多不同组中的“可用块数”、“目录数”、“可用 inode 数”(中间有大量“Inode 位图差异”列表)。但不幸的是,即使是后者最终也显示“写入块 1 时出错(输入/输出错误)”,并且没有解决问题。
整个事件始于操作系统在关机过程中挂起,为了节省电池寿命,我长按电源按钮强制关闭了它。我检查了一下,似乎没有任何电缆问题(而且其他分区也显示正常)。丢失 30GB 操作系统分区会带来不便,但丢失 380GB 数据分区将是一个重大挫折,我宁愿避免。接下来要采取哪些步骤才能从此错误中恢复并使磁盘再次可用?
答案1
问题似乎出在分区的超级块上/dev/sda1
。超级块上的选定链接列示如下。
您的情况很好,因为您最感兴趣的分区 ( /dev/sda3
) 看起来不错。因此,您可以:
备份
/dev/sda3
(必要部分)的内容。恢复正常
2.1.尝试修复您的系统。
2.2. 从头重新安装并恢复您的备份。
对于步骤 1,在从 Live CD/USB 启动并适当格式化空间后,您可以使用剩余的未格式化的 500Gb 作为备份存储(应该没问题)。不过,为了安全起见,您可以购买外部磁盘(推荐)。实际需要的额外空间不是 ~380Gb,而是取决于要备份的数据量。尽管/dev/sda3
这可能无关紧要,因为外部磁盘(或您的新分区)可能有 500Gb 以上,但我提到这个更精确的数字,以防它对您有影响。
启动新系统后,您可以安装/dev/sda3
并备份数据。使用rsync
或tar
复制目录结构例如
对于步骤 2.2,你肯定知道该怎么做。
对于步骤 2.1,这是一本经常被引用的指南。
PS:下次你遇到“整个故事……”类型的问题(或其他问题)时,请记住 神奇的 SysRq 键(主要是 REISUB)。
PS2:这里,关于使用 TestDisk 的警告。尽管它在大多数情况下都运行良好。
在超级街区上:
答案2
购买新磁盘并使用 ddrescue 复制分区。此后从新磁盘启动将不会遇到扇区错误,任何 FS 错误都可以使用 fsck 修复。启动问题可以使用 GRUB 修复。