我们可以信任e2fsck修复的文件系统中的文件吗?

于尔根

话题

如果文件系统已通过e2fsck成功修复,则可以确保其处于一致(干净)状态。但是,修复后评估文件本身的可靠性并不容易。

这个问题的目标是判断存储在ext2和ext4文件系统中的数据的完整性的标准,这些文件系统在特定故障情况下损坏后就得到了修复。


背景

我在外部USB HDD(即基于磁盘,无闪存)中使用ext2文件系统来备份多台Linux机器。为此,我使用选项rw, relatime(总共)手动安装驱动器,因此不sync使用任何选项。

就在最近,从openSUSE 13.1系统(Linux内核3.11.6-4)进​​行了大备份(几百GB)之后,并且完成了对USB HDD的所有写操作之后,我无法卸载该驱动器:umount命令被阻止,没有返回。相同的情况适用于随后发出的sync命令,该命令进入了不间断的睡眠(ps状态D)。

这是我拔下未释放模块的USB HDD的时候。

此后尝试通过标准方式(pm-utils)关闭机器电源的尝试也陷入了困境。为了使机器停机,我用了SysRq的敬礼reisub但是即使在那儿,请求s(同步)和u(重新挂载只读)也没有成功:根据sysrq.c(sysrq.txt)内核文档,这些请求在它们明确声明are之前没有完成。他们在这种情况下做到了。因此,在SysRq b(重新引导)命中后,确认没有一个已挂载的文件系统被完全卸载,这最终启动了完全重新引导。

e2fsck幸运的是,通过检查所有涉及的文件系统(根分区上的ext4和USB HDD上的ext2),我发现根文件系统是干净的,而USB HDD上的文件系统仅显示了错误的可用块数和可用inode数,可以通过e2fsck进行修复。

此处使用的计算机的Systemd日志未显示与阻止umount和同步相关的任何条目。特别是,没有与IO问题相关的条目。USB拔出事件和除SysRqs之外的其余措施均已正确记录。

badblocks事件发生后,SMART和在USB HDD上执行的测试均未发现任何异常。该驱动器大约有5个月的使用寿命,现在看来可以正常工作。


变化

在过去的几年中,我多次遇到相同的情况,它们使用不同的USB HDD(都不超过16个月),并且在运行不同内核版本的Linux机器上。我治疗的唯一偏差是我有时使用电源按钮而不是SysRq来关闭机器。

在这些事件中的每一个事件中,我都使用来检查所有可能受影响的文件系统(所有ext2和ext4)e2fsck,并找到所有处于以下错误状态之一的文件系统

  1. 清理文件系统。

  2. e2fsck可以通过仅重播日志(ext4)来修复不干净的文件系统。

  3. 文件系统显示了可用块和可用索引节点的错误计数,可以通过e2fsck进行更正。

  4. 包含孤立的inode的文件系统,e2fsck连接到lost + found。

  5. 包含由e2fsck克隆的多声明索引节点(由多个文件声明)的文件系统。


实际问题

受上述情况影响并随后被e2fsck成功修复的ext2或ext4文件系统肯定处于一致(干净)状态。

但是该文件系统中文件的内容和元数据呢?

e2fsck发现的文件系统损坏与数据损坏之间是否存在独特的关联?例如:

如果在文件系统中没有发现错误计数以外的其他损坏,那么实际的文件数据就可以了。

或者:

如果文件系统包含多索取的inode,则至少一个文件的内容已损坏。

还是相反:文件系统和文件数据是相互独立的,只要它们不能从一个对另一个的损害中得出结论-至少在没有确切了解造成设备通信级别损害的原因的情况下?

在后一种情况下,即使后来发现文件系统是干净的,所描述的情况也可能损坏了文件内容。正确的?

是否有任何经验值或合理的准则可用来评估文件的完整性,具体取决于e2fsck发现的文件系统错误?

在这种情况下,Gills对“如何测试由fsck完成的文件系统更正”答案是很好的读物。

