最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會員登陸 & 注冊

Linux文件系統(tǒng):minix文件系統(tǒng)二進(jìn)制分析(格式化)

2022-06-02 13:19 作者:補給站Linux內(nèi)核  | 我要投稿

1. minix文件系統(tǒng)二進(jìn)制分析1:剛剛格式化后的文件系統(tǒng)

  • 工作幾年來,用過不少文件系統(tǒng),甚至手把手移植和裁剪過Fatfs文件系統(tǒng),但是卻對文件系統(tǒng)內(nèi)部的存儲方式和玩兒法一直一無所知,于是決定好好把文件系統(tǒng)的運行機制好好研究研究,但是現(xiàn)存文件系統(tǒng)的類型百花齊放,各有千秋,還是決定從minix文件系統(tǒng)入手,這是早期在minix系統(tǒng)上用的一種簡單的文件系統(tǒng),所謂麻雀雖小五臟俱全,正好可以做來了解文件系統(tǒng)之用,從而洞察后來更加復(fù)雜的文件系統(tǒng),萬變不離其宗,深入剖析了minix文件系統(tǒng),理解其他類型的文件系統(tǒng)也就舉一反三手到擒來了。

1.1 創(chuàng)建硬盤

  • 既然要研究文件系統(tǒng),首先我們得找一個u盤,翻了翻我封印已久的抽屜,竟然找不到一個U盤,幸好虛擬機這項技術(shù)的出現(xiàn)方便了像我這樣舍不得花錢買U盤的人…

  • 我們能在Windows系統(tǒng)下的VmWare中安裝一個Ubuntu系統(tǒng),更何況虛擬一個硬盤?本章將在虛擬機里創(chuàng)建一個16M的硬盤作為起點,來一步一步分析minix文件系統(tǒng)。


1.1.1 添加一個16M的塊設(shè)備

在Ubuntu虛擬機中添加一個大小為16M的塊設(shè)備,此時還沒有將其進(jìn)行文件系統(tǒng)格式化

【文章福利】小編推薦自己的Linux內(nèi)核技術(shù)交流群:【891587639】整理了一些個人覺得比較好的學(xué)習(xí)書籍、視頻資料共享在群文件里面,有需要的可以自行添加哦?。。∏?00名進(jìn)群領(lǐng)取,額外贈送一份價值699的內(nèi)核資料包(含視頻教程、電子書、實戰(zhàn)項目及代碼)?

1.1.2 格式化塊設(shè)備

  • 在終端輸入 fdisk -l指令查看所有塊設(shè)備信息,可以找到 /dev/sdb設(shè)備即為上一步驟創(chuàng)建的硬盤。


  • 格式化硬盤為minix文件系統(tǒng)



  • 根據(jù)格式化后的信息,我們可以知道,硬盤上的minix文件系統(tǒng)一共有5472個inodes,也就是說最多能在上面創(chuàng)建5472個文件,一共16384個數(shù)據(jù)塊,F(xiàn)irstdatazone=176 表示第一個node節(jié)點位于第176個塊,Maxsize表示每個文件支持的最大長度。


  • 接下來,我們使用hexdump -C /dev/sdb > minix_orig.dat 將硬盤的2進(jìn)制數(shù)據(jù)dump出來,如下圖所示,特備強調(diào),此時的minix文件系統(tǒng)只有一個根目錄,其他什么都沒有,干干凈凈。

