EXT2/EXT3 檔案系統

  • EXT2 檔案系統建立
    1. 除 superblock 外,還依據分割槽大小給予數個 block group。

      \begin{picture}(200,200)(-50,0)
\multiput(0,0)(0,120){2}{\dashbox{}(260,80)[c]{}}
......
    2. 每個 block group 包含:
      1. Group description:記錄此 block 由何處開始記錄﹔
      2. Block bitmap:記錄那個 block 有沒有被使用﹔
      3. Inode bitmap:記錄那個 inode 有沒有被使用﹔
      4. Inode table:每個 inode 資料存儲區﹔
      5. Data blocks:每個 block 資料存儲區。
  • 如何讀取檔案內容?
    1. 檔案內容分成檔案屬性及內容,分別儲存於 inode 及 block。
      1. inode 記錄該目錄或檔案的相關屬性,並指向分配到的 block。
      2. block 記錄該目錄下的相關聯檔案或目錄;或檔案的內容。
    2. 例題:Linux 系統讀取檔案 /etc/issue。
      1. 先由根目錄 / 取得 /etc 的 inode,經由 inode 進入該目錄所屬 block﹔
      2. 於該目錄所屬 block 所記錄的檔案關聯性,取得 issue 的 inode﹔
      3. 經由 issue 的 inode 提供的 block 指向,取得檔案內容。

      \begin{picture}(350,120)(0,0)