ext4文件系统内核文档中的“数据模式”部分也介绍了文件系统与数据完整性之间的区别对于后者,我得到了Mikel的出色回答:“日记文件系统是否可以保证在电源故障后不会损坏?” ,这也与此主题非常相关。


自己的猜测和影响

Systemd提供服务单元(模板)systemd-fsck @ .service,默认情况下,它会passno在启动时“自定义”在/ etc / fstab中选择的文件系统根据-p手册页e2fsck(8)中对选项的描述,自定义“自动修复可以在没有人工干预的情况下安全修复的任何文件系统问题”。不幸的是,该描述未指定“安全”是仅指文件系统一致性,还是还包括文件的内容和元数据。

但是,由于此Systemd服务以对用户完全透明的方式启动整理,因此至少有一些专家充分信任相应文件系统修复的结果。

因此,基于模糊的感觉(!),我想说的是,对于干净的文件系统(上述错误状态1),可以通过仅重播日志来修复(错误状态2),因此可以安全地假设文件本身即使发生此类事件也不会损坏。

另一方面,对于处于错误状态5的文件系统,我将引用备份。

那么,为什么这么大惊小怪呢?同意:对于标准的家庭文件系统或根文件系统,我将其内容与最新备份进行比较。但是在这种情况下,这些备份本身在受影响的USB HDD上。如果对它们的完整性有疑问,则需要立即再次备份多台计算机。此外,这将提供较旧的备份,这些备份是在该驱动器上的循环备份策略期间累积的,否则可以用作对应数据的快照。 , 无意义的。

因此,对于在受上述情况影响后修复的ext2或ext4文件系统上,我们可以信任多远的数据拥有一些合理且可靠的标准将非常有用。


进一步的发现

为了自己解决该问题,我在《 Oracle Sun系统管理指南》中找到了有关fsck的出色章节尽管它描述了fsck的USF版本,但一般思想也适用于e2fsck。但是,这个非常详细的文档也侧重于fsck和文件系统本身的用法,而不是考虑后者的有效负载。

“ fsck -p(preen)在ext4上做什么”的回答,Noah发布了一个文件系统错误列表,这些文件系统错误可以通过fsck整理ext4文件系统来自动处理,而那些不能解决。最好有这样一个文件系统错误列表,它指出其中哪些还暗示着文件数据损坏,哪些不暗示—当然,只有在存在这种关联的情况下...

在他的回答中,Michael Prokopec提到了写入缓存对这个问题的重要性。在这方面,我在高个子杰夫(Tall Jeff)回答发现:“可以正确处理写缓存的SATA磁盘?” 默认情况下,至少大多数SATA驱动器已启用写缓存。但是,根据同一篇文章,驱动器试图尽快刷新这些缓存。但是当然不能保证...

迈克尔·普罗科佩克
  • 只要出现问题,系统就不会执行大量磁盘密集型工作。
  • 如果没有将驱动器设置设置为在写入之前缓存数据。

您可以合理地确定,如果所有检查都通过,则数据是可信赖的。但是,根据驱动器的使用年限和用例,我会将驱动器克隆到较新的驱动器上,然后使用新驱动器。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

挂载Linux文件系统时是否可以运行fsck或e2fsck?

来自分类Dev

我们可以在文件中存储多个对象吗?

来自分类Dev

我们可以在文件中存储多个对象吗?

来自分类Dev

我们可以从虚拟PC保存文件吗

来自分类Dev

我们可以从 sikuli 创建独立的 exe 文件吗?

来自分类Dev

我们可以在Tesseract 3.02中使用受Tesseract 2.x训练的文件吗

来自分类Dev

我们可以将“ cd ..”路径存储在bash文件中的变量中吗?

来自分类Dev

我们可以将DH参数附加到Apache 2.2.29中的证书文件中吗?

来自分类Dev

我们可以从CDN引用角度2文件,而不是从nodejs安装它们吗?

来自分类Dev

我们可以从项目的.git文件夹中获取源代码吗

来自分类Dev

我们可以直接在JSF xhtml文件中访问会话范围变量吗

来自分类Dev

我们可以从SSRS订阅报告中创建一个只读文件吗

来自分类Dev

