(转载)EXT2文件系统内部布局

本文深入探讨EXT2文件系统的内部结构,包括其表结构、磁盘布局以及关键功能,帮助读者理解EXT2如何管理和存储文件。
摘要由CSDN通过智能技术生成
作者:Vitamin C[抗坏血酸]
The Second Extended File System
Internal Layout
Ext2文件系统内部布局
Dave Poirier
      instinc@users.sf.net
翻译:Vitamin C[抗坏血酸]
      sing9806@sohu.com
      sing9806@yahoo.com.cn
Copyright © 2001-2002 by Dave Poirier
Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.1 or any later version published by the Free Software Foundation; with no Invariant Sections, with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the license can be acquired electronically from http://www.fsf.org/licenses/fdl.html or by writing to 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
(这是原文关于版权的说明,予原样保留。)

内容目录
关于本书
1. 磁盘组织
1.1. 超级块  
1.1.1. s_inodes_count
1.1.2. s_blocks_count
1.1.3. s_r_blocks_count
1.1.4. s_free_blocks_count
1.1.5. s_free_inodes_count
1.1.6. s_first_data_block
1.1.7. s_log_block_size
1.1.8. s_log_frag_size
1.1.9. s_blocks_per_group
1.1.10. s_frags_per_group
1.1.11. s_inodes_per_group
1.1.12. s_mtime
1.1.13. s_wtime
1.1.14. s_mnt_count
1.1.15. s_max_mnt_count
1.1.16. s_magic
1.1.17. s_state
1.1.18. s_errors
1.1.19. s_minor_rev_level
1.1.20. s_lastcheck
1.1.21. s_checkinterval
1.1.22. s_creator_os
1.1.23. s_rev_level
1.1.24. s_def_resuid
1.1.25. s_def_resgid
1.1.26. s_first_ino
1.1.27. s_inode_size
1.1.28. s_block_group_nr
1.1.29. s_feature_compat
1.1.30. s_feature_incompat
1.1.31. s_feature_ro_compat
1.1.32. s_uuid
1.1.33. s_volume_name
1.1.34. s_last_mounted
1.1.35. s_algo_bitmap
1.2. 块组描述符
1.2.1. bg_block_bitmap
1.2.2. bg_inode_bitmap
1.2.3. bg_inode_table
1.2.4. bg_free_blocks_count
1.2.5. bg_free_inodes_count
1.2.6. bg_used_dirs_count
1.2.7. bg_pad
1.2.8. bg_reserved
1.3. 块位图
1.4. Inode 位图
1.5. Inode 表
1.5.1. i_mode
1.5.2. i_uid
1.5.3. i_size
1.5.4. i_atime
1.5.5. i_ctime
1.5.6. i_mtime
1.5.7. i_dtime
1.5.8. i_gid
1.5.9. i_links_count
1.5.10. i_blocks
1.5.11. i_flags
1.5.12. i_osd1
1.5.13. i_block
1.5.14. i_generation
1.5.15. i_file_acl
1.5.16. i_dir_acl
1.5.17. i_faddr
1.5.18. i_osd2
1.6. 数据块
2. 目录结构
2.1. 目录文件格式
2.1.1. inode
2.1.2. rec_len
2.1.3. name_len
2.1.4. file_type
2.1.5.name
2.2. 目录例子
2.3. 索引目录格式
2.3.1.  索引结构
2.3.2. 查找算法
2.3.3. 插入算法
2.3.4. 分解
2.3.5. Key 冲突
2.3.6. Hash 功能
2.3.7. 性能
3. Inode, 文件的标识符
3.1. Inode 编号
3.2. 定位Inode 结构
3.3. 定位Inode 表
4. 文件属性
4.1. 标准属性
4.1.1. SUID, SGID 和 -rwxrwxrwx
4.1.2. 文件大小
4.1.3. 属主与属组
4.2. 扩展属性
4.2.1.  属性块头部
4.2.2. 属性入口头部
4.3.  行为控制标记
4.3.1. EXT2_SECRM_FL – 安全删除
4.3.2. EXT2_UNRM_FL – 用于反删除的记录
4.3.3. EXT2_COMPR_FL – 压缩的文件
4.3.4. EXT2_SYNC_FL – 同步更新
4.3.5. EXT2_IMMUTABLE_FL – 不可变文件
4.3.6. EXT2_APPEND_FL – 只添加
4.3.7. EXT2_NODUMP_FL – 不可 Dump/删除
4.3.8. EXT2_NOATIME_FL – 不更新 .i_atime
4.3.9. EXT2_DIRTY_FL – 脏的
4.3.10. EXT2_COMPRBLK_FL – 压缩的块
4.3.11. EXT2_NOCOMPR_FL –Raw方式访问压缩的数据
4.3.12. EXT2_ECOMPR_FL – 压缩错误
4.3.13. EXT2_BTREE_FL - B-Tree 格式目录
4.3.14. EXT2_INDEX_FL - Hash 索引的目录
4.3.15. EXT2_IMAGIC_FL -
4.3.16. EXT2_JOURNAL_DATA_FL – 日志文件数据
4.3.17. EXT2_RESERVED_FL – 保留
A. 鸣谢
B.译者后记
表格列表
1-1. EXT2_ERRORS 值
1-2. EXT2_OS 值
1-3. EXT2 修订版本
1-4. EXT2_*_INO值
1-5. EXT2_S_I值
2-1. EXT2_FT值
4-1. 行为控制标记
图片列表
1-1. 磁盘的元数据布局
1-2. 20mb 分区元数据布局
1-3. 超级块结构
1-4. group_desc 结构
1-5. inode 结构
1-6. inode osd2 结构: Hurd
1-7. inode osd2 结构: Linux
1-8. inode osd2 结构: Masix
2-1. 目录入口
2-2. 目录数据布局例子
2-3. 索引目录的性能
3-1. inode计算例子
4-1. ext2_xattr_header 结构
4-2. ext2_xattr_header 结构

