日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

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

發布時間:2023/12/31 windows 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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

__le32 segment_count_sit;????????/* # of segments for SIT */???????????

?0x02

__le32 segment_count_nat;????????/* # of segments for NAT */???????????

?0x02

__le32 segment_count_ssa;????????/* # of segments for SSA */????????????

0x01????????????

__le32 segment_count_main;????????/* # of segments for main area */????

0x5C

__le32 segment0_blkaddr;????????/* start block address of segment 0 */?

0x0200

__le32 cp_blkaddr;????????????????/* start block address of checkpoint */????

0x0200

__le32 sit_blkaddr;????????????????/* start block address of SIT */???????????

0x0600

__le32 nat_blkaddr;????????????????/* start block address of NAT */???????????

0x0A00

__le32 ssa_blkaddr;????????????????/* start block address of SSA */???????????

0x0E00

__le32 main_blkaddr;????????????????/* start block address of main area */?

0x1000

__le32 root_ino;????????????????/* root inode number */????????????????????

0x03

__le32 node_ino;????????????????/* node inode number */????????????????????

0x01

__le32 meta_ino;????????????????/* meta inode number */????????????????????

0x02

__u8 uuid[16];????????????????????????/* 128-bit uuid for volume */??????????????

***????????????????????

__le16 volume_name[MAX_VOLUME_NAME];????????/* volume name */??????????

F2FS???????

__le32 extension_count;????????????????/* # of extensions below */????????????

0X0001B???

__u8 extension_list[F2FS_MAX_EXTENSION][F2FS_EXTENSION_LEN];/* extension array */ ??

0x00

__le32 cp_payload;??????????????????????????????????????????????????

//0x0

__u8 version[VERSION_LEN];? /* the kernel version */???????????????????

//4.9.117+ #4 SMP PREEMPT Sat May 25 01:40:39 CST 2019

__u8 init_version[VERSION_LEN]; /* the initial kernel version */????????

//4.9.117+ #4 SMP PREEMPT Sat May 25 01:40:39 CST 2019

__le32 feature;???????? /* defined features */????????

//0x0

__u8 encryption_level;????? /* versioning level for encryption */????????

?//0x0

__u8 encrypt_pw_salt[16];?? /* Salt used for string2key algorithm */

?//0x0

struct f2fs_device devs[MAX_DEVICES];?? /* device list */????????????????

?//0x0

__le32 qf_ino[F2FS_MAX_QUOTAS]; /* quota inode numbers */???????????????

? //0x0

__u8 hot_ext_count;???? /* # of hot file extension */???????????????????

? //0x0

__u8 reserved[310];???? /* valid reserved region */???????????????????????

? //0x0??????????????????????????????????????????????????????????????????????????????????

__le32 crc;???????? /* checksum of superblock */????????????????????????

?//0x0

} __packed;

?

2checkpoint:

checkpoint的數量也有兩個:

