如果硬盘坏扇区发生在文件系统/home/user/me
的元数据中ext4
,是否意味着所有子目录的数据丢失?
背景:
我知道许多用户对 ext4 文件系统感到满意,甚至不愿意更换为“最近”开发的替代方案(例如 BTRFS),声称数据丢失的风险增加。事实上,当考虑到 ext4 的代码在今天左右时,可以找到一些结果虫子说话。
通过这个介绍,我的问题是:
ext4
文件系统对块设备坏扇区的抵抗力是多少?坏扇区可能会吞噬 4K 字节,我想如果这些 4K 碰巧吞噬了目录结构(即/home/user/me
目录)中高层的一些目录信息,这将“造成严重破坏”。
我知道超级块(更基本的信息源在 ext4 中以冗余形式保存,所以我想象一个坏块在那里可以修复,但我不确定它是否会被自动检测)
所以我的问题是:ext4 能否抵抗元数据中丢失坏块的情况?
我知道数据/文件内容中的坏块总是意味着丢失那些 512/4K 扇区(但是我使用 parchive 作为补救措施)。
答案1
对此事进行一番调查后“如果ext4
可以处理来自块设备的读取错误”我的初步结论是:ext4 中仅存在部分冗余
以下是我“调查”的ext4
“安全特征”的一些发现(基于Ext4 维基和
“EXT4 文件系统中的索引节点结构”)
- 除了少数例外情况,例如内联数据或者内联数据
ext4
分别存储文件内容“数据块”和文件系统“元数据块”。据我所知,ext4
仅需要对后者进行一些维修/冗余。 - 元数据的修复/冗余依赖于a) 2010年新引入/添加的校验和功能b) 拥有额外的副本关键元数据
- 这样的 ”关键元数据“(在块设备的不同部分的意义上)是。
- 超级
ext4
街区 - 的信息
block group descriptors
。
- 超级
- 校验和保护超级块、多重挂载保护、扩展属性、目录条目、HTREE 节点、扩展、索引节点和组描述符。虽然范围(因此受到保护的新
ext4
功能部分取代了旧的间接块寻址(IBA)),但旧的 IBA 块却不受保护,如下所述:请注意,既没有幻数也没有校验和来提供任何级别的信心,表明 [IBA] 块没有充满垃圾。
ext4 可以从不可读的磁盘扇区 (512/4K) 恢复什么
- 损失超级街区和块组描述符,其冗余副本存储在磁盘上的所有/或某些特定块组中。
- 由于不可读扇区而丢失目录条目并不意味着无法访问,而且还意味着目录中存储的文件内容丢失(仅丢失文件名)。这些文件(包括子目录)仍然可以通过其
filespec
<inode-number>
indebuge2fs
. - 的零件丢失
inode table
。中的每个条目索引节点表(被分割的表和被写入形成磁盘ext4
布局的块组的部分)占用(填充)256字节。因此,一个不可读的扇区应该意味着仅丢失 2 到 16 个文件。另外随着校验和功能 inode 表中的任何损坏即使不一定可以纠正,也应该是可以纠正的,但不要忽视。
什么是坏扇区引起的麻烦ext4
似乎无法防范
- 不重要的元数据,包括索引节点、目录条目、扩展区,IBA 不受保护。
- 索引节点:正如前面提到的,inode 占用 256 字节并且是构成文件数据的块的核心句柄,这意味着失去对 2 至 16 个文件的访问权限(主要与文件大小无关)。
- 目录条目:如果由于坏扇区而丢失,则意味着内部所有文件的文件路径将丢失文件名部分。一方面,坏扇区的大小为 512 或 4K 字节,目录散列功能占用的文件名和空间会影响丢失的程度。另外,据我了解,目录散列本质上提供了冗余(但我不能保证这一点)。
- 范围:范围树中丢失部分信息,就像 inode 本身的丢失一样,会影响对构成文件内容的数据块的访问,因此大约意味着丢失 1 个文件。
- IBA 块:(参见范围)+ 如前所述,还将遭受部分破坏的增加的脆弱性(但这不是问题的主要焦点)。
另外使用的方法
为了测试和证明ext4
磁盘布局的一些列举的挑战(关于其对坏扇区的抵抗力),以下工具很方便
debugfs <blockdev>
它允许通过 filespec 访问文件(文件路径,或者在出现问题时通过 inode 编号< >
)truncate
、dd
、losetup
、mount
和mkfs.ext4
创建ext4
要使用的文件系统。dumpe2fs
,tune2fs
提供信息dm-setup
组装一个模拟读取错误的虚拟块设备,如下所示:$> dmsetup 创建 badsectordevice << EOF 0 2902 线性 /dev/loop1 0 2902 2 错误 2904 17576 线性 /dev/loop1 2904 EOF
其中示例显示块设备扇区为 512,ext4
块大小为 1024,因此 LBA 扇区 2902,2903 不可读。