ext3文件系統(tǒng)基礎(chǔ)知識點有哪些,相信很多沒有經(jīng)驗的人對此束手無策,為此本文總結(jié)了問題出現(xiàn)的原因和解決方法,通過這篇文章希望你能解決這個問題。
創(chuàng)新互聯(lián)公司從2013年成立,是專業(yè)互聯(lián)網(wǎng)技術(shù)服務(wù)公司,擁有項目做網(wǎng)站、成都網(wǎng)站建設(shè)網(wǎng)站策劃,項目實施與項目整合能力。我們以讓每一個夢想脫穎而出為使命,1280元河南做網(wǎng)站,已為上家服務(wù),為河南各地企業(yè)和個人服務(wù),聯(lián)系電話:18982081108
文件系統(tǒng)的構(gòu)成
引導(dǎo)塊:存儲引導(dǎo)代碼
超級塊:單塊大小/總塊數(shù);每組塊數(shù);i節(jié)點數(shù)/每組i節(jié)點數(shù);卷名;最后寫入時間/掛載時間/掛載路徑;空閑i節(jié)點/塊信息(分配新i節(jié)點/塊時使用)
組描述符表:每個32字節(jié),描述每組塊位圖/i節(jié)點位圖/i節(jié)點表起始塊號,塊組中空閑塊數(shù)和目錄數(shù);文件系統(tǒng)中所有塊被等分為若干塊組,最后一個可能略?。?br/>塊位圖:占有1個數(shù)據(jù)塊
I節(jié)點位圖:占用1個數(shù)據(jù)塊,通常用不完
I節(jié)點表:存放inode,ext3下每個128字節(jié),包含12個直接塊指針/1個1級間接快指針/1個2級間接塊指針/1個3級塊指針
數(shù)據(jù)區(qū):存放文件數(shù)據(jù)
對于具備稀疏超級塊特性的文件系統(tǒng),只在組號為3/5/7的冪的塊組備份超級塊和塊組描述符,否則每個塊組都有備份;
目錄
目錄也是文件的一種,除了inode,每個目錄至少占有1個數(shù)據(jù)塊,以目錄項的形式存儲其下的文件列表;
存儲內(nèi)容包括:文件名的ASCII碼/名字長度/本目錄項長度/i節(jié)點號/文件類型
目錄項長度=max((8字節(jié)固定+文件名), 4*n),對于文件file.txt,其長度為16;
硬連接:本質(zhì)上為指向同一inode的不同目錄項而已
--假定每個塊組的inode數(shù)量為2008
創(chuàng)建文件
在/dir1下建立file.txt文件,大致步驟:
1 讀取超級塊(固定位置),獲取文件系統(tǒng)基本信息(塊大小/每組inode數(shù)量);讀取組描述符表(固定位置),獲知各個塊組布局情況;
2 讀取根目錄,從其目錄項中找到dir1以及其inode
—其inode為2號(固定,位于0號塊組),而inode表開始于5號塊,讀取5號塊訪問第2個inode,其塊指針顯示根目錄的目錄塊號為256;
--讀取256號塊,遍歷其目錄項,直至找到dir1的目錄項,顯示其inode號為4724;更新根目錄最后訪問時間;
3 創(chuàng)建file.txt的目錄項
--對dir1的inode號整除運算int(4724/2008)確定其位于2號塊組,其余數(shù)708為該inode表項號,依據(jù)2號組描述符表項獲知其i節(jié)點表起始于16387塊,
--讀取該塊, 獲取其708號表項,顯示 dir1目錄塊號為17216
--讀取17216塊查找空閑空間,新建文件file.txt名字長度7字符,需要16字節(jié)空間
--創(chuàng)建好目錄項,更新該目錄的最后修改時間和最后改變時間,并其改變情況記錄入日志
4 創(chuàng)建inode
--優(yōu)先在父目錄同一塊組創(chuàng)建,即2號組
--讀取2號塊組位于16386塊的i節(jié)點位圖,獲知尚未分配的i節(jié)點號4850,將其對應(yīng)bit置1,并將超級塊/組描述符表中空閑inode數(shù)減1
--將該inode地址添加到上一步創(chuàng)建的目錄項中
--初始化4850號inode
5 分配數(shù)據(jù)塊
File.txt需要6個數(shù)據(jù)塊,查看2號塊組的塊位圖,在本塊組中找出6個空閑塊并將相應(yīng)bit置1,將這些塊分配到4850號inode的直接塊指針中
更新超級塊/組描述符中的空閑塊數(shù),更新inode的最后修改時間和改變時間
6 寫數(shù)據(jù)
將file.txt內(nèi)容寫入新分配的塊中
刪除文件
1 讀取超級塊 & 組描述符表
2 獲取dir1的inode
--根目錄inode號為2(位于0號塊組),i節(jié)點表起始于第5塊(組描述符表),從第5號塊讀取i節(jié)點表并訪問第2個表項
--從inode的直接塊指針獲知根目錄的目錄塊為256號塊
--讀取256號塊,遍歷目錄項直至找到dir1記錄,其i節(jié)點號為4724
--更新根目錄最后訪問時間
3 獲取file.txt的inode,回收目錄項
--dir1的i節(jié)點號為4724,取整運算int(4724/2008)=2,位于2號塊組,而2號組的i節(jié)點描述符起始于16387號塊(組描述符表)
--取余運算(4724%2008)=708,則從16387塊開始讀取第708項inode,inode顯示dir1目錄塊號為17216
--讀取17216號塊遍歷目錄項,直至找到file.txt匹配項,獲取其i節(jié)點號為4850
--取消該目錄項,其前一項的長度值直接指向其下一項開始處
4 回收file.txt的數(shù)據(jù)塊,
--從2號組的i節(jié)點表獲取4850號i節(jié)點項,將鏈接數(shù)減1,若鏈接數(shù)為0則回收該inode(相應(yīng)bit置0)
--對應(yīng)的6個塊的塊位圖bit置0
注:具體請參考馬林編著的《數(shù)據(jù)重現(xiàn)》
常見問題:
1 為何df顯示磁盤滿但du卻顯示有空閑空間?
刪除文件時有進程正在打開,所以實際占有空間并未釋放;
刪除或truncate一個inode時,先將該inode添加到orphan inode單向鏈表頭,super block結(jié)構(gòu)有相應(yīng)字段s_last_orphan指向此鏈表;
如果執(zhí)行期間系統(tǒng)崩潰,則下次加載該文件系統(tǒng)時會檢查該鏈表并繼續(xù)刪除或truncate操作;
以下是ext4刪除inode的正常過程
-->do_unlinkat
-->vfs_unlink
-->ext4_unlink
-->ext4_delete_entry從該文件所在目錄中刪除該文件
-->ext4_orphan_add
-->iput
-->iput_final
-->generic_drop_inode
-->generic_delete_inode(inode);
-->ext4_delete_inode
-->ext4_truncate清除磁盤上的索引信息
-->ext4_orphan_del
-->ext4_free_inode從內(nèi)存中和磁盤上分別刪除該inode
http://blogimg.chinaunix.net/blog/upfile2/101008204403.pdf
ext3采用間接塊映射,當(dāng)文件較大時則映射表開銷會很高,刪除文件時會將inode中的塊指針清空;
Ext4引入extent,減少了元數(shù)據(jù)塊的數(shù)量,unlink/truncate的開銷會下降不少,每個extent結(jié)構(gòu)體12字節(jié),每個inode最多可存放4個;
大部分文件只需一些extent來描述logical-to-physical塊映射,然而對于稀疏或碎片化十分嚴(yán)重的文件,extent map效率則沒那么高;
對此需借助于ext4改進的塊分配器,盡量將小文件緊鄰存放同時為大文件分配連續(xù)區(qū)域;
http://ols.fedoraproject.org/OLS/Reprints-2008/kumar-reprint.pdf
2 如何分配數(shù)據(jù)塊/inode/目錄項
分配塊
優(yōu)先在其inode所屬塊組分配,
分配inode
文件:優(yōu)先在其父目錄所在組創(chuàng)建;目錄:優(yōu)先在空余空間較多的組創(chuàng)建
分配目錄項
從前向后遍歷該目錄的目錄項,對每個目錄項,依據(jù)文件名長度計算其改目錄項所需長度,并將其同實際長度值比較,如果不一致則說明要么為最后一項,要么跨越了若干被刪除的目錄項,則嘗試在此處分配新目錄項;如當(dāng)前塊沒有足夠空間,則掛起文件名并分配新塊,linux不允許目錄項跨越塊;
看完上述內(nèi)容,你們掌握ext3文件系統(tǒng)基礎(chǔ)知識點有哪些的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!
網(wǎng)頁標(biāo)題:ext3文件系統(tǒng)基礎(chǔ)知識點有哪些
轉(zhuǎn)載注明:http://redsoil1982.com.cn/article30/jhedpo.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站策劃、網(wǎng)站維護、電子商務(wù)、網(wǎng)站收錄、虛擬主機、云服務(wù)器
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)