Goo*_*bot 4 hard-drive formatting bad-sectors bad-blocks
我有一个 SATA 硬盘,它有坏扇区。我不需要数据,需要格式化硬盘以创建新设备。
我试图用类似的命令修复硬盘问题
fsck.ext4 -p /dev/sda1
Run Code Online (Sandbox Code Playgroud)
但修复这些部门需要很长时间。我格式化了整个硬盘,但仍然有问题。有没有快速格式化硬盘和恢复坏扇区的方法?
不,没有快速的方法。通常,当您的磁盘有一些坏扇区时,您应该使用类似于以下的命令覆盖磁盘的全部内容:
dd bs=512k if=/dev/zero of=/dev/...
这需要一些时间(通常 2-3 小时)。这样做将使您的磁盘有机会处理坏扇区。现代磁盘(在过去约 15 年中制造)在内部处理坏扇区,在写入期间从一组保留的扇区中透明地重新映射这些扇区。所以最后,你应该有一个所有扇区都可用的磁盘。如果磁盘不能进行这种重新映射,通常意味着坏扇区太多,以至于它的保留扇区用完了。这清楚地表明磁盘已达到使用寿命。
HDD 上的坏扇区(扇区是一个古老的术语,现在“块”更常用)意味着一个或多个坏块在磁盘磁表面积上不符合规格。定位这些块的唯一方法是尝试读取硬盘驱动器上的每个块。HDD 很慢,因此需要很多时间。
例如,现代 HDD 的真实世界读取吞吐量约为 130 MB/s,因此现代 4TB 磁盘甚至需要大约 4000000MB / 130MB/s = 8.5 小时才能在没有坏块的情况下读取整个磁盘。具有一个或多个坏块的驱动器将导致驱动器反复尝试重新读取这些块,因此吞吐量将受到很大影响。这将允许您定位导致读取错误的坏块。得到任何现代的硬盘重新映射坏块,需要写东西给那个坏块。
真正测试一块硬盘表面是否工作的唯一方法是读取该块,然后将其写回,然后查看驱动器是否仍然显示该块一切正常。块曾经是 512 字节长,但现代驱动器在内部使用 4KB 块。现代 4TB 驱动器需要测试大约十亿 (1e9) 个 4KB 块。我有没有提到硬盘很慢?
如果您有坏块和任何数据,您真的需要fsck.ext4 -cc. 而那个至少需要一两天左右的时间。这样做fsck.ext4 -c将允许 ext4 避免坏块,但它无法修复驱动器。该-c的选项fsck.ext4,使得它试图读取该分区上的每个块。该-cc选项将使其尝试读取每个块并将相同的内容写回驱动器并检查错误。甚至-cc有时可以修复发生故障的磁盘......但是,没有找到坏块的灵丹妙药。唯一的方法是扫描整个驱动器,大型驱动器会很慢。
由于您不需要任何数据,这样做sudo dd if=/dev/zero of=/dev/sdX bs=4M将允许跳过“读取数据”部分并直接进入“修复块”部分。这仍然需要 8 到 20 个小时才能完成。
请注意,一旦您覆盖坏块,驱动器固件将自动修复坏块。您使用哪种操作系统或工具来覆盖 HDD 上的坏块实际上并不重要。数据也无关紧要。如果驱动器无法修复任何给定的坏块,则该驱动器已完成。这是因为现代硬盘驱动器保留了一些额外的物理块,用于填充逻辑地址空间中的坏块。如果坏块无法修复,那只是因为预留空间中的所有块都已被使用!在这种情况下,驱动器已经出现故障很长时间了。
请注意,您必须使用正确的块大小来修复块。例如,如果您的驱动器使用 4KB 物理块并且仍然允许 512B 逻辑块,则您不能用 512B 逻辑写入覆盖坏块,因为驱动器在技术上会尝试读取真正的 4KB 块,更改您写入的 512B 和重新- 将 4KB 块写回磁盘。显然,如果物理 4KB 块坏了,“读取真正的 4KB”将失败。避免这种情况的方法是在单个 HDD 命令中写入整个 4KB 块,因此不需要从物理磁盘读取任何内容。最后,您必须编写一个正确对齐的 4KB 块来修复给定的坏块。dd上面的命令将始终写入 4MB 块,如果您将整个设备用作of目标(您可以使用 4 KB 的任意倍数进行写入,上面的示例使用 4 MB 来提高性能)。如果您使用单个分区作为目标并且该分区未正确对齐,并且逻辑和物理块大小与驱动器不匹配,则该命令可能仍无法修复坏块。据我所知,这适用于大多数现代 HDD。执行smartctl -x /dev/sdX将提供有关设备的信息sdX。
一如既往地做man fsck.ext4,man dd和man smartctl之前这个东西搞乱。