gol*_*cks 18 ext4 fsck sd-card
在基于 SD 卡的设备不正常关机后,我将 SD 卡取出到fsck根文件系统。这导致了以下变化:
e2fsck 1.43.1 (08-Jun-2016)
/dev/sdc2: recovering journal
Superblock needs_recovery flag is clear, but journal has data.
Run journal anyway<y>? no
Clear journal<y>? no
e2fsck: unable to set superblock flags on /dev/sdc2
Run Code Online (Sandbox Code Playgroud)
在这里,我两次都回答“否”,但没有一系列是/否不会立即导致相同的结果。
文件系统可以挂载,随便检查一下就可以了;它在设备中也能正常工作,这就是根文件系统(实际上结果不太好,请参阅评论;tldr 一些无法挽回的损坏目录)。
我dd将分区(8 GB)分配给一个文件,并在其上尝试了 fsck。有趣的是:
e2fsck 1.43.1 (08-Jun-2016)
plush.rootfs: recovering journal
Clearing orphaned inode 18290 (uid=0, gid=0, mode=0100644, size=34096)
Clearing orphaned inode 18270 (uid=0, gid=0, mode=0100644, size=38916)
Clearing orphaned inode 18250 (uid=0, gid=0, mode=0100644, size=1128076)
Clearing orphaned inode 11411 (uid=0, gid=0, mode=0100644, size=293108)
Setting free inodes count to 406127 (was 408580)
Setting free blocks count to 1305622 (was 1347486)
plush.rootfs: clean, 60209/466336 files, 604906/1910528 blocks (check after next mount)
Run Code Online (Sandbox Code Playgroud)
随后fsck通过清洁,可以安装映像,然后fsck -f也通过。
但是创建原始块复制映像的卡上的文件系统仍然存在相同的问题——除了systemd-fsck在引导期间发生的问题将文件系统记录为“干净”。但随后,正确关机、取出卡并fsck从另一个盒子重试会出现相同的错误。
每当原件安装在另一台机器上时,系统日志会记录:
kernel: EXT4-fs (sdc2): 4 orphan inodes deleted
kernel: EXT4-fs (sdc2): recovery complete
Run Code Online (Sandbox Code Playgroud)
既然我都备份了,我愿意在这里尝试任何事情。我可以简单地忘记这一点并从明显固定的映像重新刻录分区,但这似乎不是一个非常令人满意的解决方案,因为这意味着假设 fsck 神秘地无法解决一个看起来很小的问题。
我怀疑这将变成一个关于需要 recovery_flag 之类的“官方文档请求”问题(或者只是简单的“这是什么意思?”问题),因此对这些方面的任何建议表示赞赏。
Mal*_*ous 18
我刚刚遇到了同样的问题。在与e2fsck维护者调试问题后,我们意识到 SD 卡坏了。它接受无错误写入,但实际上并没有将数据写入卡。SD 卡实际上是只读的。
卡似乎进入了某种故障安全模式,数据仍然可以读取,但没有写入。
该e2fsck消息unable to set superblock flags意味着它尝试写入超级块以将日志标记为已处理,这没有发生错误,但是当它再次读取超级块时,它仍然指示需要重放日志。换句话说,写入超级块的更改没有保存在存储介质上。
我正在使用的有这个问题的卡是三星 Evo 16GB microSD,我提到它以防万一这是这些卡的常见问题。
我能够通过使用在块 0 处dd将 4096 字节写入/dev/zero卡上来测试这一点,然后我从卡中读回,而不是像我应该的那样获得全零,我仍然得到了原始未更改的 ext4 超级块。
我现在正在将数据移到新卡上,然后看看我是否可以从三星那里获得更换,三星似乎对 SD 卡提供 10 年保修。
更新:三星在同一个 Evo 系列中用 32GB 的卡替换了 16GB 的卡,所以我想我不能抱怨太多!
小智 10
我知道这是一个旧线程,但是,我想我会提供一些见解。
这似乎是sd卡自然死亡的方式。sd 卡可以承受的读/写循环次数大大低于大多数其他被认为是“读/写”的介质。用完后,卡将进入只读模式,但不会通知您。由于操作系统缓存等,很多东西会认为它们正在写入卡,但没有任何东西会粘住。
杀死 SD 卡的一个好方法是将其安装为交换分区或读/写密集型的东西。你会惊讶于你能如此快速地杀死一张牌。我发现从 sd 卡或 USB 拇指驱动器运行 knoppix 只能持续一两个月,具体取决于卡的质量和 knoppix 的使用强度。(从那以后,我改用已经使用了几年的 USB SSD 驱动器运行 knoppix)。
| 归档时间: |
|
| 查看次数: |
30017 次 |
| 最近记录: |