\put(20,0){\dashbox{}(300,100)}
......
  • 區塊 (Block):檔案系統格式化時指定之最小儲存單位。
    1. 以磁區及區塊(若設為連續八個磁區)做為最小儲存單位之比較:
      1. 磁區為 512bytes,10 MBytes 的檔案,磁頭要讀取 20480 次。
      2. 區塊為 4 kBytes,10 MBytes 的檔案,磁頭只要讀取 2560 次。
    2. 一個 block 最多只能存一個檔案。因此 block 越大,則
      1. 檔案讀取效能越好,但
      2. 也越可能造成硬碟的空間浪費。
    3. Block 的設定
      1. 目前支援 1k/2k/4k bytes﹔若不指定,則系統會依檔案系統大小及形態自行決定。
      2. Block 大小與單一檔案最大容量:
        1. 16 GB for block size 1k bytes;
        2. 2 TB for block size 4k bytes;
      3. Block 大小與整個 partition 容量:
        1. 2 TB for block size 1k bytes;
        2. 32 TB for block size 4k bytes;

  • inode
    1. inode 記錄檔案內容放置於那個 block 及該檔案資訊:
      1. 擁有者與所屬群組﹔
      2. 存取權限﹔
      3. 檔案類型﹔
      4. ctime, atime, mtime﹔
      5. 檔案大小﹔
      6. SetUID, SetGID, Sticky Bit﹔
      7. 若是連結檔,其真正內容的指向( ln )。
    2. 一個目錄或檔案分配一個 inode,大小為 128 bytes,可以 ls -i 指令看到檔案的 inode 編號。
      [root@dywHome2 ~]# ls -il
      total 8
      28710 -rw-r--r-- 1 root root 2939 Feb  2  2008 col.txt
      28675 drwx------ 2 root root 1024 Dec 27  2007 drakx/
      29195 -rwxr-xr-x 1 root root   11 Jan 28  2008 echoname*
      34854 drwxr-xr-x 4 root root 1024 Sep  4 13:24 test/
      34941 drwxr-xr-x 2 root root 1024 Sep  3 21:12 test1/
      28674 drwx------ 5 root root 1024 Sep  5 08:10 tmp/
      
    3. 例題:若 EXT2 檔案系統大小為 1 Gbytes,且 block 規劃為 4k bytes,若假設一個 inode 約控制兩個 blocks(即一個檔案容量約為 8 Kbytes),則此檔案系統的 inode 個數及大小為何?
      1 Gbytes = 1024 x 1024 Kbytes
      inode 個數 = 1024 x 1024 Kbytes / 8 Kbytes = 131072,
      inode 大小 = 131072 x 128 bytes = 16 Mbytes。
      
    4. 例題:假設一個 block 為 4 Kbytes,要建立一個 100 Kbytes 的檔案,則要分配幾個 inode?幾個 blocks 來儲存該檔案?
      1 個 inode
      block 個數 = 100 Kbytes / 4 Kbytes = 25。
      

  • Superblock:每個檔案系統(即分割槽 partition)開始的 block。
    1. Superblock 記錄資訊主要有:
      1. 檔案系統的大小;
      2. block 與 inode 的總量﹔
      3. 未使用與已使用的 inode/block 數量﹔
      4. 一個 block 與一個 inode 的大小﹔
      5. 檔案系統的掛載時間、最近一次寫入資料的時間、最近一次檢驗磁碟的時間等﹔
      6. valid bit(0 表示已被掛載﹔1 表示未被掛載)。
    2. 若 superblock 壞了,整個 partition 即無法使用。
  • Ext2 如何新增一個檔案(目錄)?
    1. 根據 inode bitmap/block bitmap 找到尚未被使用的 inode 與 block﹔
    2. 將要新增的檔案之屬性與資料分別記載進 inode 與 block。
    3. 更新 metadata(superblock、inode bitmap、block bitmap):將剛被使用的 inode 與 block 的號碼告知 metadata。
  • Ext2 檔案系統的資料不一致( inconsistent )狀態
    1. 當檔案寫入硬碟時系統中斷,將產生 metadata 的資料存放區產生不一致的情況。
    2. Ext2 檔案系統在重新開機時,會藉由 superblock 中記錄的 valid bit 與 filesystem state 等狀態判斷是否強制進行資料一致性的檢查。
    3. 檢查以指令 e2fsck 進行 metadata 區域與實際資料存放區進行比對。
    4. 檢查相當費時。
  • 日誌式的檔案系統 EXT3
    1. 日誌式檔案寫入步驟:
      1. 系統要寫入檔案時會先在日誌記錄區塊中記錄:某個檔案準備要寫入磁碟﹔
      2. 開始寫入檔案的權限與資料﹔
      3. 開始更新 metadata 的資料﹔
      4. 完成資料與 metadata 的更新後,在日誌記錄區塊當中完成該檔案的紀錄。
    2. 萬一資料在記錄過程發生問題,系統只要檢查日誌記錄區塊,即可知那個檔案發生問題。
    3. 只要針對有問題的檔案進行一致性檢查,不必針對整個檔案系統進行檢查。
  • dumpe2fs:讀取 etx2/etx3 檔案系統的資訊。
    [root@linux ~]# dumpe2fs /dev/hda1
    Filesystem volume name:   /
    Filesystem state:         clean
    Errors behavior:          Continue
    Filesystem OS type:       Linux
    Inode count:              1537088
    Block count:              1536207
    Free blocks:              735609
    Free inodes:              1393089
    First block:              0
    Block size:               4096
    Filesystem created:       Sat Jun 25 16:21:13 2005
    Last mount time:          Sat Jul 16 23:45:04 2005
    Last write time:          Sat Jul 16 23:45:04 2005
    Last checked:             Sat Jun 25 16:21:13 2005
    First inode:              11
    Inode size:               128
    Journal inode:            8
    
    Group 0: (Blocks 0-32767)
      Primary superblock at 0, Group descriptors at 1-1
      Reserved GDT blocks at 2-376
      Block bitmap at 377 (+377), Inode bitmap at 378 (+378)
      Inode table at 379-1400 (+379)
      0 free blocks, 32424 free inodes, 11 directories
      Free blocks:
      Free inodes: 281-32704
    Group 1: (Blocks 32768-65535)
      Backup superblock at 32768, Group descriptors at 32769-32769
      Reserved GDT blocks at 32770-33144
      Block bitmap at 33145 (+377), Inode bitmap at 33146 (+378)
      Inode table at 33147-34168 (+379)
      18 free blocks, 24394 free inodes, 349 directories
      Free blocks: 37882-37886, 38263-38275
      Free inodes: 38084-38147, 39283-39343, 41135, 41141-65408
    ### 以下省略 ###
    

  • 其他 Linux 支援的檔案系統
    1. 傳統檔案系統:ext2 / minix /MS-DOS / FAT / iso9660﹔
    2. 日誌式檔案系統:ext3 / ReiserFS / Windows' NTFS / IBM's JFS / SGI/s XFS;
    3. 網路檔案系統:NFS / SMBFS
    4. 查看系統支援及啟用的檔案系統 (kernel 已將 ext2 直接編譯至開機核心,故在模組中看不到)
      [root@dywOffice ~]# ls  /lib/modules/2.6.12-12mdksmp/kernel/fs
      adfs/              coda/      isofs/  nfs/            smbfs/
      affs/              efs/       jbd/    nfs_common/     squashfs/
      afs/               exportfs/  jffs/   nfsd/           supermount/
      autofs4/           ext3/      jffs2/  nls/            sysv/
      befs/              fat/       jfs/    ntfs/           udf/
      bfs/               freevxfs/  lockd/  qnx4/           ufs/
      binfmt_aout.ko.gz  hfs/       minix/  quota_v1.ko.gz  vfat/
      binfmt_misc.ko.gz  hfsplus/   msdos/  reiserfs/       xfs/
      cifs/              hpfs/      ncpfs/  romfs/
      
      [root@dywOffice ~]# cat /proc/filesystems
      nodev   sysfs
      nodev   rootfs
      nodev   bdev
      nodev   proc
      nodev   sockfs
      nodev   pipefs
      nodev   futexfs
      nodev   tmpfs
      nodev   inotifyfs
      nodev   eventpollfs
      nodev   devpts
              ext2
              cramfs
      nodev   ramfs
      nodev   devfs
      nodev   mqueue
              ext3
      nodev   usbfs
      nodev   supermount
      nodev   binfmt_misc
              vfat
      

