1.生成一个全0的二进制文件
$ dd if=/dev/zero of=./ext2.bin bs=1M count=100
2.格式化ext2文件系统
$ mkfs.ext2 ext2.bin
3.使用loop设备,仿真块设备,块设备名为/dev/loop10
$ losetup /dev/loop10 ./ext2.bin
4.创建文件夹路径,挂载文件系统
$ mkdir /tmp/ext2/
$ mount /dev/loop10 /tmp/ext2/
完成挂载后就可以访问文件系统.如在里面创建文件和目录等
5.查看磁盘设备
$ df -h
/dev/loop10 97M 48K 92M 1% /tmp/ext2
6.获取该文件系统的块组信息
$ dumpe2fs /dev/loop10
dumpe2fs 1.45.5 (07-Jan-2020)
Filesystem volume name: <none>
Last mounted on: /tmp/ext2
Filesystem UUID: 5c29b959-b136-4e43-a825-3991e891e317
Filesystem magic number: 0xEF53
Filesystem revision #: 1 (dynamic)
Filesystem features: ext_attr resize_inode dir_index filetype sparse_super large_file
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: not clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 25600
Block count: 25600
Reserved block count: 1280
Free blocks: 24784
Free inodes: 25589
First block: 0
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 6
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 25600
Inode blocks per group: 800
Filesystem created: Tue Aug 23 11:45:43 2022
Last mount time: Tue Aug 23 11:48:37 2022
Last write time: Tue Aug 23 11:48:37 2022
Mount count: 1
Maximum mount count: -1
Last checked: Tue Aug 23 11:45:43 2022
Check interval: 0 (<none>)
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11
Inode size: 128
Default directory hash: half_md4
Directory Hash Seed: f8eaf219-40ac-47e7-a890-b14c6c06acc3
Group 0: (Blocks 0-25599)
Primary superblock at 0, Group descriptors at 1-1
Reserved GDT blocks at 2-7
Block bitmap at 8 (+8)
Inode bitmap at 9 (+9)
Inode table at 10-809 (+10)
24784 free blocks, 25589 free inodes, 2 directories
Free blocks: 816-25599
Free inodes: 12-25600
可用看到我们刚创建的文件系统只有一个超级块,没有普通块组
块组描述符的结构体
fs/ext2/ext2.h
struct ext2_group_desc{
__le32 bg_block_bitmap; //数据块位图的位置
__le32 bg_inode_bitmap; // inode位图的位置
__le32 bg_inode_table; // inode表的位置
__le32 bg_free_blocks_count; // 剩余可用块的数量
__le32 bg_free_inodes_count; // 剩余可用inode的数量 __le32 bg_used_dirs_count; // 目录的数量
__le32 bg_pad;
__le32 bg_reserved[3];
}
7.查看文件的十六进制编码
用hexdump可用查看文件ext2.bin的编码是如何的
-
hexdump [选项] [文件]…
-
选项
- -n length:格式化输出文件的前length个字节
- -C:输出规范的十六进制和ASCII码
- -b:单字节八进制显示
- -c:单字节字符显示
- -d:双字节十进制显示
- -o:双字节八进制显示
- -x:双字节十六进制显示
- -s:从偏移量开始输出