手动将 ext4 块标记为坏块,无需尝试读取/写入

手动将 ext4 块标记为坏块,无需尝试读取/写入

我有一个 10 年前的 320 Gb HDD,我把它用作外置驱动器,它陪伴我度过了这 10 年的大部分时间。不用说,它经受住了多次跌落(包括运行时的跌落),并且出现了一些坏扇区。当我真正开始出现读取错误时,不仅仅是聪明的扇区重定位警告,我从中移走了所有重要文件(用于ddrescue某些文件)。当然,我不再信任这个驱动器,但我仍然想用它来复制一次并保留一些电影/FLAC,以释放笔记本电脑 SSD+HDD 上的一些空间,只要外部驱动器仍然有效。我不在乎丢失部分或全部这些文件,因为我要么在家里有备份,要么可以轻松重新下载。

问题是,如果我格式化此驱动器并开始将文件复制到那里,大约 25% 的地方会出现写入失败,需要拔下 USB 电缆(^C 是不够的!),badblocks在读取和写入模式下都会发生同样的情况。在使用“from”和“to”参数进行一些操作后badblocks,我发现驱动器的 90% 以上是正常的,并且基本上有 3 个坏块区域。一个简短的脚本,我得到了一个带有块号的文本文件(是的,我没有忘记-b 4096badblocks,覆盖这些区域,周围有很多额外的空间以确保安全。但是当我这样做时e2fsck -l badblocks.txt,它仍然挂起!似乎它无论如何都在尝试读取这些坏块,而不仅仅是将其标记为坏块并忘记。还有其他方法可以解决这个问题吗?或者也许是其他文件系统(考虑过 FAT,但我看不到任何方法可以输入badblocks.txtfsck.vfat?或者 4 个单独的分区覆盖“好”区域是这种情况的最佳解决方案?

更新:一些引述,man使情况更加清楚

man e2fsck

-i input_file Read a list of already existing known bad blocks. Badblocks will skip testing these blocks since they are known to be bad.

因此,badblocks承诺跳过列出的块(并且它确实会跳过,因为它没有挂起所有可疑范围badblocks.txt!)

man badblocks

-l filename Add the block numbers listed in the file specified by filename to the list of bad blocks. The format of this file is the same as the one generated by the badblocks(8) program.

没有人保证它不会尝试可以访问这些块。但它到底为什么要访问它们呢?

Note that the block numbers are based on the blocksize of the filesystem. Hence, badblocks(8) must be given the blocksize of the filesys‐ tem in order to obtain correct results. As a result, it is much simpler and safer to use the -c option to e2fsck, since it will assure that the correct parameters are passed to the badblocks program.

我很高兴,但它挂在第一个坏块上。另外,-c-l- 因此,我要么扫描磁盘,要么手动标记坏扇区。但是,为什么如果我选择后者,它仍然想要访问这些所谓的“坏”扇区,这让我无法理解......

答案1

对磁盘进行坏块处理的正确方法是:

sudo e2fsck -fck /dev/sdc1# 只读测试

或者

sudo e2fsck -fcck /dev/sdc1# 非破坏性读写测试(受到推崇的

-k 很重要,因为它会保存之前的坏块表,并将任何新的坏块添加到该表中。如果没有 -k,您将丢失所有之前的坏块信息。

-fcck 参数...

   -f     Force checking even if the file system seems clean.

   -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 direc‐
          tory.  If this option is specified twice,  then  the  bad  block
          scan will be done using a non-destructive read-write test.

   -k     When combined with the -c option, any existing bad blocks in the
          bad blocks list are preserved, and any new bad blocks  found  by
          running  badblocks(8)  will  be added to the existing bad blocks
          list.

相关内容