第五章文件系統(tǒng)_第1頁
第五章文件系統(tǒng)_第2頁
第五章文件系統(tǒng)_第3頁
第五章文件系統(tǒng)_第4頁
第五章文件系統(tǒng)_第5頁
已閱讀5頁,還剩30頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、第第5章章 Linux內(nèi)核內(nèi)核簡介簡介文件系統(tǒng)為什么要進(jìn)行分區(qū)格式化?因?yàn)楦鞣N操作系統(tǒng)都必須按照一定的方式來管理磁盤,而只有格式化才能使磁盤的結(jié)構(gòu)能被操作系統(tǒng)認(rèn)識。 因?yàn)槊糠N操作系統(tǒng)所配置的文件屬性/權(quán)限并不相同, 為了存放這些文件所需的數(shù)據(jù),因此就需要分區(qū)進(jìn)行格式化,以成為操作系統(tǒng)能夠利用的文件系統(tǒng)格式(filesystem)。文件系統(tǒng)是如何運(yùn)行的呢?這與操作系統(tǒng)的文件數(shù)據(jù)有關(guān)。較新的操作系統(tǒng)的文件數(shù)據(jù)除了文件實(shí)際內(nèi)容外, 通常含有非常多的屬性,例如 Linux 操作系統(tǒng)的文件權(quán)限(rwx)與文件屬性(擁有者、群組、時間參數(shù)等)。文件系統(tǒng)通常會將這兩部份的數(shù)據(jù)分別存放在不同的區(qū)塊,權(quán)限與屬性

2、放置到 inode 中,至于實(shí)際數(shù)據(jù)則放置到 data block 區(qū)塊中。 另外,還有一個超級區(qū)塊 (superblock) 會記錄整個文件系統(tǒng)的整體信息,包括 inode 與 block 的總量、使用量、剩余量等。每個 inode 與 block 都有編號,至于這三個數(shù)據(jù)的意義可以簡略說明如下:superblock:記錄此 filesystem 的整體信息,包括inode/block的總量、使用量、剩余量, 以及文件系統(tǒng)的格式與相關(guān)信息等;inode:記錄文件的屬性,一個文件占用一個inode,同時記錄此文件的數(shù)據(jù)所在的 block 號碼;block:實(shí)際記錄文件的內(nèi)容,若文件太大時,會占

3、用多個 block 。我們將 inode 與 block 區(qū)塊用圖解來說明一下,文件系統(tǒng)先格式化出 inode 與 block 的區(qū)塊,假設(shè)某一個文件的屬性與權(quán)限數(shù)據(jù)是放置到 inode 4 號,而這個 inode 記錄了文件數(shù)據(jù)的實(shí)際放置點(diǎn)為 2, 7, 13, 15 這四個 block 號碼,操作系統(tǒng)就能夠據(jù)此來排列磁盤的閱讀順序,可以將四個 block 內(nèi)容讀出來!這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng)(indexed allocation)。我們以閃存常用的FAT 格式為例做對比。FAT 這種格式每個 block 號碼都記錄在前一個 block 當(dāng)中, 他的讀取方式如下圖所示:Lin

4、ux 的的 EXT2 文件系統(tǒng)文件系統(tǒng)inode 的內(nèi)容在記錄文件的權(quán)限與相關(guān)屬性,至于 block 區(qū)塊則是在記錄文件的實(shí)際內(nèi)容。Ext2 文件系統(tǒng)在格式化的時候基本上是區(qū)分為多個區(qū)塊群組 (block group) 的,每個區(qū)塊群組都有獨(dú)立的 inode/block/superblock 系統(tǒng)。data block (數(shù)據(jù)區(qū)塊數(shù)據(jù)區(qū)塊)data block 是用來放置文件內(nèi)容數(shù)據(jù)地方,在 Ext2 文件系統(tǒng)中所支持的 block 大小有 1K, 2K 及 4K 三種而已。在格式化時 block 的大小就固定了,且每個 block 都有編號,以方便 inode 的記錄。Block 大小1KB

5、2KB4KB最大單一文件限制16GB256GB2TB最大文件系統(tǒng)總?cè)萘?TB8TB16TBExt2 文件系統(tǒng)的 block 基本限制如下:原則上,block 的大小與數(shù)量在格式化完就不能夠再改變了(除非重新格式化);每個 block 內(nèi)最多只能夠放置一個文件的數(shù)據(jù);如果文件大于 block 的大小,則一個文件會占用多個 block 數(shù)量;若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費(fèi))。例題: 假設(shè)你的Ext2文件系統(tǒng)使用 4K block ,而該文件系統(tǒng)中有 10000 個小文件,每個文件大小均為 50bytes, 請問此時你的磁盤浪費(fèi)多少容量? 答

