Inode bitmap 是文件系统中的一种位图结构,用于管理 inode 的分配状态。它的主要功能是记录文件系统中哪些 inode 是空闲的,哪些已经被分配。
主要特点:
-
位图结构:Inode bitmap 是一个位数组,每一位对应一个 inode。该位的值表示相应的 inode 是否已经被使用。
- 位为 0:表示该 inode 是空闲的,未分配。
- 位为 1:表示该 inode 已被分配,用于存储文件或目录的元数据。
-
快速查找:通过 inode bitmap,文件系统可以快速找到空闲的 inode 以便为新文件或目录分配。此外,文件系统在回收 inode 时也可以通过该位图快速标记 inode 为可用。
-
管理 inode 空间:Inode bitmap 的大小取决于文件系统中 inode 的数量。位图的每一位对应一个 inode,因此它可以有效地管理 inode 的使用和释放。
-
与 Inode table 的关系:Inode bitmap 仅记录 inode 是否被使用,而不存储 inode 的详细信息。inode 的实际信息(如文件属性、权限、数据块指针等)存储在 Inode table 中。
总体来说,Inode bitmap 是一个帮助文件系统高效管理 inode 分配和回收的结构。
实例:
通过以下实验观察bitmap是如何变化的,每次创建一个全新的文件后,立刻观察对应inode bitmap变化
[root@node09 disk]# touch z
[root@node09 disk]# sync #立刻将内存中的内容写入到磁盘上
[root@node09 disk]# touch zz
[root@node09 disk]# sync
[root@node09 disk]# touch zzz
[root@node09 disk]# sync
[root@node09 disk]# touch zzzz
[root@node09 disk]# sync
[root@node09 disk]# touch zzzzz
[root@node09 disk]# touch zzzzzz
[root@node09 disk]# touch zzzzzzz
[root@node09 disk]# touch zzzzzzzz
[root@node09 disk]# sync
[root@node09 disk]# touch q
[root@node09 disk]# sync
[root@node09 disk]# touch qq
[root@node09 disk]# sync
[root@node09 ~]# hexdump -s 8315k -n 1k ./disk.img -C
0081ec00 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0081ec10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0081ecf0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0081f000
[root@node09 ~]# hexdump -s 8315k -n 1k ./disk.img -C
0081ec00 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0081ec10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0081ecf0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0081f000
[root@node09 ~]# hexdump -s 8315k -n 1k ./disk.img -C
0081ec00 07 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0081ec10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0081ecf0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0081f000
...
[root@node09 ~]# hexdump -s 8315k -n 1k ./disk.img -C
0081ec00 ff 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0081ec10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0081ecf0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0081f000
[root@node09 ~]# hexdump -s 8315k -n 1k ./disk.img -C
0081ec00 ff 01 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0081ec10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0081ecf0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0081f000
[root@node09 ~]# hexdump -s 8315k -n 1k ./disk.img -C
0081ec00 ff 03 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
0081ec10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
0081ecf0 ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff |................|
*
0081f000
bitmap中的第一个字节(8bit) ,全为空
0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
创建8个全新的文件分别为z、zz、zzz、zzzz、zzzzz、zzzzzz、zzzzzzz、zzzzzzzz后,bitmap中的第一个字节中的全0,由低位到高位逐个替换为1,对应的二进制变化分别为00000001、00000011、00000111、00001111、00011111、00111111、01111111、11111111;对应的10进制变化为1、3、7、15、31、63、127、255;对应的16进制即01、03、07、0f、1f、3f、7f、ff
1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |