XFS文件系统的内容分析
XFS文件系统
超级块记录了整个xfs文件系统的一些重要数据,例如磁盘块(通常是以4096字节为单位的)的总数,磁盘块的大小,使用的磁盘块/未使用的磁盘块的个数等。超级块是整个文件系统最重要的部分,如果他的数据不正确,文件系统就无法使用了,所以每个分配组有一个超级块,但使用的只有第一个分配组的超级块,其他的都是备份用的。这样一来,如果超级块被损坏,可以使用其他的分配组的,有些数据可能丢失,但不致于是整个文件系统都不能用。
超级块的磁盘上的结构和linux源代码中的xfs_sb结构体是一模一样的。
typedef struct xfs_sb |
|
{ |
|
__uint32_t sb_magicnum; |
4个字节的文件系统标示,翻译成中文暂且叫幻数吧!
对于xfs文件系统,他就是四个字母”XFSB” |
__uint32_t sb_blocksize; |
一个磁盘块所占的字节数(通常是4096个字节) |
xfs_drfsbno_t sb_dblocks; |
数据块的个数 |
xfs_drfsbno_t sb_rblocks; |
实时数据块的个数 |
xfs_drtbno_t sb_rextents; |
实时区域的个数 |
uuid_t sb_uuid; |
文件系统的UUID |
xfs_dfsbno_t sb_logstart; |
日志区域的开始块号 |
xfs_ino_t sb_rootino; |
根节点的索引节点id |
xfs_ino_t sb_rbmino; |
|
xfs_ino_t sb_rsumino; |
|
xfs_agblock_t sb_rextsize; |
|
xfs_agblock_t sb_agblocks; |
一个分配组的块数 |
xfs_agnumber_t sb_agcount; |
分配组的个数 |
xfs_extlen_t sb_rbmblocks; |
|
xfs_extlen_t sb_logblocks; |
日志块的个数 |
__uint16_t sb_versionnum; |
|
__uint16_t sb_sectsize; |
|
__uint16_t sb_inodesize; |
一个索引节点所占的字节数 |
__uint16_t sb_inopblock; |
一个磁盘块有多少个索引节点 |
char sb_fname[12]; |
文件系统的名字 |
__uint8_t sb_blocklog; |
|
__uint8_t sb_sectlog; |
|
__uint8_t sb_inodelog; |
|
__uint8_t sb_inopblog; |
|
__uint8_t sb_agblklog; |
|
__uint8_t sb_rextslog; |
|
__uint8_t sb_inprogress; |
|
__uint8_t sb_imax_pct; |
|
__uint64_t sb_icount; |
已分配的索引节点的个数 |
__uint64_t sb_ifree; |
剩余的索引节点的个数 |
__uint64_t sb_fdblocks; |
空闲的数据块个数 |
__uint64_t sb_frextents; |
|
xfs_ino_t sb_uquotino; |
用于管理用户配额的索引节点的id |
xfs_ino_t sb_gquotino; |
用于管理组配额的索引节点的id |
__uint16_t sb_qflags; |
|
__uint8_t sb_flags; |
|
__uint8_t sb_shared_vn; |
|
xfs_extlen_t sb_inoalignmt; |
|
__uint32_t sb_unit; |
|
__uint32_t sb_width; |
|
__uint8_t sb_dirblklog; |
|
__uint8_t sb_logsectlog; |
|
__uint16_t sb_logsectsize; |
|
__uint32_t sb_logsunit; |
|
} xfs_sb_t; |
|
本文地址:http://www.45fan.com/dnjc/69008.html