Xamarin iOS:我们可以在XIB文件中设置stoardboardid吗?

来自分类Dev

我们可以在Android VideoView中播放.swf文件吗?

来自分类Dev

我们可以控制.dockerignore文件中内容的区分大小写吗?

来自分类Dev

我们可以在ruby文件的注释中添加特殊字符吗?

来自分类Dev

我们可以查看Linux中的signal.h文件的源代码吗

来自分类Dev

我们可以在Nginx Locaton中配置txt文件吗

来自分类Dev

将Python集成到Java中-我们可以直接调用.py文件吗?

来自分类Dev

Xamarin iOS:我们可以在XIB文件中设置stoardboardid吗?

来自分类Dev

我们可以将文件保存在RAM中吗?

来自分类Dev

我们可以使用属性文件中的表达式获取属性吗

来自分类Dev

我们可以在 Chrome Storage 中存储文件而不是字符串吗

来自分类Dev

magento中/ app / code / local /文件夹的用途是什么?我们可以把我们的核心php文件放进去吗?

来自分类Dev

CentOS / RHEL 系统上的 e2fsck 和 e4fsck 有什么区别吗?

来自分类Dev

我们可以在传统模式的系统中安装 3 个操作系统吗?

来自分类Dev

我们可以在空手道功能文件中调用其他TestRunner文件吗

来自分类Dev

Android:我们可以在无根设备中使用su命令从/ data / data /文件夹中读取文件吗

来自分类Dev

我们可以将文件名修改后的文件添加到zip存档中吗

Related 相关文章

  1. 1

    挂载Linux文件系统时是否可以运行fsck或e2fsck?

  2. 2

    我们可以在文件中存储多个对象吗?

  3. 3

    我们可以在文件中存储多个对象吗?

  4. 4

    我们可以从虚拟PC保存文件吗

  5. 5

    我们可以从 sikuli 创建独立的 exe 文件吗?

  6. 6

    我们可以在Tesseract 3.02中使用受Tesseract 2.x训练的文件吗

  7. 7

    我们可以将“ cd ..”路径存储在bash文件中的变量中吗?

  8. 8

    我们可以将DH参数附加到Apache 2.2.29中的证书文件中吗?

  9. 9

    我们可以从CDN引用角度2文件,而不是从nodejs安装它们吗?

  10. 10

    我们可以从项目的.git文件夹中获取源代码吗

  11. 11

    我们可以直接在JSF xhtml文件中访问会话范围变量吗

  12. 12

    我们可以从SSRS订阅报告中创建一个只读文件吗

  13. 13

    Xamarin iOS:我们可以在XIB文件中设置stoardboardid吗?

  14. 14

    我们可以在Android VideoView中播放.swf文件吗?

  15. 15

    我们可以控制.dockerignore文件中内容的区分大小写吗?

  16. 16

    我们可以在ruby文件的注释中添加特殊字符吗?

  17. 17

    我们可以查看Linux中的signal.h文件的源代码吗

  18. 18

    我们可以在Nginx Locaton中配置txt文件吗

  19. 19

    将Python集成到Java中-我们可以直接调用.py文件吗?

  20. 20

    Xamarin iOS:我们可以在XIB文件中设置stoardboardid吗?

  21. 21

    我们可以将文件保存在RAM中吗?

  22. 22

    我们可以使用属性文件中的表达式获取属性吗

  23. 23

    我们可以在 Chrome Storage 中存储文件而不是字符串吗

  24. 24

    magento中/ app / code / local /文件夹的用途是什么?我们可以把我们的核心php文件放进去吗?

  25. 25

    CentOS / RHEL 系统上的 e2fsck 和 e4fsck 有什么区别吗?

  26. 26

    我们可以在传统模式的系统中安装 3 个操作系统吗?

  27. 27

    我们可以在空手道功能文件中调用其他TestRunner文件吗

  28. 28

    Android:我们可以在无根设备中使用su命令从/ data / data /文件夹中读取文件吗

  29. 29

    我们可以将文件名修改后的文件添加到zip存档中吗

热门标签

归档