00000000 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
*
00000400 ?60 15 00 40 01 00 02 00 ?b0 00 00 00 00 1c 08 10 ?|`..@............|
00000410 ?8f 13 01 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
00000420 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
*
00000800 ?03 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
00000810 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
*
00000aa0 ?00 00 00 00 00 00 00 00 ?00 00 00 00 fe ff ff ff ?|................|
00000ab0 ?ff ff ff ff ff ff ff ff ?ff ff ff ff ff ff ff ff ?|................|
*
00000c00 ?03 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
00000c10 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
*
000013e0 ?00 00 00 00 00 00 00 00 ?00 00 fe ff ff ff ff ff ?|................|
000013f0 ?ff ff ff ff ff ff ff ff ?ff ff ff ff ff ff ff ff ?|................|
00001400 ?ed 41 00 00 40 00 00 00 ?88 09 a1 61 00 02 b0 00 ?|.A..@......a....|
00001410 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
*
0002c000 ?01 00 2e 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
0002c010 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
0002c020 ?01 00 2e 2e 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
0002c030 ?00 00 00 00 00 00 00 00 ?00 00 00 00 00 00 00 00 ?|................|
*
01000000

1.2 minix文件系統(tǒng)的存儲結(jié)構(gòu)

  • minix文件系統(tǒng)的存儲結(jié)構(gòu)分為五大部分,其他類型的文件系統(tǒng)也是大同小異


1.2.1 超級塊

  • 超級塊代表了整個文件系統(tǒng),超級塊是文件系統(tǒng)的控制塊,有整個文件系統(tǒng)信息,在格式化操作完成后,超級塊的信息基本就已經(jīng)定型了,可以說,一個超級塊就代表了一個文件系統(tǒng)。


  • 值得一提的是,當(dāng)我們在linux終端mount某個塊設(shè)備時,內(nèi)核會讀取超級塊的信息,完成文件系統(tǒng)的掛載。


1.2.1.1 linux中超級塊數(shù)據(jù)結(jié)

  • 內(nèi)核掛載文件系統(tǒng)時,先去獲得超級塊的信息并保存在內(nèi)核數(shù)據(jù)結(jié)構(gòu)中

/*
 * minix super-block data on disk
 */
struct minix_super_block {
	__u16 s_ninodes; ? ? ? ? ? ? ? ? ? 
	__u16 s_nzones; ? ? ? ? ? ? ? ? ? ? 
	__u16 s_imap_blocks; ? ? ? ? ? ?
	__u16 s_zmap_blocks; ? ? ? ? ? ? 
	__u16 s_firstdatazone; ? ? ? ? ?
	__u16 s_log_zone_size;
	__u32 s_max_size;
	__u16 s_magic;
	__u16 s_state;
	__u32 s_zones;
};


1.2.2 inode節(jié)點

1.2.2.1 內(nèi)核數(shù)據(jù)結(jié)構(gòu)

  • 如下圖所示,內(nèi)核中的struct minix_inode數(shù)據(jù)結(jié)構(gòu)也是minix文件系統(tǒng)inode節(jié)點信息在存儲介質(zhì)中的存儲方式,接下來我們對照dump文件中的數(shù)據(jù),來看一下inode的值。

/*
 * This is the original minix inode layout on disk.
 * Note the 8-bit gid and atime and ctime.
 */
struct minix_inode {
	__u16 i_mode;
	__u16 i_uid;
	__u32 i_size;
	__u32 i_time;
	__u8 ?i_gid;
	__u8 ?i_nlinks;
	__u16 i_zone[9];
};

1.2.2.2 萬物之源No1節(jié)點—根目錄

  • 當(dāng)用戶執(zhí)行vim /dirdemo/filelevel2.txt操作時,在文件系統(tǒng)中是如何找到filelevel2.txt文件,并將其內(nèi)容顯示出來的呢?

  • 太極生兩儀,兩儀生四象,四象生八卦,宇宙再大,最開始也是從一個點,任何事物都有其起源,文件系統(tǒng)的起點便是從根目錄開始,所以在我們格式化硬盤之后,inode節(jié)點只有一個,那就是表示根目錄的inode節(jié)點。

  • 在超級塊的屬性當(dāng)中有一個s_firstdatazone屬性,該值作為查找文件的門戶,其指向的是根目錄的數(shù)據(jù)區(qū),174x1024=0x2c000。

  • 在文件系統(tǒng)的inode區(qū),第一個inode節(jié)點便是根目錄節(jié)點,如下圖所示。



  • 關(guān)于minix文件系統(tǒng)中,inode的各個屬性,linux內(nèi)核定義了下述結(jié)構(gòu)體類型進(jìn)行存儲。



1.2.3 第一個數(shù)據(jù)塊

  • No1節(jié)點的i_zone指向了地址0x2c000,接下來我們看一下0x2c000地址處存放的數(shù)據(jù),如下圖紅框所示,前兩行是對鏈接’.‘的目錄描述,其指向的inode節(jié)點編號為1,即根目錄,后兩行是對目錄’…'的描述,它也指向inode 1節(jié)點。




Linux文件系統(tǒng):minix文件系統(tǒng)二進(jìn)制分析(格式化)的評論 (共 條)

分享到微博請遵守國家法律
彰武县| 广元市| 介休市| 珠海市| 株洲县| 越西县| 达拉特旗| 日土县| 元阳县| 广宁县| 高尔夫| 玉林市| 青冈县| 屏东县| 栾川县| 玛纳斯县| 西平县| 故城县| 鹤庆县| 阜新市| 闸北区| 平安县| 交城县| 枞阳县| 武乡县| 延安市| 封开县| 河曲县| 浮山县| 乐至县| 枝江市| 潜山县| 同江市| 阿图什市| 宝清县| 鄂伦春自治旗| 陇西县| 天等县| 高雄县| 汉源县| 肃宁县|