fsck:最彻底的磁盘检查选项


12

我有一个已知问题的磁盘(我知道因为当我尝试克隆它时dd gags)。但是当我使用live 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

一毫秒后。很难相信它会在几秒内检出整个硬盘。

我也不确定我是应该fsck'ing sdf1还是整个物理磁盘sdf。当我尝试整个驱动器时:

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(或者一种可能更好的工具)花费超过一毫秒来分析我的问题磁盘?

Answers:


14

首先,您在分区上运行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。

最后,如果磁盘的形状使其出现读取错误,我建议您在完成数据恢复之前避免关闭磁盘。在某些故障模式下,磁盘在某些时候根本不再旋转或无法被操作系统识别,并且此时从驱动器中获取数据变得非常昂贵。


我确实尝试过“dd conv = noerror,sync”,但生成的克隆磁盘无法启动。这是令人沮丧的,因为启动盘运行正常,fscks很好,但我不能克隆到另一个磁盘,因为磁盘有一个坏块(显然没有数据)。我好像被卡住了
弗雷德汉密尔顿2009年

不要忘记可能有其他原因导致磁盘无法启动(不同的磁盘几何和MBR /启动加载程序问题)。如果您可以先确认新磁盘上的文件系统是否正常,那么您可以使用安装CD中的救援模式启动系统,更新GRUB引导程序等。即。首先运行fsck -f / dev / sdx1,然后尝试使用mount / dev / sdx1 / mnt挂载文件系统 - 用适当的驱动器号替换x。
克里斯蒂安2009年

非常好的建议,但是当我在克隆分区上运行fsck -f时,在我承认dd之前,我得到了数百个错误(inode中的非法块,在没有压缩支持的文件系统上设置的压缩位,坏的扩展属性块等)克隆是完全软管...不知道接下来要做什么...我想我会尝试将所有文​​件复制到一个干净的分区......无论如何,谢谢。
弗雷德汉密尔顿2009年

4
使用ddrescue(或dd_rescue + dd_rhelp)比使用dd更好; 它更聪明地处理错误,重试有错误的扇区。 gnu.org/software/ddrescue/ddrescue.html kalysto.org/utilities/dd_rhelp/index.en.html garloff.de/kurt/linux/ddrescue
freiheit

1
root ext2,ext3或ext4分区的最彻底的磁盘检查(如果可能,所有修复都自动完成)执行如下:(1)从应急媒体启动(必须卸载根分区),(2)运行e2fsck -f -cc -D -p。这确实强制检查媒体的非破坏性读写检查并修复可以安全修复的所有发现的问题。2TB硬盘可能需要几天时间......
Mikko Rantalainen 2013年

9

这可能与您的情况无关,但我认为无论如何我都会提到它:

对于较低级别的磁盘检查,您可以使用该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.

另请注意fsck_hfs -s将扫描坏块。
awiebe

5

你想要fsck的-f选项(强制检查,即使文件系统看起来很干净。)

您应该在单用户模式下运行fsck。在没有live cdrom启动的情况下执行此操作的一种简单方法是使用-F选项重新启动。

shutdown -rF now 

谢谢,但有一个问题:如果我使用live CD重新启动-F选项,live CD如何知道它应该运行检查?它是一张CD,它没有我所知道的记忆......
Fred Hamilton

我不认为你需要从live cd那样做。只需从live cd启动并在未安装的分区上运行fsck,并包含-f(强制)选项。或者,您可以使用shutdown -rF从硬盘重新启动。这将在安装文件系统之前强制执行fsck。
理查德霍斯金斯

实际上,它将在单用户模式下执行fsck。我编辑了我的答案。
理查德霍斯金斯

1
-F用于标志shutdown通常不是正式文件(见man shutdownshutdown --help,注意它不存在),所以你不能信任它的工作。有时这是一个无操作。正式扫描根分区的唯一方法是从备用媒体启动。
Mikko Rantalainen 2013年
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.