struct f2fs_checkpoint {

__le64 checkpoint_ver;????????????????/* checkpoint block version number */? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?

0x1052B10E

__le64 user_block_count;????????/* # of user blocks */?????????????????????

0x7A00

__le64 valid_block_count;????????/* # of valid blocks in main area */???????

0x13

__le32 rsvd_segment_count;????????/* # of reserved segments for gc */????????

0x15

__le32 overprov_segment_count;????????/* # of overprovision segments */??????

0x1F

__le32 free_segment_count;????????/* # of free segments in main area */??????

0x56

__le32 cur_node_segno[MAX_ACTIVE_NODE_LOGS];??????????????

?0x0.1.2.0xFFFFFFFF.FFFFFFFF.FFFFFFFF.FFFFFFFF.FFFFFFFF??

__le16 cur_node_blkoff[MAX_ACTIVE_NODE_LOGS];??????????????

0X2F.10.2.0x00. 0x00. 0x00. 0x00. 0x00. 0x00??????????????

__le32 cur_data_segno[MAX_ACTIVE_DATA_LOGS];???????????????

0x03. 0x47. 0x16. FFFFFFFF. FFFFFFFF. FFFFFFFF. FFFFFFFF. FFFFFFFF

__le16 cur_data_blkoff[MAX_ACTIVE_DATA_LOGS];???????????????????

0X85. 0x1AB. 0x00. 0x00. 0x00. 0x00. 0x00. 0x00

?__le32 ckpt_flags;????????????????/* Flags : umount and journal_present */???????

0x01C4

__le32 cp_pack_total_block_count;????????/* total # of one cp pack */???????

0x04

__le32 cp_pack_start_sum;????????/* start block number of data summary */???

0x01

__le32 valid_node_count;????????/* Total number of valid nodes */??????????

0x05

__le32 valid_inode_count;????????/* Total number of valid inodes */?????????

0x05

__le32 next_free_nid;????????????????/* Next free node number */???????????????

?0x61

__le32 sit_ver_bitmap_bytesize;????????/* Default value 64 */?????????????????

0x40

__le32 nat_ver_bitmap_bytesize; /* Default value 256 */????????????????

0x40

__le32 checksum_offset;????????????????/* checksum offset inside cp block */??????

0x0FF

__le64 elapsed_time;????????????????/* mounted time */?????????????????????????

0x019289

unsigned char alloc_type[MAX_ACTIVE_LOGS];?????????????????????????????

0x00

unsigned char sit_nat_version_bitmap[1];???????????????????????????????

0x00

} __packed;

3、SIT:

0xC01 >> 10 =? 3 type

0xC01 & 0x3FF =? 1

/** Note that f2fs_sit_entry->vblocks has the following bit-field information.* [15:10] : allocation type such as CURSEG_XXXX_TYPE* [9:0] : valid block count*/ struct f2fs_sit_entry {__le16 vblocks; /* reference above */__u8 valid_map[SIT_VBLOCK_MAP_SIZE]; /* bitmap for valid blocks */__le64 mtime; /* segment age for cleaning */ } __packed;

dump.f2fs ???-s ???0~-1 ???f2fs_test_2

root@ubuntu:/home/yinpeng# cat dump_sit

segment_type(0:HD, 1:WD, 2:CD, 3:HN, 4:WN, 5:CN)

?

segno:?????? 0????????vblocks:? 1????????seg_type:3????????sit_pack:2

//1segment = 512 block

? 00? 10? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

segno:?????? 1????????vblocks:? 2????????seg_type:4????????sit_pack:2

用戶層的數據從0x100000開始:

1000000 + 1*2MB(segmet size) + (8*5 + 3) * 4Kb(block size) =

0x1000000 + 0x200000 + 0x2B000 = 0x122B000

0x18 = 0x00011000

? 00? 00? 00? 00? 00? 18? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

segno:?????? 2????????vblocks:? 0????????seg_type:5????????sit_pack:2

segno:?????? 3????????vblocks:? 1????????seg_type:0????????sit_pack:2

0x1000000 + 3 * 2MB + (14*8 + 4) * 4kb = 74000

0x1000000 + 0x600000 + 74000

0x08 = 0x00001000

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 08? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00? 00

segno:?????? 4????????vblocks:? 0????????seg_type:1????????sit_pack:2

segno:?????? 5????????vblocks:? 0????????seg_type:1????????sit_pack:2
?

從上面的分解,可以看到通過如下流程可以找到DataBlock的地址:

Superblock -> NAT -> inode number? ->? datablock

4.NAT

struct f2fs_nat_entry {__u8 version; /* latest version of cached nat entry */__le32 ino; /* inode number */__le32 block_addr; /* block address */ } __packed;struct f2fs_nat_block {struct f2fs_nat_entry entries[NAT_ENTRY_PER_BLOCK]; } __packed;

dump.f2fs ??-n ??0~-1 ???f2fs_test_2

root@ubuntu:/home/yinpeng# cat dump_nat

nid:??? 3????????ino:??? 3????????offset:??? 0????????blkaddr:????? 4111 //0x122A 000????????pack:2

nid:?? 87????????ino:?? 87????????offset:??? 0????????blkaddr:????? 4651 //0x122B????????pack:2

nid:?? 91????????ino:?? 91????????offset:??? 0????????blkaddr:????? 4652 //0x122C????????pack:2

