假设有一个硬盘驱动器/dev/sda
,并且两者:
/dev/sda1
是单身外部4分区占据了整个磁盘,而且大部分数据都是空的。dumpe2fs -b /dev/sda1
输出坏块列表,在本例中输出单个高数b代表靠近末尾的坏块/dev/sda
;b幸运的是,它不属于任何文件。
/dev/sda1
现在需要在, 和gparted
(的开头添加一个交换分区v0.30.0-3ubuntu1) 用于:
- 调整大小(缩小)sda1,这样它会在几 GB 后开始,但在同一位置结束。
- 在收缩留下的间隙中添加交换分区sda1。
这样就gparted
完成了工作,我们dumpe2fs -b /dev/sda1
再次运行。会发生什么?可以...?
- 什么也不输出,这意味着调整大小忘记了坏块。
- 输出b不变。
- 输出乙 + 乙在哪里哦是与刚刚缩小的
/dev/sda1
现在开始的位置相对应的偏移量。
笔记: 为了简化问题,假设有问题的硬盘没有聪明的固件。 (有关固件的评论是题外话。)
答案1
GParted 不考虑任何 ext2/3/4 坏块列表;我通过创建一个带有强制坏块的 ext4 文件系统来检查这一点,然后使用 GParted 移动它。在移动的分区上运行dumpe2fs -b
会显示相同偏移处的坏块。
结果是2,所以被文件系统忽略的坏块不再对应介质上真正的坏块。这意味着文件系统会忽略它可以安全使用的块,并且可能会使用它应该避免的坏块。
在某种程度上,这确实有道理。当 GParted(或任何其他工具)动作一个分区,它不使用特定于文件系统的工具,它移动容器。这通常是有效的,因为文件系统数据与其容器相关。通常,文件系统数据结构不需要因移动而更新。然而,坏块列表描述的功能不随其容器移动...让 GParted 处理这个问题将非常复杂:它不仅必须更新坏块列表本身,还必须将数据移开以便坏块在移动的文件系统中的新位置未被使用。
答案2
坏块不会被删除,因为我已经看到磁盘的克隆在写入新磁盘时读取了坏块。坏块本身已被标记。然后必须重新检查这些坏块并通过修复工具(例如fsck
,ntfsfix
或其他)将其标记为干净。然而,这些是幻象坏块,而不是真正的坏块。然而,这证明了必须修复它们才能将其移除的想法。调整大小不应清除标记,并且该分区的完整格式应为它们创建新的位置标记。至于手术后它会指向哪里我不记得了。然而,正如 agc 所说,这可以进行测试。