fsck 不会 fsck(无法设置超级块标志)

fsck 不会 fsck(无法设置超级块标志)

在基于 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

在这里,我两次都回答“否”,但是没有任何是/否的顺序不会立即导致相同的结果。

文件系统可以挂载,并且随意检查显示没问题;它在设备中也可以正常工作,这就是根文件系统(实际上它并不是很好,请参阅评论;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)

随后fsck通过清理,可以安装图像,然后fsck -f也通过。

但是创建原始块复制映像的卡上的文件系统仍然存在相同的问题 - 除了systemd-fsck在引导期间发生的情况将文件系统记录为“干净”之外。但随后,正确关闭、取出卡并fsck从另一个盒子中重试会出现相同的错误。

每当原始文件安装在另一台机器上时,系统日志都会记录:

kernel: EXT4-fs (sdc2): 4 orphan inodes deleted
kernel: EXT4-fs (sdc2): recovery complete

因为我已经备份了所有内容,所以我愿意在这里尝试任何事情。我可以简单地忘记这一点,并从明显固定的映像中重新刻录分区,但这似乎不是一个非常令人满意的解决方案,因为这意味着假设 fsck 神秘地无法解决一个看起来很小的问题。

我怀疑这将变成一个“请求官方文件”问题,涉及诸如需要恢复标志(或者只是简单的“这是什么意思?”问题),所以任何沿着这些思路的建议都会受到赞赏。

答案1

我刚刚遇到了同样的问题。经过与维护人员调试问题后e2fsck,我们发现SD卡坏了。它接受写入且没有错误,但实际上并未将数据写入卡。 SD 卡实际上是只读的。

该卡似乎已进入某种故障安全模式,仍然可以读取数据,但无法写入任何内容。

e2fsck消息unable to set superblock flags意味着它尝试写入超级块以将日志标记为已处理,这没有错误,但当它再次读回超级块时,它仍然表明日志需要重播。换句话说,写入超级块的更改并未保存在存储介质上。

我使用的存在此问题的卡是 Samsung Evo 16GB microSD,我提到它只是为了以防万一这是这些卡的常见问题。

我能够通过dd在卡的块 0 处写入 4096 字节来测试这一点/dev/zero,然后我从卡读回,而不是像我应该的那样得到全零,我仍然得到原始的未更改的 ext4 超级块。

我现在正在将数据转移到一张新卡上,然后看看是否可以从三星那里获得更换卡,三星似乎为 SD 卡提供 10 年保修。

更新:三星在同一 Evo 系列中将 16GB 卡更换为 32GB 卡,所以我想我不能抱怨太多!

答案2

我知道这是一个旧线程,但是,我想我会提供一些见解。

这似乎就是 SD 卡自然死亡的方式。 SD 卡可承受的读/写周期数远低于大多数其他被视为“读/写”的介质。当它耗尽时,该卡将进入只读模式,但不会通知您。由于操作系统缓存等,很多东西会认为它们正在写入卡,但什么都不会粘住。

杀死 SD 卡的一个好方法是将其安装为交换分区或读/写密集型分区。你会惊讶地发现这样就能如此快速地杀死一张牌。我发现通过 SD 卡或 USB 拇指驱动器运行 knoppix 只能持续一两个月,具体取决于卡的质量和 knoppix 使用的强度。 (我后来改用 USB SSD 驱动器运行 knoppix,现在已经持续了几年了)。

答案3

对我来说,将该卡与另一个 microSD 转 USB 适配器一起使用后,问题就消失了。然后它与第一个适配器一起工作也很好。我认为就我的情况而言,这是接触不良的问题。

答案4

我已经两次遇到类似的 microSD 问题,结果是 SD 适配器的问题,而不是 microSD 的问题。更改为不同的 SD 适配器,即使第一个适配器与 microSD 是同一品牌,也解决了无法写入超级块标志以及出现 I/O 错误的问题。

相关内容