Linux操作系统如何格式化SD卡并神奇地修复一切?
我有一个运行STM32的FreeRTOS和胖FS。
当我有一个损坏的SD卡和胖-FS不能做任何事情,我通过Linux格式化SD卡,一切都开始工作。
Linux如何格式化SD卡?
FAT说有一个物理错误(驱动程序级别的错误,所以基本上SD内部的uC没有响应我们所期望的)。
发布于 2018-09-21 12:59:26
我有一部旧手机。如果我让它写SD卡,有时它会写坏扇区。我怀疑这是发生在电池是低的,因为手机不能满足标准电气要求的SD卡。
在现代块设备上,一个糟糕的逻辑块可能多次无法读取(校验和不匹配),但是如果您成功地向其写入新内容,则会被“修复”。当我的手机损坏了我的sd卡,我所需要做的就是重新格式化卡片。我甚至不需要重写所有的块(有时被称为“完全格式”)。在重新格式化期间&之后,文件系统将永远不会读取它尚未写入的块(从来没有理由这样做)。
这种做法存在一些风险。这可能是你的设备实际上是永久损坏的,并且问题会在格式化后的一段时间内再次出现。如果这是一个问题,最安全的方法是测试设备或分区之前,以某种方式格式化它。(从历史上看,你应该使用badblocks,但我不知道现在它有多好。)
如果文件的数据块之一是坏的,则可以通过删除或覆盖该文件来恢复。问题是当文件系统的内部结构中有一个不好的块时。通常,文件系统不包括任何将它们重置为默认初始状态的代码。悄悄丢失数据的风险太高了。因此,错误将持续存在。但是,一些文件系统检查程序可能会问您是否要重置坏块。
(Sidenote:具体来说,使用Linux fsck.vfat,我已经拥有了它放弃的文件系统,并且说它还没有实现特定类型的修复。我怀疑Windows版本的内容更全面一些。)
一些文件系统可能支持使用冗余副本恢复某些结构,而不必重置它们。FAT文件系统通常使用两个冗余的FAT来运行,这可以用于恢复,例如在Linux上的fsck.vfat。Ext4倾向于保留大量冗余的“超级块”。
我理解像btrfs和ZFS这样的文件系统可以配置成在不同的设备上保留所有元数据的冗余副本,并且在它们还在运行时进行修复。
[从本评论中扩展:通过内核跟踪来定义失败SD卡的状态? ]
https://unix.stackexchange.com/questions/364409
复制相似问题