关于本书
本书的最新版本下载的URL:http://www.freesoftware.fsf.org/ext2-doc/
本书的目的在于提供关于The Second Extended File System即Ext2文件系统的入门指南。本书假定熟悉关于文件系统的相关概念(如:文件,目录,分区等等)。
实现ext2的驱动程序并非一件易事,其最大的困难正好就是相关文档资料的缺乏。而目前网上所有关于ext2内部布局的文档资料只不过是作为Linux sourcesr的补充,并没有完整的关于ext2内部布局的文档资料。
本文档资料的目的正是为解决此问题而生,希望它能对有此需要的人有所帮助。
Unless otherwise stated, all values are stored in little endian byte order.

Chapter 1. 磁盘组织
在使用The Second Extended File System首先要明确的是所有的元数据结构的大小均基于“块(block)”而不是“扇区(sector)”。块的大小是可变的,依赖于文件系统的大小。例如在一个软盘块的大小为1KB(2个扇区),而在一个10G的分区里块的大小通常为4KB或8KB(分别为8或16个扇区)。
每一个块可以进一步划分为“段(fragments)”,但我见过一个段的大小与块的大小不相匹配的文件系统。尽管常识告诉我段与块不相匹配是不合理的。
除了超级块(superblock)外,所有的元数据结构都以块为基准调整大小。这里有一点要注意,在安装任何其它的文件系统到软盘上时,inode表块(Inode Tabel Block)在块大小为4KB比在块大小为1KB的文件系统里可以容纳更多的入口,这是当访问这样的一个特殊的结构时需要注意的。
下步要明确的是文件系统还划分了“块组(block groups)”。在一张软盘里只使用一个块组包含文件系统里所有的块,但在一个10G的硬盘分区里将划分30个这样的包含有一定数量块的块组。
在每个块组的开始有多种多样的元数据结构描述彼此的位置,更重要的是,元数据结构定义了当前文件系统的状态。下面是在一张软盘的ext2文件系统的磁盘组织:
Figure 1-1. 软盘的元数据布局
offset   # of blocks description
偏移       块号      描述
-------- ----------- -----------
       0           1 boot record 引导记录
         -- block group 0 –
            块组 0
(1024 bytes)       1 superblock  超级块
       2           1 group descriptors 块组描述符
       3           1 block bitmap 块位图
       4           1 inode bitmap inode位图
       5          23 inode table inode 表
      28        1412 data blocks 数据块
  
下面是一个20MB ext2文件系统的磁盘组织:
Figure 1-2. 20mb 分区元数据布局
offset   # of blocks description
-------- ----------- -----------
       0           1 boot record
         -- block group 0 --
(1024 bytes)       1 superblock
       2           1 group descriptors
       3           1 block bitmap
       4           1 inode bitmap
       5         214 inode table
     219        7974 data blocks
         -- block group 1 --
    8193           1 superblock backup
    8194           1 group descriptors backup
    8195           1 block bitmap
    8196           1 inode bitmap
    8197         214 inode table
    8408        7974 data blocks
         -- block group 2 --
   16385           1 block bitmap
   16386           1 inode bitmap
   16387         214 inode table
   16601        3879 data blocks
  
只要你了解磁盘基本的信息,磁盘的布局是可以预知的;块的大小,每个块组包含多少块,每个块组的inode数等这些信息是可以在超级块结构里找到或通过计算得到的。
没有超级块的信息,磁盘将不可用;所以只要磁盘上的空间允许,在磁盘上将有一个或多个超级块的备份。
块位图与inode位图用于识别哪些块和哪些inode入口是可用的。各种各样的文件将保存在数据块里。注意:在ext2里目录也被视为文件,在下面我们将详细对此进行描述。
为兼容不同的ext2实现,在不同结构里的一些因为特定的操作系统而有所差别的字段,将在适当的时候给予简要的说明。

1.1. 超级块
超级块这个结构里包含了磁盘里ext2 文件系统属性里最基本的信息。它的布局如下:
Figure 1-3. 超级块结构
offset  size    description
偏移   大小    描述
------- ------- -----------
      0       4 s_inodes_count
      4       4 s_blocks_count
      8       4 s_r_blocks_count<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值