mkfs -c 如何工作

mkfs -c 如何工作

我的 3 Tb 硬盘有问题。有很多坏块,但仍然有大约 2.6 Tb 可用空间,我想利用它作为垃圾存储(音乐、视频等)。起初我偶然发现了一个人的手册。他将磁盘分成几个分区,然后制作 JBOD(只是一堆磁盘)RAID(如果您有兴趣,有一个链接(俄语): https://habr.com/ru/post/252211)。但是在那篇文章的评论中有人提到,mkfs 本身也可以用 '-c' 键完成同样的操作。现在我想知道,它是如何工作的?是的,有一个手册页,它告诉我们:

-c 在创建文件系统之前检查设备是否有坏块。如果指定该选项两次,则使用较慢的读写测试而不是快速的只读测试。

有一篇 arch wiki 文章讲述了几乎相同的内容。它检查设备是否有坏块,然后呢?互联网上到处都有人说它标记了坏块,但操作系统不使用它们。我该如何检查它?是否有任何实用程序可以显示标记的块以供进一步使用(可能是将来创建分区)?

答案1

您所引用的内容确实如此man mkfs.ext4( ):man 8 mke2fs

-c
在创建文件系统之前检查设备是否有坏块。如果指定此选项两次,则使用较慢的读写测试而不是快速的只读测试。

但还有-l

-l filename
从 filename 读取坏块列表。请注意,坏块列表中的块号必须使用 所用的相同块大小生成mke2fs。因此,-c选项mke2fs是一种更简单且更不容易出错的方法,可以在格式化磁盘之前检查磁盘是否有坏块,因为mke2fs会自动将正确的参数传递给badblocks程序。

让我们来调查一下man 8 badblocks

重要提示:如果要将 的输出badblocks输入到e2fsckmke2fs程序,则必须正确指定块大小,因为生成的块号非常依赖于文件系统使用的块大小。因此,强烈建议用户不要badblocks直接运行,而是使用和程序-c的选项。e2fsckmke2fs

它提到e2fsck(又名fsck.ext4ext4 的情况),所以让我们检查一下man 8 e2fsck[强调我的]:

-c
此选项使e2fsck使用badblocks(8)程序对设备进行只读扫描,以查找任何坏块。如果发现任何坏块,则将其添加到坏块 inode 以防止将其分配给文件或目录。如果指定该选项两次,则将使用非破坏性读写测试进行坏块扫描。

由于和mke2fse2fsck同一工具包的一部分,我预计 -cmke2fs尽管它的描述没有明确说明这一点,但它仍然以相同的方式工作。

然后检查文件系统知道的坏块dumpe2fs。来自man 8 dumpe2fs

-b
打印文件系统中保留为坏的块。

(致谢这个答案)。

请注意,文件系统存储了这些信息。要将其用于未来的文件系统,您需要在销毁当前文件系统之前保存它。如果您更改分区表或为新文件系统选择不同的块大小,则需要重新计算数字。

相关内容