<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    Linux - 3. 文件系統--詳細講解

    Posted on 2011-01-06 11:21 幻海藍夢 閱讀(346) 評論(0)  編輯  收藏 所屬分類: Linux
    Linux 分區以柱面劃分,且必須格式化成 Linux 標準文件系統 (ext2/ext3 等) 才能使用。通常來說,每個分區只能格式化為一個文件系統。

    盡 管硬盤的最小存儲單位是扇區,但對于文件系統而言,扇區的讀寫效率過低,因此以 n 個扇區為一個塊 (Block),這是文件系統的最小存儲單位,當前支持 1024/2048/4096 三種大小的塊。當分區存儲大文件時,大的塊有助于提高讀寫效率。以 10MB 文件為例,扇區是 512 字節,需要讀取 (I/O) 20480 次,而對于 4096 字節的塊而言只需 2560 次。但也正因為塊是最小存儲單位,對于眾多的小文件來說,存儲空間浪費也就非常嚴重。即便文件小于塊,其剩余空間也是無法繼續使用的。

    1. EXT2 文件系統結構

    在 EXT2 文件系統中,文件存儲分為 Inode 和數據塊兩部分。inode 中存儲了文件元數據(metadata 文件屬性)信息和塊指針(指向數據塊位置),數據塊中存儲了文件內容數據。整個分區被劃分為 n 個塊組 (Block Group),每個塊組又劃分為多個區域。

    uploads/200907/30_115715_1.png
    • Super Block: 超級塊,記錄文件系統信息,包括塊和 inode 總量、使用情況等等。
    • Group Description: 組描述,記錄塊組信息。
    • Block Bitmap: 塊位圖,記錄塊使用狀態,用于分配和回收數據塊。
    • Inode Bitmap: Inode 位圖,記錄 Inode 使用狀態,用于分配和回收 Inode。
    • Inode Table: Inode 表,存儲 Inode。
    • Data Blocks: 數據塊。
    可以用 dumpe2fs 查看分區的相關信息
    $ sudo dumpe2fs /dev/sda1

    Filesystem magic number: 0xEF53
    Filesystem revision #: 1 (dynamic)
    Filesystem OS type: Linux
    Inode count: 498736
    Block count: 1994060
    Reserved block count: 99703
    Free blocks: 1333369
    Free inodes: 381040
    First block: 0
    Block size: 4096
    Fragment size: 4096
    Reserved GDT blocks: 486
    Blocks per group: 32768
    Fragments per group: 32768
    Inodes per group: 8176
    Inode blocks per group: 511
    Filesystem created: Sun Jul 19 14:03:01 2009
    Last mount time: Wed Jul 29 11:21:01 2009
    Last write time: Wed Jul 29 11:21:01 2009
    First inode: 11
    Block size: 4096
    Inode size: 256

    ... ...

    Group 0: (Blocks 0-32767)
    Primary superblock at 0, Group descriptors at 1-1
    Reserved GDT blocks at 2-487
    Block bitmap at 488 (+488), Inode bitmap at 489 (+489)
    Inode table at 490-1000 (+490)
    1172 free blocks, 8161 free inodes, 2 directories
    Free blocks: 19992, 20034-20035, 20037-20043, 31605-31606, 31608-32767
    Free inodes: 16-8176

    Group 1: (Blocks 32768-65535)
    Backup superblock at 32768, Group descriptors at 32769-32769
    Reserved GDT blocks at 32770-33255
    Block bitmap at 33256 (+488), Inode bitmap at 33257 (+489)
    Inode table at 33258-33768 (+490)
    20522 free blocks, 4056 free inodes, 175 directories
    Free blocks: 33771-33773, 34053-34062, 34107-34136, 34141, ...
    Free inodes: 11956-11957, 11965, 11984, 11988, 11991, 11998, ...

    Group 2: (Blocks 65536-98303)
    Block bitmap at 65536 (+0), Inode bitmap at 65537 (+1)
    Inode table at 65538-66048 (+2)
    17487 free blocks, 5021 free inodes, 724 directories
    Free blocks: 67305-67307, 67309, 68035, 68043-68044, 70506-70514, ...
    Free inodes: 19508-24528

    2. Inode 結構

    Inode 結構中保存了文件的屬性信息和數據塊指針。每個 inode 大小為 128 字節。

    uploads/200907/30_115720_2.png
    • Mode: 包含 inode 描敘的內容以及用戶使用權限。EXT2 中的 inode 可以表示一個文件、目錄、符號連接、塊設備、字符設備或 FIFO。
    • Owner Information: 文件或目錄所有者(用戶/組)標志符。文件系統根據它可以進行正確的存取。
    • Size: 文件尺寸 (單位: 字節)。
    • Timestamps: inode 創建及最后一次被修改的時間。
    • Direct Blocks: 數據塊直接指針快,可存儲 12 個直接指針,也就是說指向 12 個數據塊。
    • Indirect Blocks: 單級間接指針快,指向一個數據塊。假設每個塊為 1024B,那么一共可以存儲 1024 / 4 = 256 個數據塊指針。
    • Double Indirect: 二級間接指針快。可存儲 256 * 256 個數據塊指針。
    • Tripe Indirect: 三級間接指針快。可存儲 256 * 256 * 256 個數據塊指針。
    當 Block = 1024 時,最大文件尺寸 = 1024 * 12 + 1024 * 256 + 1024 * 256 * 256 + 1024 * 256 * 256 * 256 = 16843020 KB (約 16 GB)。

    所有的 Inode 都存儲在 Inode Table 中,當我們訪問一個文件時,將完成如下步驟。

    (1) 首先訪問文件根目錄的 Inode,從根目錄的數據塊中,我們可以找到該目錄下所有文件和子目錄的 Inode。
    (2) 利用找到的 Inode 從 Inode table 中繼續訪問下一級目錄,直到獲取文件的 Inode。
    (3) 利用文件的 Inode 我們就可以讀取文件數據塊的內容了。

    uploads/200907/30_122259_4.png


    目錄是一種特殊的文件,它的數據塊中存儲了該目錄中所有文件和目錄的名稱以及 Inode (見下面的示意圖)。從 Inode 數據結構上我們也可以看到,其內部并沒有保存文件名的區域。

    uploads/200907/30_121608_3.png


    一個分區所能容納的文件數量和 Inode 數量有關,因為一個文件最少要占用一個 Inode (也可能是多個,比如硬鏈接)。當目錄下的文件數量過多時,那么就需要多個塊來記錄關聯數據。

    3. EXT3 文件系統

    操 作一個文件時,我們除了在數據塊寫入數據外,還需更新 Inode 中的相關信息。若在其完成操作前的任何時候出現異常(比如斷電)都會導致 Inode 中數據和數據塊不一致。如果發生這類問題,EXT2 文件系統會在重啟時進行檢查,從超級塊開始逐步校驗,這個過程非常耗時。EXT3 是 EXT2 的升級版本,其代碼、磁盤格式和元數據都和 EXT2 相同,這意味著 EXT2 可以無損轉化為 EXT3 。

    EXT3 是一種日志文件系統,它會在操作文件前記錄文件操作日志,在文件讀寫完成后,完成該日志,這類似于數據庫的事務機制。這種日志模式的好處就是在發生錯誤時,直接檢查日志就可獲知問題所在。

    ---------- 分割線 -------------

    Linux 支持很多種文件系統,本文不作一一描述,可自行參考相關文檔。
    原文:http://www.rainsts.net/article.asp?id=842
    主站蜘蛛池模板: 羞羞视频在线免费观看| 久久综合久久综合亚洲| 国产精品无码免费专区午夜| 亚洲偷自拍拍综合网| jizzjizz亚洲日本少妇| 亚洲一区二区三区在线观看网站| 一区二区三区在线免费看| 亚洲AV日韩精品久久久久| 亚洲色欲色欱wwW在线| 久久久久国产精品免费免费搜索| 亚洲av成人一区二区三区| 亚洲精品动漫免费二区| 亚洲人成网亚洲欧洲无码久久| 91免费福利视频| 亚洲制服中文字幕第一区| 18国产精品白浆在线观看免费 | 亚洲videos| 18禁止观看免费私人影院| 亚洲小说图区综合在线| 国产a级特黄的片子视频免费| 一级特级女人18毛片免费视频| 国产成人无码综合亚洲日韩| 国产AV无码专区亚洲AV麻豆丫 | 亚洲色WWW成人永久网址| 嫩草在线视频www免费看| 亚洲国产成人精品无码久久久久久综合 | 亚洲国产精品成人久久蜜臀 | 亚洲av综合avav中文| 久久国产高潮流白浆免费观看| 亚洲人成电影在线播放| 欧洲 亚洲 国产图片综合| 免费国产小视频在线观看| 亚洲国产精品无码久久久| 国产精品免费大片| 亚洲日韩一页精品发布| 99久久精品免费视频| 亚洲a一级免费视频| 毛片免费观看网址| 久久精品免费大片国产大片| 亚洲欧洲春色校园另类小说| 四虎影视永久免费观看网址|