![`btrfs scrap` 可以记住坏块/扇区吗?](https://linux22.com/image/73785/%60btrfs%20scrap%60%20%E5%8F%AF%E4%BB%A5%E8%AE%B0%E4%BD%8F%E5%9D%8F%E5%9D%97%2F%E6%89%87%E5%8C%BA%E5%90%97%EF%BC%9F.png)
我有一个 USB 拇指驱动器,格式为BTFS格式。但我发现如果我将一个 1 GB 的文件复制到该磁盘上,该文件就会损坏。报道btrfs scrub
称有很多无法纠正的错误。但如果我继续在磁盘上复制更多文件,这些文件似乎没问题。所以我认为磁盘上只有一小部分连续块被损坏。
我想知道是否btrfs scrub
可以清理我的整个驱动器并记住损坏的块并且将来不再使用它们。
答案1
它可能可以,但由于闪存媒体的工作原理,这对您没有帮助。
与可以写入或擦除单个位的硬盘相比,闪存介质可以写入单个位,但只能将它们全部擦除擦除块一次。擦除块的大小可能有所不同,但通常约为 128k。由于如果我们只想更改一个“扇区”(硬盘和操作系统处理的大小单位),则需要擦除和重写大量内容,因此拇指驱动器会将擦除块分成扇区大小的单元。当您更改某些内容时,它会将您刚刚更改内容的扇区标记为“不再使用”,然后将修改后的版本写入其他地方。一段时间后,它会看到擦除块不再有活动扇区,并擦除该块。
这意味着,如果一个扇区损坏,下次写入该扇区时,它将不再损坏,因为它现在将是另一个扇区。
此外,闪存在经过多次写入周期后往往会磨损,此时它将发生故障(具体数量因闪存芯片的质量而异,但很少低于 100000 次)。出于此目的以及擦除块内容所需的额外空间,拇指驱动器具有一些未公布的额外容量;例如,4g 拇指驱动器可能会暴露 4000M,但内部有 4096M,或 4200M 等。当特定的擦除块在过多的写入/擦除周期后开始出现故障时,您的拇指驱动器会将其标记为此类并且不再使用它。它可以这样做一段时间,但最终多余的空间将被用完;此时,当它尝试复制扇区以进行请求的更改时,它将不再找到空扇区,并且只能产生写入错误。
当您的拇指驱动器达到这一点时(正如您的情况一样),就该更换它了;不久之后您就会开始丢失数据(如果还没有发生的话)