www.久久久久|狼友网站av天堂|精品国产无码a片|一级av色欲av|91在线播放视频|亚洲无码主播在线|国产精品草久在线|明星AV网站在线|污污内射久久一区|婷婷综合视频网站

當(dāng)前位置:首頁 > 公眾號(hào)精選 > Linux閱碼場(chǎng)
[導(dǎo)讀]本文以ext2文件系統(tǒng)為例來剖析一個(gè)真實(shí)的文件系統(tǒng)如何查找文件,這對(duì)于深入理解文件系統(tǒng)至關(guān)重要。1.準(zhǔn)備文件系統(tǒng)鏡像所用工具:dd、mkfs.ext2、hexdump、dumpe2fs、mount等工具1)制作100k大小鏡像文件$?dd?if=/dev/zero?of=ext2...

本文以ext2文件系統(tǒng)為例來剖析一個(gè)真實(shí)的文件系統(tǒng)如何查找文件,這對(duì)于深入理解文件系統(tǒng)至關(guān)重要。

1.準(zhǔn)備文件系統(tǒng)鏡像

所用工具:dd、mkfs.ext2、hexdump、dumpe2fs、mount等工具

1)制作100k大小鏡像文件

$?dd?if=/dev/zero?of=ext2.img?bs=1k?count=100
記錄了100 0?的讀入
記錄了100 0?的寫出
102400?bytes?(102?kB,?100?KiB)?copied,?0.00125457?s,?81.6?MB/s
2)格式化為ext2文件系統(tǒng)格式

$?mkfs.ext2?ext2.img
mke2fs?1.44.1?(24-Mar-2018)
丟棄設(shè)備塊:?完成????????????????????????????
創(chuàng)建含有?100?個(gè)塊(每塊?1k)和?16?個(gè)inode的文件系統(tǒng)

正在分配組表:?完成????????????????????????????
正在寫入inode表:?完成????????????????????????????
寫入超級(jí)塊和文件系統(tǒng)賬戶統(tǒng)計(jì)信息:?已完成
3)查看文件系統(tǒng)信息

$?dumpe2fs?ext2.img?
dumpe2fs?1.44.1?(24-Mar-2018)
Filesystem?volume?name:???
Last?mounted?on:??????????<not?available>
Filesystem?UUID:??????????3680e1d5-7f58-4324-9cbd-c7d382f0c3df
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:?????????clean
Errors?behavior:??????????Continue
Filesystem?OS?type:???????Linux
Inode?count:??????????????16
Block?count:??????????????100
Reserved?block?count:?????5
Free?blocks:??????????????79
Free?inodes:??????????????5
First?block:??????????????1
Block?size:???????????????1024
Fragment?size:????????????1024
Blocks?per?group:?????????8192
Fragments?per?group:??????8192
Inodes?per?group:?????????16
Inode?blocks?per?group:???2
Filesystem?created:???????Wed?May?26?15:23:33?2021
Last?mount?time:??????????n/a
Last?write?time:??????????Wed?May?26?15:23:33?2021
Mount?count:??????????????0
Maximum?mount?count:??????-1
Last?checked:?????????????Wed?May?26?15:23:33?2021
Check?interval:???????????0?()
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:??????5b0daa29-c2a0-4ab1-b09e-50992d3b070d


組?0:(塊?1-99)
??主?超級(jí)塊位于?1,組描述符位于?2-2
??塊位圖位于?3?( 2)
??Inode?位圖位于?4?( 3)
??Inode表位于?5-6?( 4)
??79?個(gè)可用?塊,5?個(gè)可用inode,2?個(gè)目錄?
??可用塊數(shù):?21-99
??可用inode數(shù):?12-16

這實(shí)際是是讀取文件系統(tǒng)的超級(jí)塊和塊組描述符信息。我們可以看的創(chuàng)建的文件系統(tǒng)的總體信息:

