参考文档: ext2磁盘格式分析
1.生成一个ext3.img文件
# dd if=/dev/zero of=ext3.img bs=4096 count=10240
10240+0 records in
10240+0 records out
# ls -l
total 40960
-rwxr-xr-x 1 root root 41943040 Jun 8 13:40 ext3.img
2.格式化为ext3
# mkfs.ext3 ext3.img ////////////这里默认的block size是1024
mke2fs 1.38 (30-Jun-2005)
ext3.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=1024 (log=0)
Fragment size=1024 (log=0)
10240 inodes, 40960 blocks
2048 blocks (5.00%) reserved for the super user
First data block=1
5 block groups
8192 blocks per group, 8192 fragments per group
2048 inodes per group
Superblock backups stored on blocks:
8193, 24577
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 30 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
#
# mkfs.ext3 ext3.img -b 4096 /////这里指定block size为4096
mke2fs 1.38 (30-Jun-2005)
ext3.img is not a block special device.
Proceed anyway? (y,n) y
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
10240 inodes, 10240 blocks
512 blocks (5.00%) reserved for the super user
First data block=0
1 block group
32768 blocks per group, 32768 fragments per group
10240 inodes per group
Writing inode tables: done
Creating journal (1024 blocks): done
Writing superblocks and filesystem accounting information: done
This filesystem will be automatically checked every 20 mounts or
180 days, whichever comes first. Use tune2fs -c or -i to override.
#
从命令输出可以得到:
Block size=4096 (log=2) /////block size是4096
10240 inodes, 10240 blocks /////inode数量,block数量
1 block group /////block group数
3.挂载
# mkdir myext3
# mount -o loop ext3.img myext3
# ls -a myext3/
. .. lost+found
#
这个分区中有三个文件夹:. .. lost+found
4.打开ext3.img分析
vi打开,在命令模式下输入:%!xxd,来设置16进制显示
分区格式为:
+-------+-----------+----------+-----------+
| boot | block | ... | block |
| block | group 0 | ... | group N |
+-------+-----------+----------+-----------+
第一部分:引导块
第二部分:块组
一般硬盘512Byte是一个扇区,多个扇区组成一块,多个块组成一个块组,多个块组和
启动块成分区。块的大小可以在格式化视进行指定,最小为1024Byte即2个扇区。分区
时没有指定块的大小则块大小为1024Byte,每个块组大小相等。
+-------+-----------+----------+-----------+
| boot | block | ... | block |
| block | group 0 | ... | group N |
+-------+-----------+----------+-----------+
/--. \-------------
./-- \-------------
+-------+-------+--------+--------+-------+-------------\-----+
| super | group | block | inode | inode | data |
| block | desc | bitmap | bitmap | table | blocks |
+-------+-------+--------+--------+-------+-------------------+
1 block n block 1 block 1 block n block
第一部分:超级块
第二部分:组描述
第三部分:块位图
第四部分:节点位图
第五部分:节点表
第六部分:数据块
任何ext234分区中的第一个1024空间都是不受ext234文件系统的管理,这个是为分区的
引导扇区所保留的,ext234其余部分组成块组(block group)。
问题1:一个分区有多少个block group呢?
A:这取决于分区的大小和block的大小。其主要限制在于block bitmap,因为block bitmap
必须放在一个单独的block中,block bitmap用来标识一个block group中block的占用
和空闲状态。所以,每个block group中至多有8*b个block,b是以字节为单位的block
大小,因此,block group的总数大约是s/(8*b),s是分区所有的block数。
1.ext3.img中0x000-0x3FF,是为引导扇区保留的
2.ext3.img中00x0400-0x7FF,是b||k group 0的superblock
00000400: 00 28 00 00 //s_inodes_count =0x00002800=10240
4: 00 28 00 00 //s_blocks_count =0x00002800=10240
8: 00 02 00 00 //s_r_blocks_count =0x00000200=512(=10240*5%)
C: B5 22 00 00 //s_free_blocks_count=0x000022B5=8885
00000410: F5 27 00 00 //s_free_inodes_count=0x000027F5=10229
4: 00 00 00 00 //s_first_data_block =0x00000000
8: 02 00 00 00 //s_log_block_size =0x00000002
C: 02 00 00 00 //s_log_frag_size =0x00000002
00000420: 00 80 00 00 //s_blocks_per_group =0x00008000=32768
4: 00 80 00 00 //s_frags_per_group =0x00008000=32768
8: 00 28 00 00 //s_inodes_per_group =0x00002800=10240
C: 46 0E EF 4D //s_mtime =0x4DEF0E46(mount time)
00000430: 46 0E EF 4D //s_wtime =0x4DEF0E46(write time)
4: 01 00 //s_mnt_count =0x0001(mount count)
6: 14 00 //s_max_mnt_count =0x0014=20(max mount count)
8: 53 EF //s_magic =0xEF53
A: 01 00 //s_state =0x0001
C: 01 00 //s_errors =0x0001
E: 00 00 //s_minor_rev_level =0x0000
...
00000450: 00 00
2: 00 00
4: 0B 00 00 00 //s_first_ino =0x0000000B=11(First non-reserved inode)
8: 80 00 //s_inode_size =0x0008,inode size=2^8=256bytes
A: 00 00 //s_block_group_nr =0x0000(block group # of this superblock)
Inode count: 10240
Block count: 10240
Reserved block count: 512
Free blocks: 8885
Free inodes: 10229
First block: 0
Block size: 4096
Fragment size: 4096
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 10240
Inode blocks per group: 320
First inode: 11
Inode size: 128
Journal inode: 8
Group 0: (Blocks 0-10239)
Primary superblock at 0,
Group descriptors at 1-1
Block bitmap at 2 (+2),
Inode bitmap at 3 (+3)
Inode table at 4-323 (+4)
8885 free blocks, 10229 free inodes, 2 directories
Free blocks: 1355-10239
Free inodes: 12-10240
block 0 1 2 3 4 ... 10240
+----------------+------------+--------+--------+-------+--------+
|+----+-----+---+|+----------+|+------+|+------+|+-----+|+------+|
||boot|super|...||| group |||block |||inode |||inode||| ||
|| |block| |||descriptor|||bitmap|||bitmap|||table||| ||
|+----+-----+---+|+----------+|+------+|+------+|+-----+|+------+|
+----------------+------------+--------+--------+-------+--------+
sector 0 2 4 8 16 24 32 ... 81920
byteoff 0 0x400 0x1000 0x2000 0x3000 0x4000
Inode count: 10240 ///inode数量
Block count: 10240 ///block数量
Reserved block count: 512 ///block保留
Free blocks: 8885 ///空闲block数量
Free inodes: 10229 ///空闲inode数量
First block: 0 ///第一个block
Block size: 4096 ///block大小
Fragment size: 4096 ///fragment大小
Blocks per group: 32768 ///每个group中的block数量
Fragments per group: 32768 ///每个group中的fragment数量
Inodes per group: 10240 ///每个group中的inode数量
Inode blocks per group: 320 ///每个group中inode所占用的block数量
First inode: 11 ///第一个inode
Inode size: 128 ///inode大小
Journal inode: 8
Group 0: (Blocks 0-10239)
Primary superblock at 0,
Group descriptors at 1-1
Block bitmap at 2 (+2),
Inode bitmap at 3 (+3)
Inode table at 4-323 (+4)
8885 free blocks, 10229 free inodes, 2 directories
Free blocks: 1355-10239
Free inodes: 12-10240
ext3.img:
sector byteoff
boot 0-1 0x0000
superblock 2-3 0x0400
- 4-7 0x0800
group desc 8-15 0x1000
block bitmap 16-23 0x2000
inode bitmap 24-31 0x3000
inode table 32-39 0x4000
00001000: 02 00 00 00 //bg_block_bitmap=0x00000002,block bitmap的块号
4: 03 00 00 00 //bg_inode_bitmap=0x00000003,inode bitmap的块号
8: 04 00 00 00 //bg_inode_table =0x00000004,inode table的块号
C: B5 22 //bg_free_blocks_count=0x22B5=8885
E: F5 27 //bg_free_inodes_count=0x27F5=10229
00001010: 02 00 //bg_used_dirs_count=0x0002
...
00002000: FF FF FF FF
4: FF FF FF FF
...
000020A8: FF 07 00 00
//从0x2000-0x20A9,共0xA9=169个FF,共有169*8=1352个1,加上3个共1355=10240-8885
//11111111_11111111_..._11111111_00000111
//0x2000 0x2001 0x20A8 0x20A9
...
//////////////////////////////////////////////////////////////////////////
00002500: FF FF FF FF
...
00002FFC: FF FF FF FF
//从0x2500-0x2FFF,共0xB00=2816个bit位为1
/////////////////////////////////////////////////////////////////////////
...
00003000: FF 07 00 00 //有11个bit位为1
...
00003500: FF FF FF FF
...
00003FFC: FF FF FF FF
//从0x3500-0x3FFF,共0xB00=2816个bit位为1
阅读(1219) | 评论(0) | 转发(0) |