練習題

  1. 建立 EXT2 檔案系統,除 superblock 外,還依據分割槽大小給予數個 block group。每個 block group 中的 Group description 記錄那些資訊?
    Sol. 記錄此 block 由何處開始記錄。
  2. 建立 EXT2 檔案系統,除 superblock 外,還依據分割槽大小給予數個 block group。每個 block group 中的 Block bitmap 記錄那些資訊?
    Sol. 記錄那個 block 有沒有被使用。
  3. 建立 EXT2 檔案系統,除 superblock 外,還依據分割槽大小給予數個 block group。每個 block group 中的 Inode bitmap 記錄那些資訊?
    Sol. 記錄那個 inode 有沒有被使用。
  4. 建立 EXT2 檔案系統,除 superblock 外,還依據分割槽大小給予數個 block group。每個 block group 中的 Inode table 作用為何?
    Sol. 每個 inode 資料存儲區。
  5. 建立 EXT2 檔案系統,除 superblock 外,還依據分割槽大小給予數個 block group。每個 block group 中的 Data blocks 作用為何?
    Sol. 每個 block 資料存儲區。
  6. EXT2 檔案系統,檔案內容分成檔案屬性及內容,分別儲存於那裡?
    Sol. 檔案屬性存於 inode 及 檔案內容存於 block。
  7. EXT2 檔案系統,目錄的 inode 及 block 分別儲存那些資料?
    Sol. inode 記錄該目錄的相關屬性,並指向分配到的 block;block 記錄該目錄下的相關聯檔案或目錄。
  8. EXT2 檔案系統,檔案(非目錄)的 inode 及 block 分別儲存那些資料?
    Sol. inode 記錄該檔案的相關屬性,並指向分配到的 block;block 記錄該檔案的內容。
  9. 檔案系統統的最小儲存單位為何?
    Sol. 區塊 (Block)。
  10. 若區塊大小為 4 kBytes,10 MBytes 的檔案,磁頭要讀取幾次才能讀取所有檔案內容?
    Sol. 2560 次。
  11. 一個區塊最多僅能容納幾個檔案?
    Sol. 一個檔案。
  12. EXT2 檔案系統,區塊是不是越大越好?
    Sol. 不是,越大越可能造成硬碟的空間浪費。
  13. EXT2 檔案系統,區塊是不是越小越好?
    Sol. 不是,越小檔案讀取效能越差。
  14. EXT2 檔案系統,目前支援那些區塊大小?
    Sol. 1k/2k/4k bytes﹔
  15. EXT2 檔案系統,檔案擁有者與所屬群組的訊息,存在那裡?
    Sol. inode
  16. EXT2 檔案系統,檔案大小存在那裡?
    Sol. inode
  17. 若 EXT2 檔案系統大小為 1 Gbytes,且 block 規劃為 4k bytes,若假設一個 inode 約控制兩個 blocks(即一個檔案容量約為 8 Kbytes),則此檔案系統的 inode 個數及大小為何?
    Sol. inode 個數 = 1024 x 1024 Kbytes / 8 Kbytes = 131072, inode 大小 = 131072 x 128 bytes = 16 Mbytes。
  18. 假設一個 block 為 4 Kbytes,要建立一個 100 Kbytes 的檔案,則要分配幾個 inode?幾個 blocks 來儲存該檔案?
    Sol. 1 個 inode,block 個數 = 100 Kbytes / 4 Kbytes = 25。
  19. EXT2 檔案系統是一個 inode-base 的檔案系統。檔案資料中檔名、屬性(SetUID, SetGID, Sticky Bit)、實際內容,這三部分的資料分別放置在何處?
    Sol. 檔名、屬性(SetUID, SetGID, Sticky Bit)放在 inode;實際內容放在 blocks
  20. 如果 partition 為 4 Gbytes,block 規劃為 4 kbytes,假設一個 inode 約控制四個 blocks,則此檔案系統的 inode 個數及大小為何?
    Sol. 個數為 262144 (256*1024),inode 大小為 32 Mbytes。
  21. 如果 partition 為 4 Gbytes,block 規劃為 4 kbytes,假設一個 inode 約控制兩個 blocks,則此檔案系統的 inode 個數及大小為何?
    Sol. 個數為 524288 (512*1024),inode 大小為 64 Mbytes。
  22. 何謂檔案系統的 Superblock?
    Sol. 每個檔案系統開始的 block。
  23. 檔案系統的 Superblock 記錄那些資訊?
    Sol. 記錄檔案系統的大小、區塊的使用狀況等資訊。
  24. 每塊 partition 的第一個磁區稱為?
    Sol. Superblock
  25. EXT2 檔案系統的 block 與 inode 的大小記錄在那裡?
    Sol. superblock
  26. EXT2 檔案系統的的大小記錄在那裡?
    Sol. superblock
  27. EXT2 檔案系統的掛載時間記錄在那裡?
    Sol. superblock
  28. EXT2 檔案系統的 superblock 壞了,是否還可部分使用?
    Sol. 整個 partition 即無法使用。
  29. 為何不正常開/關機,會讓 EXT2 檔案系統產生不一致( inconsistent )的狀態?
    Sol. metadata( superblock、inode bitmap、block bitmap )來不及更新,故與資料存放區產生不一致。
  30. EXT2 檔案系統產生不一致( inconsistent )狀態,系統要如何處理?
    Sol. 進行資料一致性的檢查。檢查以指令 e2fsck 進行 metadata 區域與實際資料存放區進行比對。檢查相當費時。
  31. 檔案系統 EXT3 不同於 EXT2 之處為何?
    Sol. ext3 為日誌式(journal)檔案系統。檔案要寫入磁碟必須做記錄,萬一資料在記錄過程發生問題,系統只要檢查日誌記錄區塊,即可知那個檔案發生問題。只要針對有問題的檔案進行一致性檢查,不必針對整個檔案系統進行檢查。
  32. 讀取 etx2/etx3 檔案系統的資訊的指令為何?
    Sol. dumpe2fs
  33. Linux 系統支援的檔案系統,放在那個目錄?
    Sol. /lib/modules/`uname -r`/kernel/fs
  34. Linux 系統目前啟動的檔案系統,放在那個目錄?
    Sol. /proc/filesystems

  DYWANG_HOME