一、环境准备:
1、ubuntu系统安装f2fs-tools:sudo apt-get install -y f2fs-tools
2、使用系统loop设备进行实践操作:
dd if=/dev/zero of=device bs=4K count=51200 //200M
losetup /dev/loop0 device //寻址可用的loop设备
mkfs.f2fs -l f2fs /dev/loop0 //格式化此loop设备
mount -t f2fs /dev/loop0 ./f2fs_mp //挂载到f2fs_mp文件夹
3、获取挂载初始状态:dd if=/dev/loop0 of=f2fs_test,可以通过UE打开f2fs_test查看。
4、新建如下文件,以及对应的inode:
root@ubuntu:/home/yinpeng/f2fs_mp# ls -i
91 1.c 92 2.txt 87 a.txt 93 bio.c
二、磁盘布局分解:
1、superBlock:
F2FS文件的起始地址向后偏移0x400字节,寻址当前地址为所述超级块SuperBlock的起始地址。
在内存的存储方式是小端存储,有两个superblock如下:
对应的结构体信息如下:
struct f2fs_super_block {
__le32 magic; /* Magic Number */ |
0xF2F52010 |
__le16 major_ver; /* Major Version */ |
0x01 |
__le16 minor_ver; /* Minor Version */ |
0x0B |
__le32 log_sectorsize; /* log2 sector size in bytes */ |
0x09 |
__le32 log_sectors_per_block; /* log2 # of sectors per block */ |
0x03 |
__le32 log_blocksize; /* log2 block size in bytes */ |
0x0C |
__le32 log_blocks_per_seg; /* log2 # of blocks per segment */ |
0x09 |
__le32 segs_per_sec; /* # of segments per section */ |
0x01 |
__le32 secs_per_zone; /* # of sections per zone */ |
0x01 |
__le32 checksum_offset; /* checksum offset inside super block */ |
0x00 |
__le64 block_count; /* total # of user blocks */ |
0xC800 |
__le32 section_count; /* total # of sections */ |
0x5C |
__le32 segment_count; /* total # of segments */ |
0x63 |
__le32 segment_count_ckpt; /* # of segments for checkpoint */ |
0x02 |