F2FS文件系统二 实验分析f2fs文件系统

一、环境准备:

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

  • 10
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
F2FS是专为闪存设备设计的文件系统,具有出色的性能和可靠性。下面对F2FS的代码进行简要的分析: 1. 超级块(superblock):超级块是F2FS中存储文件系统元数据的结构体,包含文件系统的基本信息,如版本号、块大小、节点大小、块位图、节点位图、inode表、日志区域等。 2. inode(index node):inode是F2FS中存储文件和目录元数据的结构体,每个文件和目录都会对应一个inode节点。inode包含文件类型、权限、大小、数据块指针等信息。 3. 数据块(data block):数据块是F2FS中存储文件数据的结构体,每个数据块大小为4KB,可以存储文件数据、索引节点数据、日志数据等。 4. 日志(journal):F2FS中的写操作都会先写入日志,然后再同步到数据块中。日志大小为1MB,用于记录文件系统的变化情况,以便在系统重启后恢复数据的一致性。 5. 垃圾回收(garbage collection):由于闪存设备的写入操作是有限制的,因此需要定期进行垃圾回收以释放已经不再使用的空间。F2FS中的垃圾回收机制采用了段式管理的思路,即将整个闪存设备分成多个段,每个段独立进行垃圾回收。 6. 压缩(compression):F2FS中的压缩机制采用了zlib压缩算法,可以将文件数据进行压缩以节省存储空间和提高读写性能。 7. 加密(encryption):F2FS中的加密机制采用了AES加密算法,可以对文件和数据进行加密和解密以保护用户数据的安全性。 总之,F2FS是一种高效、可靠的文件系统,它的代码实现非常精细和模块化,各个模块之间相互独立,并且有很好的扩展性和灵活性。F2FS的设计思路和数据结构也非常有特色,可以更好地充分利用闪存设备的性能和寿命。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值