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


12

在基于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从另一盒中再次尝试会出现相同的错误。

每当将原件安装在另一台计算机上时,syslog都会指出:

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

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

我怀疑这将变成一个关于诸如“ recovery_flag ”之类的东西的“要求提供官方文件”的问题(或者仅仅是“这是什么意思?”问题),因此,沿用这些建议。


内核日志中有关设备错误的任何内容?这将不是SD卡突然第一次变为只读状态。
Mark Plotnick

@MarkPlotnick不,它是可写的。问题重新出现之前,日志中的最后一件事是systemd重新启动(设备无头,经过很长的时间后变得无响应apt upgrade)。之后,它会记录正常的启动-并且systemd-fsck会说“ clean”(我将在其中进行编辑),但是在该上下文之外尝试fsck仍然失败。
goldilocks

您在副本上的fsck清除了4个inode,但通过将可用inode数减少了2453个inode来解决了该问题。那是巨大的。检查设备电源是否足够。
meuh

@meuh我注意到,每当它安装在大盒syslog上时,它就会引用这4个inode(在上面进行编辑)。fs上的某些东西确实被弄乱了(更新了内核模块!\ O /),所以我烧了一张新卡,并且会挂在旧卡上,以防万一我有机会进一步研究。这并不是全新的东西-一款没有商标的便宜货10类卡,(轻载)使用24/7可能会使用几年,所以...我认为没有任何方法可以验证SD卡是否已彻底失效,但我想可能就是那样。电源应该可以,但在某些情况下可能会变幻莫测。
goldilocks

2
当本应用来解决问题的工具由于问题的性质而无法正常工作时,它真的不是很烂吗?结论:该工具不好,应该修复。
Marc.2377'7

Answers:


11

我只是遇到了同样的问题。在与e2fsck维护人员一起调试问题之后,我们意识到SD卡已损坏。它正在接受写入而没有错误,但是实际上并没有将数据写入卡中。SD卡实际上是只读的。

似乎卡已进入某种故障保护模式,在该模式下仍可以读取数据,但不写入任何数据。

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

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

通过使用dd/dev/zero块0向卡中写入4096字节,然后从卡中读取回去,而不是像我应该得到的全零一样,我仍然得到了原始的不变的ext4超级块,从而进行了测试。

我现在正在将数据移动到新卡上,然后查看是否可以从三星获得替代品,三星似乎为SD卡提供10年保修。

更新:三星在同一Evo系列中用32GB的存储卡替换了16GB的存储卡,所以我猜我不能抱怨太多!


“仍然可以在其中读取数据,但没有写入任何内容” -> fs是可写的。
goldilocks

@goldilocks:听起来您的fs超级块可能不是可写的。另外,由于缓存,我的fs似乎可写,只是在卸载和重新安装后,我发现所有更改都丢失了。
Malvineous

这不是由于缓存造成的幻觉。
goldilocks

7

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

这似乎是SD卡自然死亡的方式。SD卡可承受的读/写周期数大大低于大多数其他被视为“读/写”的媒体。用完该卡后,该卡将进入只读模式,但不会通知您。由于操作系统缓存等原因,很多事情会认为它们正在向卡中写入数据,但是没有任何痕迹。

杀死SD卡的一种好方法是将其安装为交换分区或需要大量读/写操作的东西。您会以如此快的速度杀死卡,这会让您感到惊讶。我发现用SD卡或USB拇指驱动器运行knoppix只能持续一两个月,具体取决于卡的质量和knoppix的使用强度。(从那以后,我已经转而使用已经持续了两年的USB SSD驱动器运行knoppix)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.