如何快速格式化有坏扇区的硬盘(在 Linux 中)?

如何快速格式化有坏扇区的硬盘(在 Linux 中)?

我有一个 SATA 硬盘,它有坏扇区。我不需要数据,需要格式化硬盘来创建一个新设备。

我尝试使用以下命令修复硬盘问题

fsck.ext4 -p /dev/sda1

但修复扇区需要很长时间。我格式化了整个硬盘,但问题仍然存在。有没有快速格式化硬盘并恢复坏扇区的方法?

答案1

不,没有快捷方法。通常,当您的磁盘上有一些坏扇区时,您应该使用类似以下命令覆盖磁盘的全部内容:

dd bs=512k if=/dev/zero of=/dev/...

这需要一些时间(通常需要 2-3 小时)。这样做将使您的磁盘有机会处理坏扇区。现代磁盘(在过去约 15 年内制造)在内部处理坏扇区,在写入期间透明地从一组保留扇区重新映射这些扇区。因此,最终您应该拥有一个所有扇区都可用的磁盘。如果磁盘无法进行这种重新映射,通常意味着坏扇区太多,以至于用完了保留扇区。这清楚地表明磁盘已达到使用寿命。

答案2

硬盘上的坏扇区(扇区是一个旧术语,如今更常用的是“块”)意味着一个或多个坏块在磁盘磁性表面区域上超出规格。找到这些块的唯一方法是尝试读取硬盘上的每个块。硬盘速度很慢,因此这将花费大量时间。

例如,现代 HDD 的实际读取吞吐量约为 130 MB/s,因此现代 4TB 磁盘需要大约 4000000MB / 130MB/s = 8.5 小时才能读取一次没有坏块的整个磁盘。具有一个或多个坏块的驱动器将导致驱动器反复尝试重新读取这些块,因此吞吐量将受到很大影响。这将允许您定位导致读取错误的坏块。要让任何现代 HDD 重新映射坏块,都需要写入某物坏块。

真正测试硬盘表面块是否正常工作的唯一方法是读取该块,然后将其写回,然后查看驱动器是否仍然显示一切正常对于该块。块曾经是 512 字节长,但现代驱动器内部使用 4KB 块。现代 4TB 驱动器需要测试大约十亿 (1e9) 个 4KB 块。我有没有提到 HDD 很慢?

如果您有坏块和任何数据,您确实需要fsck.ext4 -cc。 并且这至少需要一两天的时间。 这样做fsck.ext4 -c将允许 ext4 避免坏块,但无法修复驱动器。 选项-c使其fsck.ext4尝试分区上的每个块。该-cc选项将使其尝试每个区块和将相同的内容放回驱动器并检查错误。-cc有时,即使是出现故障的磁盘也可以修复……但是,没有灵丹妙药可以找到坏块。唯一的方法是扫描整个驱动器,而对于大型驱动器,速度会很慢。

自从不需要任何数据,这样做sudo dd if=/dev/zero of=/dev/sdX bs=4M可以跳过“读取数据”部分并直接进入“修复块”部分。这仍然需要 8-20 小时才能完成。

请注意,一旦您覆盖坏块,驱动器固件将自动修复坏块。使用哪种操作系统或工具覆盖硬盘上的坏块实际上并不重要。数据也不重要。如果驱动器无法修复任何给定的坏块,则该驱动器已完成。这是因为现代硬盘驱动器保留了一些额外的物理块,用于填充逻辑地址空间中的坏块。如果坏块无法修复,那只是因为保留空间中的所有块都已被使用!在这种情况下,驱动器已经出现故障很长时间了。

请注意,您必须使用正确的块大小来修复块。例如,如果您的驱动器使用 4KB 物理块,并且仍然允许 512B 逻辑块,则您无法使用 512B 逻辑写入覆盖坏块,因为驱动器在技术上将尝试读取真正的 4KB 块,更改您写入的 512B,然后将 4KB 块重新写入磁盘。显然,如果物理 4KB 块坏了,“读取真正的 4KB”将失败。避免这种情况的方法是使用单个 HDD 命令写入整个 4KB 块,这样就不需要从物理磁盘读取任何内容。最后,您必须写入正确对齐的 4KB 块来修复给定的坏块。dd上面的命令将始终写入 4MB 块,如果您使用整个设备作为目标,这些块将正确对齐of(您可以使用 4 KB 的任意倍数进行写入,上面的示例使用 4 MB 来提高性能)。如果您使用单个分区作为目标,并且该分区未正确对齐,则如果驱动器的逻辑和物理块大小不匹配,该命令可能仍无法修复坏块。据我所知,大多数现代硬盘驱动器都是如此。执行smartctl -x /dev/sdX将提供有关设备的信息sdX

与往常一样,在弄乱这些东西之前,请先执行man fsck.ext4man dd然后。man smartctl

答案3

首先,理论上,坏扇区意味着硬盘的某些部分会永久损坏。因此,如果您打算在不久的将来使用此驱动器来存储重要数据,也许应该重新考虑这一点。坏扇区增加的可能性很大。据我所知,没有真正的方法可以真正修复坏扇区。只能防止它们被使用。此外,您需要记住,文件系统可能写在分区中。要查看分区列表,请使用fdisk -l 命令.然后你可以使用e2fsck -c 命令防止将坏块分配给文件或目录。

答案4

badblocks -wsv -o /root/<badblocks.txt> /dev/<device>

mkfs.<filesystem-type> -l /root/<badblocks.txt> /dev/<device>

相关内容