fsck -p(preen)在ext4上做什么?


16

我正在阅读有关文件系统修复的博客文章,作者发表了一个很好的问题…… fsck -p应该自动修复较小的错误,而无需人工干预。但是,当被告知要整理文件系统时,它将究竟能解决什么问题?它会解决哪些错误,什么会导致它停止并告诉用户他或她必须交互式运行fsck?有某种清单吗?

我一直在Google搜索,发现的只是手册页,手册页并没有真正告诉您-p将解决的问题或触发动手操作的标志。我对ext4文件系统特别感兴趣。

Answers:


18

您问题的答案e2fsck/problems.ce2fsprogs源代码文件中。寻找PR_PREEN_OK标志应该会让您入门。

由于可能会出现多种不同的错误情况,因此涉及更多的完整错误处理,因此,如果您担心特定情况,建议您仔细阅读代码。但是,以下列表是从注释中提取到错误条件的,应该使您大致了解preen-mode的影响。

-p指定该标志时,当前会自动处理以下错误/警告:

  • 重新定位提示
  • 日志索引节点无效
  • 日志超级块已损坏
  • Superblock has_journal标志已清除但有日志
  • 设置了超级块的needs_recovery标志,但不存在日志
  • 文件系统修订版为0,但设置了功能标志
  • 外部超级块的超级块提示
  • 组描述符N标记为未初始化,未设置功能。
  • N组块位图未初始化,但正在使用inode位图。
  • 组描述符N具有无效的未使用的inode计数。
  • 最后一个组块位图未初始化。
  • 设置了test_fs标志(并且ext4可用)
  • 上次安装时间是在将来(有预算)
  • 上次写入时间是在将来(有预算)
  • 块组校验和(闩锁问题)无效。
  • 根目录已设置dtime
  • 保留的inode模式错误
  • 删除的inode的dtime为零
  • 使用了Inode,但设置了dtime
  • 零长度目录
  • Inode的i_size不正确
  • Inode的i_blocks不正确
  • 组中的坏超级块
  • 组中的坏块组描述符
  • 无故封锁要求
  • 为重新定位元数据分配块时出错
  • 重定位过程中错误分配块缓冲区
  • 将元数据组信息从X重定位到Y
  • 将元数据组信息重定位到X
  • 重定位过程中阻止读取错误
  • 重定位过程中阻止写错误
  • 在设备或套接字索引节点上设置的不可变标志
  • 设备,fifo或套接字inode的非零大小
  • 文件系统修订版为0,但设置了功能标志
  • 日志索引节点未使用,但包含数据
  • 日记有错误的模式
  • 在非HTREE文件系统上设置INDEX_FL标志
  • 在非目录上设置INDEX_FL标志
  • HTREE目录中的无效根节点
  • HTREE目录中不受支持的哈希版本
  • HTREE根节点中的不兼容标志
  • HTREE太深
  • 无效的inode-> i_extra_isize
  • 无效的ea条目-> e_name_len
  • 无效的ea entry-> e_value_offs
  • 无效的ea条目-> e_value_block
  • 无效的ea条目-> e_value_size
  • 无效的ea条目-> e_hash
  • 索引节点缺少EXTENTS_FL,但是一个范围索引节点
  • Inode不应设置EOFBLOCKS_FL
  • 目录条目已删除或未使用的inode
  • 未设置目录文件类型
  • 在文件系统上设置的目录文件类型
  • 无效的HTREE根节点
  • 无效的HTREE限制
  • 无效的HTREE计数
  • HTREE内部节点表中的哈希值乱序
  • 在设置了_INODE_UNINIT的组中找到了Inode
  • 在未使用的i节点组中找到i节点
  • i_blocks_hi应该为零
  • / lost + found找不到
  • 未连接的零长度索引节点
  • Inode引用计数错误
  • 未设置inode位图末尾的填充。
  • 未设置块位图末尾的填充。
  • 块位图差异标头
  • 块未使用,但已在位图中标记
  • 已使用块,但未在位图中标记为已使用
  • 块位图差异结束
  • Inode位图差异标头
  • 未使用Inode,但已在位图中标记
  • 使用了Inode,但未在位图中标记为使用
  • Inode位图差异结束
  • 可用的inode导致组错误
  • 目录计入组错误
  • 可用的i节点计数错误
  • 空闲块计入组错误
  • 空闲块计数错误
  • 块范围未使用,但已在位图中标记
  • 已使用块范围,但未在位图中标记为已使用
  • 未使用Inode范围,但已在位图中标记
  • 使用的Inode范围,但未在位图中标记为使用
  • 正在使用第N组,但该组已标记为BLOCK_UNINIT
  • 正在使用第N组inode,但该组标记为INODE_UNINIT
  • 如果设置了E2F_FLAG_JOURNAL_INODE标志,则重新创建日记帐

