我有一个已知有问题的磁盘(我知道,因为当我尝试克隆它时 dd 会卡住)。但是当我使用实时 CD 启动并在未安装的分区上运行 fsck 时,我得到了以下信息:
ubuntu@ubuntu:~$ sudo fsck /dev/sdf1
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
/dev/sdf1: clean, 227091/9625600 files, 12789815/38497756 blocks
一毫秒后。很难相信它在一毫秒内就检查完了整个硬盘。
我也不确定是否应该对 sdf1 或整个物理磁盘 sdf 进行 fsck。当我尝试整个驱动器时:
ubuntu@ubuntu:~$ sudo fsck /dev/sdf
fsck 1.41.4 (27-Jan-2009)
e2fsck 1.41.4 (27-Jan-2009)
fsck.ext2: Device or resource busy while trying to open /dev/sdf
Filesystem mounted or opened exclusively by another program?
我不明白,因为似乎没有任何分区被安装(我只是从实时 CD 启动并运行了命令)。
所以我的基本问题是:如何让 fsck(或其他可能更好的工具)花费一毫秒以上的时间来分析我的问题磁盘?
答案1
首先,您说的对,在分区上运行 fsck 是正确的 - fsck 只适用于文件系统,而不是整个磁盘。您可以使用 获取磁盘上所有分区的列表fdisk -l /dev/sdd
。
您的文件系统类型可能是 ext3(大多数 Linux 发行版中的默认类型),这意味着只要其日志是干净的,它通常就会通过 fsck。fsck -f
如上所述,将强制进行全面检查。
但是,如果磁盘上出现读取错误,那么无论多少次 fsck 都无法帮助 dd - 因为 dd 实际上并不关心磁盘的内容。
要让 dd 读取磁盘并在读取错误时继续,请使用dd conv=noerror,sync
,它将在读取错误时继续,并在发生读取错误时将空字节附加到任何块。
完成备份后,您应该运行fsck -f
克隆以使其重新启动并运行。
另一个提示:如果您将分区备份到文件,则可以使用 回送挂载它mount -o loop filename.ext3 /mountpoint
。另外,假设您正在将 200G 分区克隆到 500G 驱动器,然后您可以运行resize2fs /dev/sdx1
(其中 sdx 是您的新驱动器,分区为单个 500G 分区),文件系统将调整为 500G。
最后,如果磁盘状况不佳,导致出现读取错误,我建议您在数据恢复完成之前不要关闭和打开磁盘。在某些故障模式下,磁盘在某个时候会停止旋转或无法被操作系统识别,此时从驱动器中取出数据的成本会非常高。
答案2
这可能与您的情况无关,但我仍然想提一下:
对于低级磁盘检查,您可以使用该badblocks
实用程序。它会检查设备并报告任何坏块(当然,它无法修复任何东西)。它至少对于验证磁盘是否受到物理损坏很有用。
此外,e2fsck
还可以用来badblocks
避免文件系统使用坏块。摘自e2fsck
手册:
-c This option causes e2fsck to use badblocks(8) program to do a read-
only scan of the device in order to find any bad blocks. If any bad
blocks are found, they are added to the bad block inode to prevent
them from being allocated to a file or directory. If this option is
specified twice, then the bad block scan will be done using a non-
destructive read-write test.
答案3
您需要使用 -f 选项来 fsck(即使文件系统看起来很干净也强制检查。)
您应该在单用户模式下运行 fsck。无需实时 cdrom 启动即可轻松执行此操作的一种方法是使用 -F 选项重新启动。
shutdown -rF now