6、:每個 block 會浪費(fèi) 4096 - 50 = 4046 (byte), 所有文件容量為:50 (bytes) x 10000 = 488.3Kbytes,浪費(fèi)的容量為: 4046 (bytes) x 10000 = 38.6MBytes 。inodeinode 的內(nèi)容是記錄文件的屬性以及該文件實(shí)際數(shù)據(jù)是放置在哪幾號 block 內(nèi)! inode 記錄的文件數(shù)據(jù)至少以下這些:該文件的存取模式(read/write/excute);該文件的擁有者與群組(owner/group);該文件的容量;該文件創(chuàng)建或狀態(tài)改變的時間(ctime);最近一次的讀取時間(atime);最近修改的時間(mtim

7、e);定義文件特性的旗標(biāo)(flag),如 SetUID.;該文件真正內(nèi)容的指向 (pointer);inode 的數(shù)量與大小也是在格式化時就已經(jīng)固定了,除此之外 inode 還有些什么特點(diǎn)呢?每個 inode 大小均固定為 128 bytes;每個文件都僅會占用一個 inode ;文件系統(tǒng)能夠創(chuàng)建的文件數(shù)量與 inode 的數(shù)量有關(guān);系統(tǒng)讀取文件時需要先找到 inode,并分析 inode 所記錄的權(quán)限與用戶是否符合,若符合才能夠開始實(shí)際讀取 block 的內(nèi)容。多重索引結(jié)構(gòu)多重索引結(jié)構(gòu)Superblock (超級區(qū)塊)Superblock 是記錄整個 filesystem 相關(guān)信息的地方,

8、沒有 Superblock ,就沒有這個 filesystem 了。他記錄的信息主要有:block 與 inode 的總量;未使用與已使用的 inode / block 數(shù)量;block 與 inode 的大小 (block 為 1, 2, 4K,inode 為 128 bytes);filesystem 的掛載時間、最近一次寫入數(shù)據(jù)的時間、最近一次檢驗(yàn)磁盤 (fsck) 的時間等文件系統(tǒng)的相關(guān)信息;一個 valid bit 數(shù)值,若此文件系統(tǒng)已被掛載,則 valid bit 為 0 ,若未被掛載,則 valid bit 為 1 。Filesystem Description (塊組描述符)塊

9、組描述符)這個區(qū)段可以描述每個 block group 的開始與結(jié)束的 block 號碼,以及說明每個區(qū)段 (superblock, bitmap, inodemap, data block) 分別介于哪一個 block 號碼之間。block bitmap (區(qū)塊對照表區(qū)塊對照表)從 block bitmap 當(dāng)中可以知道哪些 block 是空的,因此我們的系統(tǒng)就能夠很快速的找到可使用的空間來處置文件。刪除某些文件時,那么那些文件原本占用的 block 號碼就得要釋放出來, 此時在 block bitmap 當(dāng)中相對應(yīng)到該 block 號碼的標(biāo)志就得要修改成為未使用中!這就是 bitmap 的

10、功能。inode bitmap (inode 對照表對照表)inode bitmap 則是記錄使用與未使用的 inode 號碼df指令格式:df 選項(xiàng) 文件功能:顯示指定磁盤文件的可用空間。如果沒有文件名被指定,則所有當(dāng)前被掛載的文件系統(tǒng)的可用空間將被顯示。參數(shù):-a 全部文件系統(tǒng)列表-h 方便閱讀方式顯示-i 顯示inode信息-k 區(qū)塊為1024字節(jié)-l 只顯示本地文件系統(tǒng)-T 文件系統(tǒng)類型范例:找出我的根目錄磁盤文件名,并觀察文件系統(tǒng)的相關(guān)信息范例:找出我的根目錄磁盤文件名,并觀察文件系統(tǒng)的相關(guān)信息rootwww # df =這個命令可以叫出目前掛載的裝置這個命令可以叫出目前掛載的裝置F

11、ilesystem 1K-blocks Used Available Use% Mounted on/dev/hdc2 9920624 3822848 5585708 41% / /dev/hdc3 4956316 141376 4559108 4% /home/dev/hdc1 101086 11126 84741 12% /boottmpfs 371332 0 371332 0% /dev/shm格式:dumpe2fs -bh 裝置文件名選項(xiàng)與參數(shù):-b :列出保留為壞軌的部分(一般用不到吧???)-h :僅列出 superblock 的數(shù)據(jù),不會列出其他的區(qū)段內(nèi)容!rootwww # du

12、mpe2fs /dev/hdc2dumpe2fs 1.39 (29-May-2006)Filesystem volume name: /1 =這個是文件系統(tǒng)的名稱(Label)Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery sparse_super large_fileDefault mount options: user_xattr acl =默認(rèn)掛載的參數(shù)Filesystem state: clean =這個文件系統(tǒng)是沒問題的(clean)Errors beha