Filesystem magic number:0xEF53 ?表示為ext2文件系統(tǒng)Inode count: ? ? ? ? ? ? ?16 ? ? ?表示文件系統(tǒng)inode個(gè)數(shù)為16Block count: ? ? ? ? ? ? ?100 表示文件系統(tǒng)塊個(gè)數(shù)為100?Free blocks: ? ? ? ? ? ? ?79 ? ?表示文件系統(tǒng)空閑塊個(gè)數(shù)為79Free inodes: ? ? ? ? ? ? ?5 ? ? ? ?表示文件系統(tǒng)空閑inode個(gè)數(shù)為5?First block: ? ? ? ? ? ? ?1 ? ? ? ? ? 第一個(gè)數(shù)據(jù)塊編號(hào)為1(編號(hào)0保留為引導(dǎo)塊)?Block size: ? ? ? ? ? ? ? 1024 ? ?文件系統(tǒng)塊大小為1kBlocks per group: ? ? ? ? 8192 每個(gè)塊組8192個(gè)塊Inodes per group: ? ? ? ? 16 每個(gè)塊組個(gè)inode?Inode blocks per group: ? 2 ? ? 每個(gè)塊組2個(gè)inode塊?First inode: ? ? ? ?? 11 ? 分配的第一個(gè)inode號(hào)為11(除根inode外,根inode號(hào)為2)Inode size: ? ? ? ? ?128 ? ?inode大小為128字節(jié)塊組的信息(這里只有一個(gè)塊組) ? 1 - 99號(hào)?超級(jí)塊塊編號(hào)為 1 ? ??塊組描述符塊編號(hào)為 ?2 塊位圖塊編號(hào)為 3 ? ? ?inode位圖塊編號(hào)為 4
inode表位于5和6塊
79 個(gè)可用 塊,5 個(gè)可用inode,2 個(gè)目錄 (一個(gè)為根目錄一個(gè)為lost found,存放壞塊)?可用塊數(shù):21-99? ?可用inode數(shù):12-164)掛載文件系統(tǒng)并創(chuàng)建文件

創(chuàng)建一個(gè)掛載點(diǎn)目錄:
$??mkdir?root_dir

掛載:
$??sudo?mount?-t?ext2?ext2.img??root_dir

查看文件:
$?ls?-la
總用量?17
drwxr-xr-x?3?root??root???1024?5月??26?15:23?.
drwxrwxr-x?3?hanch?hanch??4096?5月??26?15:28?..
drwx------?2?root??root??12288?5月??26?15:23?lost found
可以發(fā)現(xiàn)有三個(gè)目錄:

?.
?..
?lost found
實(shí)際上是根目錄的數(shù)據(jù)塊的內(nèi)容(包含各個(gè)目錄項(xiàng))。

下面我們來創(chuàng)建一個(gè)目錄,目錄下創(chuàng)建文件:

$?sudo?mkdir?dir

$?cd?dir/
$?su
#?echo?hello?>?test.txt
現(xiàn)在目錄樹是這樣的:

$?tree
.
├──?dir
│???└──?test.txt
└──?lost found?[error?opening?dir]

2?directories,?1?file
后面我們會(huì)通過解析文件系統(tǒng)鏡像來觀察如何查找? /dir/test.txt 文件的

現(xiàn)在關(guān)注一下相關(guān)的索引節(jié)點(diǎn):

$?cd? dir

$?ls?-lai
總用量?3
12?drwxr-xr-x?2?root?root?1024?5月??26?15:57?.
?2?drwxr-xr-x?4?root?root?1024?5月??26?15:56?..
13?-rw-r--r--?1?root?root????6?5月??26?15:57?test.txt
可以發(fā)現(xiàn) /dir目錄下:當(dāng)前工作目錄下索引節(jié)點(diǎn)為12(dir目錄的),上一級(jí)目錄的索引節(jié)點(diǎn)為2(根目錄),test.txt文件的所有節(jié)點(diǎn)為13。記住這幾個(gè)索引節(jié)點(diǎn)后面我們會(huì)通過解析文件系統(tǒng)鏡像來獲得。

2.解析文件系統(tǒng)鏡像

