xfs_repair在做什么

xfs_repair在做什么_第1张图片

名词说明:

AGI:inode信息描述
AGF:AG free space描述
AGFL:预留free space信息描述
xfs extents:xfs的数据存储单元结构

7个步骤:

xfs_repair分七个阶段执行扫描和修复。
每个阶段都依赖于前一阶段的结果来修复某些错误。

1、获取并检查超块信息,如果没有找到超块数据,就结束

2、检查AG头结构信息(AGI,AGF和AGFL)并扫描AGF和AGI btree。

3、使用第2阶段的AGI b+tree,扫描inode树,处理已删除的inode的未链接列表,并查找可能缺少的inode集群。
遍历查找所有的inode,记录使用过的文件系统块(extents)。
对于目录inode,扫描目录结构并查找丢失的inode信息。
所有错误的inode数据都会被删除,包括不可恢复的损坏目录

4、再次扫描inode extents。具有覆盖已使用数据的范围的任何inode都将被删除

5、无论是否发现错误,都会重建AG头结构数据,包括AGI b+tree,AGF b+tree和AGFL。
实时inode也被重建。

6、该阶段,文件系统会处于挂载状态,xfs_repair使用libxfs_mount挂载,修复过程是处于一个挂载状态下执行的,程序会分给它一个挂载入口。
通过扫描分析所有数据的目录。
【1】任何有一定损坏的目录都会用任何可以恢复的条目重建。
【2】重新创建缺少的根目录。
【3】目标中的所有inode都标记为reached.。
最后,所有状态为unreached的inode都会被放到lost+found目录下。

lost+found目录的文件通常是未链接的文件(名字以及被删除),这些文件还被一些进程使用(数据没有删除),比如系统突然关机时(内核panic或突然断电)出现。这些文件会被系统删除。

7、根据阶段6收集的数据修复inode的nlinks

检查一块正常的磁盘

Phase 1 - find and verify superblock...
Phase 2 - using internal log
        - zero log...
        - scan filesystem freespace and inode maps...
        - found root inode chunk
Phase 3 - for each AG...
        - scan (but don't clear) agi unlinked lists...
        - process known inodes and perform inode discovery...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
        - process newly discovered inodes...
Phase 4 - check for duplicate blocks...
        - setting up duplicate extent list...
        - check for inodes claiming duplicate blocks...
        - agno = 0
        - agno = 1
        - agno = 2
        - agno = 3
No modify flag set, skipping phase 5
Phase 6 - check inode connectivity...
        - traversing filesystem ...
        - traversal finished ...
        - moving disconnected inodes to lost+found ...
Phase 7 - verify link counts.

参考资料

XFS User Guide:http://xfs.org/docs/xfsdocs-xml-dev/XFS_User_Guide/tmp/en-US/html/index.html

你可能感兴趣的:(XFS)