我想安装一张SD卡。插入 dmesg 日志后,我会看到以下内容:
[Thu Oct 25 10:59:44 2018] sd 0:0:0:0: [sdb] 30318592 512-byte logical blocks: (15.5 GB/14.5 GiB)
[Thu Oct 25 10:59:44 2018] sdb: sdb1
看起来不错,但是当我想安装它时,它失败了,使用 command sudo mount /dev/sdb1 /mnt/sdcard
,这是 dmesg 输出:
[Thu Oct 25 10:59:55 2018] FAT-fs (sdb1): error, invalid access to FAT (entry 0x00038a03)
[Thu Oct 25 10:59:55 2018] FAT-fs (sdb1): Filesystem has been set read-only
有人能告诉我出了什么问题吗?我不想格式化该卡,因为我会丢失所有数据。
答案1
阅读 Linux 内核源代码可以<source code root>/fs/fat/fatent.c
发现该消息的措辞可能有些糟糕:它实际上意味着正在访问的 FAT 条目没有通过有效性检查。
您可能想要卸载卡,然后运行fsck.fat -n /dev/sdb1
以评估卡上文件系统的运行状况,然后可能运行fsck.fat -aw /dev/sdb1
以尝试修复它。
在尝试修复文件系统之前,如果其中的文件很重要,您可能需要制作卡内容的映像文件:dd if=/dev/sdb1 of=/some/place/with/plenty/of/space/sdcard.img bs=16k
答案2
我的第一个想法是这可能是由于 SD 卡的锁定机制造成的,但我在 Google 上搜索了一下,听起来这就是当 Linux 尝试从 FAT 分区读取损坏的数据时收到的消息。我会尝试 fsck。如果这不能解决问题,那么您可能别无选择,只能重新格式化。不过,如果 SD 卡确实至少以只读方式安装,那么仍有可能恢复一些数据。