13、vior: ContinueFilesystem OS type: LinuxInode count: 2560864 =inode的總數(shù)Block count: 2560359 =block的總數(shù)Free blocks: 1524760 =還有多少個 block 可用Free inodes: 2411225 =還有多少個 inode 可用First block: 0Block size: 4096 =每個 block 的大小Filesystem created: Fri Sep 5 01:49:20 2008Last mount time: Mon Sep 22 12:09:30 2008L

14、ast write time: Mon Sep 22 12:09:30 2008Last checked: Fri Sep 5 01:49:20 2008First inode: 11Inode size: 128 =每個 inode 的大小Journal inode: 8 Journal backup: inode blocksJournal size: 128MGroup 0: (Blocks 0-32767) =第一個 data group 內(nèi)容, 包含 block 的啟始/結(jié)束號碼 Primary superblock at 0, Group descriptors at 1-1 =超

15、級區(qū)塊在 0 號 block Reserved GDT blocks at 2-626 Block bitmap at 627 (+627), Inode bitmap at 628 (+628) Inode table at 629-1641 (+629) =inode table 所在的 block0 free blocks, 32405 free inodes, 2 directories =所有 block 都用完了! Free blocks: Free inodes: 12-32416 =剩余未使用的 inode 號碼Group 1: (Blocks 32768-65535)ext2

16、和目錄和目錄樹樹每個文件(不管是一般文件還是目錄文件)都會占用一個 inode , 且可依據(jù)文件內(nèi)容的大小來分配多個 block 給該文件使用。而我們知道目錄的內(nèi)容是記錄文件名, 一般文件才是實(shí)際記錄數(shù)據(jù)內(nèi)容的地方。那么目錄與文件在 Ext2 文件系統(tǒng)當(dāng)中是如何記錄數(shù)據(jù)的呢?當(dāng)我們在 Linux 下的 ext2 文件系統(tǒng)創(chuàng)建一個目錄時,ext2 會分配一個 inode 與至少一塊 block 給該目錄。其中,inode 記錄該目錄的相關(guān)權(quán)限與屬性,并可記錄分配到的那塊 block 號碼; 而 block 則是記錄在這個目錄下的文件名與該文件名占用的 inode 號碼數(shù)據(jù)。也就是說目錄所占用的

17、block 內(nèi)容在記錄如下的信息:當(dāng)創(chuàng)建一個目錄時,文件系統(tǒng)會為該目錄分配一個inode和至少一個block。該inode記錄該目錄的屬性,并指向那塊block。該block記錄該目錄下相關(guān)聯(lián)的文件或目錄的關(guān)聯(lián)性和名字。 當(dāng)創(chuàng)建一個文件時,文件系統(tǒng)會為該文件分配至少一個inode和與該文件大小相對應(yīng)的數(shù)量的block。該inode記錄該文件的屬性,并指向block。 如果一個目錄中的文件數(shù)太多,以至于1個block容納不下這么多文件時,Linux的文件系統(tǒng)會為該目錄分配更多的block。要讀取 /etc/passwd 這個文件時,系統(tǒng)是如何讀取的呢?Ext2 是如何新建文件的呢? 先確定用戶對

18、于欲新增文件的目錄是否具有 w 與 x 的權(quán)限,若有的話才能新增;根據(jù) inode bitmap 找到?jīng)]有使用的 inode 號碼,并將新文件的權(quán)限/屬性寫入;根據(jù) block bitmap 找到?jīng)]有使用中的 block 號碼,并將實(shí)際的數(shù)據(jù)寫入 block 中,且升級 inode 的 block 指向數(shù)據(jù);將剛剛寫入的 inode 與 block 數(shù)據(jù)同步升級 inode bitmap 與 block bitmap,并升級 superblock 的內(nèi)容。一般來說,我們將 inode 與 data block 稱為數(shù)據(jù)存放區(qū)域,至于其他例如 superblock、 block bitmap 與

19、 inode bitmap 等區(qū)段就被稱為 metadata (中介數(shù)據(jù)中介數(shù)據(jù)) ,因?yàn)?superblock, inode bitmap 及 block bitmap 的數(shù)據(jù)是經(jīng)常變動的,每次新增、移除、編輯時都可能會影響到這三個部分的數(shù)據(jù),因此稱為中介數(shù)據(jù)。 日志式文件系統(tǒng)日志式文件系統(tǒng) (Journaling filesystem)避免文件系統(tǒng)不一致的情況發(fā)生:在 filesystem 當(dāng)中規(guī)劃出一個區(qū)塊,該區(qū)塊專門記錄寫入或修訂文件時的步驟預(yù)備:當(dāng)系統(tǒng)要寫入一個文件時,會先在日志記錄區(qū)塊中紀(jì)錄某個文件準(zhǔn)備要寫入的信息;實(shí)際寫入:開始寫入文件的權(quán)限與數(shù)據(jù);開始升級 metadata 的數(shù)據(jù);結(jié)束:完成數(shù)據(jù)與 metadata 的升級后,在日志記錄區(qū)塊當(dāng)中完成該文件的紀(jì)錄。

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論