即使-p设置了标志,以下错误条件也会导致非交互式fsck进程中止:

  • 阻止位图不在组中
  • Inode位图不在组中
  • Inode表不在组中
  • 文件系统大小错误
  • 超级块中的inode计数不正确
  • 赫德不支持文件类型功能
  • 日志具有未知的超级块类型
  • 询问我们是否应清除日记帐
  • 日记超级块具有未知的只读功能标志集
  • 日志超级块具有未知的不兼容功能标记集
  • 日记的版本号不受支持
  • 问我们是否应该继续运行日记
  • 不带resize_inode的保留块
  • 未启用Resize_inode,但是resize inode不为零
  • 调整inode大小无效
  • 上次安装时间是将来的时间
  • 上次写入时间是将来的时间
  • 组描述符N校验和无效。
  • 根目录不是索引节点
  • 块位图与其他一些fs块冲突
  • Inode位图与其他fs块冲突
  • Inode表与其他一些fs块冲突
  • 块位图在坏块上
  • 索引节点位图处于不良状态
  • inode中的非法块号
  • 块号与fs元数据重叠
  • Inode具有非法块(闩锁问题)
  • inode中的坏块太多
  • 坏块inode中的非法块号
  • 坏块inode包含非法块(闩锁问题)
  • 坏块用作坏块间接块
  • 无法解决不一致提示
  • 主块提示错误
  • 禁止消息提示
  • 文件系统不支持在i节点上设置的虚幻标志
  • 文件系统不支持在索引节点上设置的压缩标志
  • 处理属于孤立链接列表的inode
  • 处理属于损坏的孤儿链表的一部分的inode(闩锁问题)
  • 读取扩展属性块时出错
  • 无效的扩展属性块
  • 扩展属性引用计数不正确
  • 不支持多个EA块
  • 错误EA分配冲突
  • 扩展属性名称错误
  • 扩展属性值错误
  • 索引节点太大(闩锁问题)
  • 目录太大
  • 常规文件太大
  • 符号链接太大
  • 坏块具有与文件系统块冲突的间接块
  • 调整索引节点大小失败
  • inode似乎是目录
  • 读取范围树时出错
  • 无法扩展范​​围
  • 范围不好的起点
  • 范围超出文件系统
  • 在非扩展文件系统上设置了EXTENTS_FL标志
  • inode具有范围,超级块缺少INCOMPAT_EXTENTS功能
  • 快速符号链接已设置EXTENTS_FL
  • 范围故障
  • Inode的扩展区节点无效
  • 克隆重复/坏块?
  • “。”的inode号错误。
  • 目录条目的索引节点号错误
  • 指令条目链接到“。”
  • 目录入口指向现在位于错误块中的inode
  • 目录条目包含指向目录的链接
  • 目录条目包含指向根目录的链接
  • 目录条目名称中包含非法字符
  • 失踪 '。' 在目录inode中
  • 目录索引节点中缺少“ ..”
  • 目录inode中的第一项不包含“。”
  • 目录inode中的第二个条目不包含“ ..”
  • i_faddr应该为零
  • i_file_acl应该为零
  • i_dir_acl应该为零
  • i_frag应该为零
  • i_fsize应该为零
  • 索引节点模式错误
  • 目录已损坏
  • 文件名太长
  • 目录索引节点缺少块(空洞)
  • '。' 不是NULL终止
  • “ ..”不为NULL终止
  • 非法字符设备索引节点
  • 非法块设备索引节点
  • 重复的“。” 条目
  • 双重输入
  • 最终rec_len错误
  • 读取目录块时出错
  • 写入目录块时出错
  • “。”的目录条目 大。分裂?
  • FIFO非法inode
  • 非法的套接字inode
  • 目录文件类型不正确
  • 目录文件名为空
  • 无效的符号链接
  • i_file_acl(扩展属性块)错误
  • 文件系统包含大文件,但在sb中没有这样的标志
  • 清除无效的HTREE目录
  • htree内部节点中的错误块
  • 找到重复的目录条目
  • 找到非唯一文件名
  • i_blocks_hi应该为零
  • 意外的HTREE块
  • 根索引节点未分配
  • 失物招领中没有房间
  • 未连接的目录索引节点
  • ..输入不正确
  • 失物招领处找不到目录
  • 独立的inode
  • 超级块损坏
  • 不支持片段
  • 确定文件系统的物理设备大小时出错
  • 外部日志具有(不支持)多个文件系统
  • 找不到外部日记
  • 外部日志有坏的超级块
  • Superblock的日记UUID错误
  • 分配inode位图时出错
  • 分配块位图时出错
  • 分配icount链接信息时出错
  • 分配目录块数组时出错
  • 扫描inode时出错
  • 遍历块时出错
  • 存储inode计数信息时出错
  • 存储目录块信息时出错
  • 读取inode时出错(用于清除)
  • 分配引用计数结构时出错
  • 修复引用计数时读取扩展属性块时出错
  • 修复引用计数时写入扩展属性块时出错
  • 分配EA区域分配结构时出错
  • 扫描inode时出错
  • 分配inode位图时出错
  • 内部错误:找不到dir_info
  • 分配icount结构时出错
  • 遍历目录块时出错
  • 解除分配inode时出错
  • 调整EA引用计数时出错
  • 分配inode位图时出错
  • 创建根目录时出错
  • 根索引节点不是目录;流产
  • 没有根索引节点无法继续。
  • 内部错误:找不到dir_info
  • 编程错误:位图端点不匹配
  • 内部错误:伪造位图结尾
  • 在替换inode位图中复制时出错
  • 复制替换块位图中时出错

诺亚,如果您知道这一点,是否有可能创建/注入所有这些错误(或任何可能的错误)?我正在尝试调查这些错误的原因以及这些错误的可能解决方案。
AnkurTank
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.