1)dump文件系統(tǒng)鏡像

$?hexdump?-C?ext2.img

00000000??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00??|................|
*
00000400??10?00?00?00?64?00?00?00??05?00?00?00?4f?00?00?00??|....d.......O...|
00000410??05?00?00?00?01?00?00?00??00?00?00?00?00?00?00?00??|................|
00000420??00?20?00?00?00?20?00?00??10?00?00?00?ae?f8?ad?60??|.?...?.........`|
00000430??ae?f8?ad?60?01?00?ff?ff??53?ef?00?00?01?00?00?00??|...`....S.......|
00000440??75?f7?ad?60?00?00?00?00??00?00?00?00?01?00?00?00??|u..`............|
...
*
00018c00??0c?00?00?00?0c?00?01?02??2e?00?00?00?02?00?00?00??|................|
00018c10??0c?00?02?02?2e?2e?00?00??0d?00?00?00?e8?03?08?01??|................|
00018c20??74?65?73?74?2e?74?78?74??00?00?00?00?00?00?00?00??|test.txt........|
00018c30??00?00?00?00?00?00?00?00??00?00?00?00?00?00?00?00??|................|
*
00019000
根據(jù)之前dumpe2fs的信息我們知道:

鏡像文件中(均為16進(jìn)制顯示)

00000000 開始的1k大小 ?保留的引導(dǎo)塊?

塊1? ? 00000400 ?開始的1k大小 ?保存磁盤的超級(jí)塊 (dumpe2fs的部分信息從這里獲得)?

塊2? ? ?00000800 ? 開始的1k大小 ?保存塊組描述符 ? ?(dumpe2fs的部分信息從這里獲得)

塊3? ? ?00000c00 開始的1k大小 ?保存塊位圖 ?

塊4? ? ?00001000 ? ?開始的1k大小 ? 保存 Inode 位圖 ?

塊5 塊6? ? 00001400 ? ?開始的2k大小 ? 保存 Inode表 ?

?剩下的為數(shù)據(jù)塊

磁盤中的文件系統(tǒng)對(duì)象結(jié)構(gòu)在內(nèi)核如下文件定義:

fs/ext2/ext2.h

磁盤超級(jí)塊:
?struct?ext2_super_block?{?????????????????????????????????????????????????
?????????__le32??s_inodes_count;?????????/*?Inodes?count?*/????????????????
?????????__le32??s_blocks_count;?????????/*?Blocks?count?*/
?????????__le32??s_r_blocks_count;???????/*?Reserved?blocks?count?*/
?????????__le32??s_free_blocks_count;????/*?Free?blocks?count?*/
?????????__le32??s_free_inodes_count;????/*?Free?inodes?count?*/
?????????__le32??s_first_data_block;?????/*?First?Data?Block?*/
?????????__le32??s_log_block_size;???????/*?Block?size?*/
?????????__le32??s_log_frag_size;????????/*?Fragment?size?*/
?????????__le32??s_blocks_per_group;?????/*?#?Blocks?per?group?*/
?????????__le32??s_frags_per_group;??????/*?#?Fragments?per?group?*/
?????????__le32??s_inodes_per_group;?????/*?#?Inodes?per?group?*/
??...
}

磁盤塊組描述符:
struct?ext2_group_desc????????????????????????????????????????????????????
{
?????????????????????????????????????????????????????????????????????????
????????__le32??bg_block_bitmap;????????????????/*?Blocks?bitmap?block?*/?
????????__le32??bg_inode_bitmap;????????????????/*?Inodes?bitmap?block?*/?
????????__le32??bg_inode_table;?????????/*?Inodes?table?block?*/??????????
????????__le16??bg_free_blocks_count;???/*?Free?blocks?count?*/???????????
????????__le16??bg_free_inodes_count;???/*?Free?inodes?count?*/???????????
????????__le16??bg_used_dirs_count;?????/*?Directories?count?*/???????????
????????__le16??bg_pad;???????????????????????????????????????????????????
????????__le32??bg_reserved[3];???????????????????????????????????????????
};????????????????????????????????????????????????????????????????????????


磁盤inode:
?struct?ext2_inode?{?????????????????????????????????????????????????
?????????__le16??i_mode;?????????/*?File?mode?*/?????????????????????
?????????__le16??i_uid;??????????/*?Low?16?bits?of?Owner?Uid?*/??????
?????????__le32??i_size;?????????/*?Size?in?bytes?*/?????????????????
?????????__le32??i_atime;????????/*?Access?time?*/???????????????????
?????????__le32??i_ctime;????????/*?Creation?time?*/?????????????????
?????????__le32??i_mtime;????????/*?Modification?time?*/?????????????
?????????__le32??i_dtime;????????/*?Deletion?Time?*/?????????????????
?????????__le16??i_gid;??????????/*?Low?16?bits?of?Group?Id?*/???????
?????????__le16??i_links_count;??/*?Links?count?*/???????????????????
?????????__le32??i_blocks;???????/*?Blocks?count?*/??
?????...
??__le32??i_block[EXT2_N_BLOCKS];/*?Pointers?to?blocks?*/????????????????
?...
};?


磁盤目錄項(xiàng):
struct?ext2_dir_entry_2?{????????????????????????????????????????????????????
????????__le32??inode;??????????????????/*?Inode?number?*/???????????????????
????????__le16??rec_len;????????????????/*?Directory?entry?length?*/?????????
????????__u8????name_len;???????????????/*?Name?length?*/????????????????????
????????__u8????file_type;???????????????????????????????????????????????????
????????char????name[];?????????????????/*?File?name,?up?to?EXT2_NAME_LEN?*/?
};???????????????????????????????????????????????????????????????????????????

大家可以對(duì)照磁盤鏡像文件和磁盤數(shù)據(jù)結(jié)構(gòu)定義來解析出文件系統(tǒng)的超級(jí)塊和塊組描述符信息(可以發(fā)現(xiàn)和dumpe2fs工具顯示的是一致的,例如鏡像文件00000400 處四字節(jié)為10 00 00 00 ?是小端存儲(chǔ),所以為0x00000010=16);

3.路徑名查找

下面開始我們的重頭戲:查找文件系統(tǒng)中的? /dir/test.txt 文件

我們知道,使用文件系統(tǒng)給我最直觀也是最大的好處是:用戶可以通過一個(gè)路徑名來訪問文件,那么一個(gè)文件系統(tǒng)究竟如何來找到我們所需要的文件呢?下面我們?cè)敿?xì)來看ext2文件系統(tǒng)如何查找指定的文件的?(實(shí)際的內(nèi)核中路徑名查找比較復(fù)雜,考慮很多情況,如dentry cache查找、解析軟鏈接文件、上級(jí)目錄、掛載點(diǎn)等,當(dāng)然如果目錄分量是掛載點(diǎn)就會(huì)步進(jìn)到相應(yīng)文件系統(tǒng)的根目錄,后面文件系統(tǒng)掛載專題會(huì)講解,這里以簡(jiǎn)單的路徑解析來讓大家有個(gè)深刻的認(rèn)識(shí))。

1)查找根目錄

萬事開頭難,對(duì)于訪問一個(gè)目錄上掛載的文件系統(tǒng),內(nèi)核路徑名查找會(huì)判斷并找到掛載的文件系統(tǒng)的根目錄,這個(gè)過程在文件系統(tǒng)掛載的時(shí)候,會(huì)從磁盤上讀取并在內(nèi)存構(gòu)建超級(jí)塊實(shí)例,然后進(jìn)行的最重要的一步是讀取文件系統(tǒng)的根inode:

fs/ext2/super.c
ext2_fill_super
->root?=?ext2_iget(sb,?EXT2_ROOT_INO)???//EXT2_ROOT_INO為2,系統(tǒng)定義好的
?->raw_inode?=?ext2_get_inode(inode->i_sb,?ino,?
本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

9月2日消息,不造車的華為或?qū)⒋呱龈蟮莫?dú)角獸公司,隨著阿維塔和賽力斯的入局,華為引望愈發(fā)顯得引人矚目。

關(guān)鍵字: 阿維塔 塞力斯 華為

倫敦2024年8月29日 /美通社/ -- 英國汽車技術(shù)公司SODA.Auto推出其旗艦產(chǎn)品SODA V,這是全球首款涵蓋汽車工程師從創(chuàng)意到認(rèn)證的所有需求的工具,可用于創(chuàng)建軟件定義汽車。 SODA V工具的開發(fā)耗時(shí)1.5...

關(guān)鍵字: 汽車 人工智能 智能驅(qū)動(dòng) BSP

北京2024年8月28日 /美通社/ -- 越來越多用戶希望企業(yè)業(yè)務(wù)能7×24不間斷運(yùn)行,同時(shí)企業(yè)卻面臨越來越多業(yè)務(wù)中斷的風(fēng)險(xiǎn),如企業(yè)系統(tǒng)復(fù)雜性的增加,頻繁的功能更新和發(fā)布等。如何確保業(yè)務(wù)連續(xù)性,提升韌性,成...

關(guān)鍵字: 亞馬遜 解密 控制平面 BSP

8月30日消息,據(jù)媒體報(bào)道,騰訊和網(wǎng)易近期正在縮減他們對(duì)日本游戲市場(chǎng)的投資。

關(guān)鍵字: 騰訊 編碼器 CPU

8月28日消息,今天上午,2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)開幕式在貴陽舉行,華為董事、質(zhì)量流程IT總裁陶景文發(fā)表了演講。

關(guān)鍵字: 華為 12nm EDA 半導(dǎo)體

8月28日消息,在2024中國國際大數(shù)據(jù)產(chǎn)業(yè)博覽會(huì)上,華為常務(wù)董事、華為云CEO張平安發(fā)表演講稱,數(shù)字世界的話語權(quán)最終是由生態(tài)的繁榮決定的。

關(guān)鍵字: 華為 12nm 手機(jī) 衛(wèi)星通信

要點(diǎn): 有效應(yīng)對(duì)環(huán)境變化,經(jīng)營(yíng)業(yè)績(jī)穩(wěn)中有升 落實(shí)提質(zhì)增效舉措,毛利潤(rùn)率延續(xù)升勢(shì) 戰(zhàn)略布局成效顯著,戰(zhàn)新業(yè)務(wù)引領(lǐng)增長(zhǎng) 以科技創(chuàng)新為引領(lǐng),提升企業(yè)核心競(jìng)爭(zhēng)力 堅(jiān)持高質(zhì)量發(fā)展策略,塑強(qiáng)核心競(jìng)爭(zhēng)優(yōu)勢(shì)...

關(guān)鍵字: 通信 BSP 電信運(yùn)營(yíng)商 數(shù)字經(jīng)濟(jì)

北京2024年8月27日 /美通社/ -- 8月21日,由中央廣播電視總臺(tái)與中國電影電視技術(shù)學(xué)會(huì)聯(lián)合牽頭組建的NVI技術(shù)創(chuàng)新聯(lián)盟在BIRTV2024超高清全產(chǎn)業(yè)鏈發(fā)展研討會(huì)上宣布正式成立。 活動(dòng)現(xiàn)場(chǎng) NVI技術(shù)創(chuàng)新聯(lián)...

關(guān)鍵字: VI 傳輸協(xié)議 音頻 BSP

北京2024年8月27日 /美通社/ -- 在8月23日舉辦的2024年長(zhǎng)三角生態(tài)綠色一體化發(fā)展示范區(qū)聯(lián)合招商會(huì)上,軟通動(dòng)力信息技術(shù)(集團(tuán))股份有限公司(以下簡(jiǎn)稱"軟通動(dòng)力")與長(zhǎng)三角投資(上海)有限...

關(guān)鍵字: BSP 信息技術(shù)
關(guān)閉
關(guān)閉