nid:?? 92????????ino:?? 92????????offset:??? 0????????blkaddr:????? 4653 //0x122D????????pack:2

nid:?? 93????????ino:?? 93????????offset:??? 0????????blkaddr:????? 4654 //0x122E????????pack:2

5、DataBlock:


?

root@ubuntu:/home/yinpeng# dump.f2fs -a 0~-1 f2fs_test_2

root@ubuntu:/home/yinpeng# cat dump_ssa

/* a summary entry for a 4KB-sized block in a segment */ struct f2fs_summary {__le32 nid; /* parent node id */union {__u8 reserved[3];struct {__u8 version; /* node version number */__le16 ofs_in_node; /* block index in parent node */} __packed;}; } __packed;

參考博客:

https://blog.csdn.net/SweeNeil/article/details/91897016

作者:frank_zyp
您的支持是對博主最大的鼓勵,感謝您的認真閱讀。
本文無所謂版權,歡迎轉載。

總結

以上是生活随笔為你收集整理的F2FS文件系统二 实验分析f2fs文件系统的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人av在线网址 | 国产精品一区二区免费视频 | 激情小视频在线观看 | 美女裸体网站久久久 | 国产精品免费一区二区三区 | 91色视频在线观看 | 波多野结衣家庭主妇 | 久久婷婷五月综合色国产香蕉 | 国产777| 超碰青草| 日本一本久久 | 欧美黑人疯狂性受xxxxx野外 | 欧美精品一区二区三区久久 | 精品一区在线看 | 涩涩国产| 日日干日日操 | 国产欧美精品 | 欧美色图狠狠干 | 亚洲老老头同性老头交j | 激情伊人五月天 | 男女透逼视频 | 国产精品久久久精品 | 男人亚洲天堂 | 2025中文字幕 | 少妇脱了内裤让我添 | 97精品熟女少妇一区二区三区 | 国产精品麻豆一区二区 | 性欧美另类 | 精品一区三区 | www.xxxx欧美| 国产精品毛片久久久久久久 | 欧美精品久久久久久久久久 | 国产午夜精品在线观看 | 国产xxx在线观看 | 极品美女被c | 午夜视频在线瓜伦 | 老司机激情视频 | 中文字幕不卡av | 成人av无码一区二区三区 | 亚洲 欧美 综合 | 国产精品女同 | 在线色播 | 精品国产色 | 国产又黄又猛又粗又爽 | 久草福利资源在线 | 色涩涩 | 91爱爱视频 | 国产原创在线观看 | 毛片最新网址 | 精品网站| 奇米色影视 | 男女一级片 | 久久久青 | 免费成年人视频 | 久久久精品亚洲 | 国产夫妇交换聚会群4p | 午夜精品一区二区三区免费视频 | 欧美日韩一区二区三区不卡 | 美女一区二区视频 | 激情小说中文字幕 | 久久人人爽人人爽人人 | 久久偷拍免费视频 | 欧美 亚洲 视频 | 国产小视频在线观看免费 | 天天色天天色天天色 | 丁香伊人网 | 在线h片| 亚洲免费一级片 | 久久人人爽人人爽人人片av高清 | 国产欧美精品久久 | 日韩一本在线 | 亚洲国内精品 | 日本一区二区三区免费观看 | 国产美女诱惑 | 丁香婷婷成人 | 亚洲永久精品一区 | 人妻丰满熟妇av无码区hd | 男女瑟瑟网站 | 成人欧美一级特黄 | 三区四区 | 色综合99久久久无码国产精品 | 亚洲精品久久久久久宅男 | 少妇高潮迭起 | 亚洲高清视频一区 | 久久九九免费 | 福利在线视频导航 | 午夜毛片 | 91超薄肉色丝袜交足高跟凉鞋 | 中国av免费看 | 国内自拍偷拍 | 欧美成人h版 | 欧美少妇xx| 国产三级视频网站 | 欧美片17c07.com| 丰满熟女人妻一区二区三 | 97一级片| 日本精品视频 | 亚洲精品美女久久久 | 亚洲色图另类 |