對于 Linux 來說正規(guī)的文件系統(tǒng)為 EXT2,一個文件系統(tǒng)存儲的數據通常包括文件權限和屬性,以及文件數據,這兩部分分別存儲在不同的地方。
簡單的說文件系統(tǒng)數據分為3部分 Superblock:記錄次文件系統(tǒng)的整體信息,包括 inode/iblock 的總量,使用量,剩余量,已經文件系統(tǒng)的整體信息 Inode:記錄文件的屬性,一個文件占用一個 inode,同時記錄此文件數據所在的 block 號碼 Iblock:實際記錄文件的內容,若文件過大時,會占用多個 block
我的理解 文件系統(tǒng)由包含多個文件,每個文件都會占用1個 inode 和若干 iblock,inode 用來存儲文件權限和屬性.以及文件數據存放的 iblock 的編號,iblock 則存放文件的實際數據(每個 inode 和 iblock都含有一個編號)
對于容量很大的文件系統(tǒng),EXT2格式化時會分為多個 block group,每個組隊都有一個獨立的/inode/block/superblock
iblock 是用來放置文件內容數據地方,在 Ext2 文件系統(tǒng)中所支持的 block 大小有 1 K, 2 K 及 4 K 三種而已。 每個 block 內最多只能夠放置一個文件的數據; 承上,如果文件大于 block 的大小,則一個文件會占用多個 block 數量; 承上,若文件小于 block ,則該 block 的剩余容量就不能夠再被使用了(磁盤空間會浪費)。
Inode 主要包含信息
每個 inode 大小均固定為 128 bytes; 每個文件都僅會占用一個 inode 而已; 承上,因此文件系統(tǒng)能夠創(chuàng)建的文件數量與 inode 的數量有關; 系統(tǒng)讀取文件時需要先找到 inode,并分析 inode 所記錄的權限與用戶是否符合,若符合才能夠開始實際讀取 block 的內容。
inode 要記錄的數據非常多,但偏偏又只有128 bytes 而已,為了記錄更多的數據,系統(tǒng)很將 inode 記錄 block 號碼的區(qū)域定義為12個直接,一個間接, 一個雙間接與一個三間接記錄區(qū)。記錄區(qū)。
http://wiki.jikexueyuan.com/project/learn-linux-step-by-step/images/1.jpg" alt="" />
假設 block 為1 K
12 個直接指向: 121 K=12 K 由于是直接指向,所以總共可記錄 12 筆記錄,因此總額大小為如上所示; 間接: 2561 K=256 K 每筆 block 號碼的記錄會花去 4 bytes,因此 1 K 的大小能夠記錄 256 筆記錄,因此一個間接可以記錄的文件大小如上; 雙間接: 2562561 K=2562 K 第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個號碼,因此總額大小如上; 三間接: 2562562561 K=2563 K 第一層 block 會指定 256 個第二層,每個第二層可以指定 256 個第三層,每個第三層可以指定 256 個號碼,因此總額大小如上; 總額:將直接、間接、雙間接、三間接加總,得到 12 + 256 + 256256 + 256256256 (K) = 16 GB
Superblock 是記錄整個 filesystem 相關信息的地方, 沒有 Superblock,就沒有這個 filesystem 了。他記錄的信息主要有:
通過 dumpe2fs 命令查看文件系統(tǒng)的 superblock
舉例:觀察文件系統(tǒng)的相關信息
[root@www ~]# df <==這個命令可以叫出目前掛載的裝置
Filesystem 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% /boot
tmpfs 371332 0 371332 0% /dev/shm
[root@www ~]# dumpe2fs /dev/hdc2
dumpe2fs 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_file
Default mount options: user_xattr acl <==默認掛載的參數
Filesystem state: clean <==這個文件系統(tǒng)是沒問題的(clean)
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 2560864 <==inode 的總數
Block count: 2560359 <==block 的總數
Free blocks: 1524760 <==還有多少個 block 可用
Free inodes: 2411225 <==還有多少個 inode 可用
First block: 0
Block size: 4096 <==每個 block 的大小啦!
Filesystem created: Fri Sep 5 01:49:20 2008
Last mount time: Mon Sep 22 12:09:30 2008
Last write time: Mon Sep 22 12:09:30 2008
Last checked: Fri Sep 5 01:49:20 2008
First inode: 11
Inode size: 128 <==每個 inode 的大小
Journal inode: 8
Journal backup: inode blocks
Journal size: 128M
Group 0: (Blocks 0-32767) <==第一個 data group 內容, 包含 block 的啟始/結束號碼
Primary superblock at 0, Group descriptors at 1-1 <==超級區(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 所在的 block 0 free blocks, 32405 free inodes, 2 directories <==所有 block 都用完了!
Free blocks:
Free inodes: 12-32416 <==剩余未使用的 inode 號碼
Group 1: (Blocks 32768-65535)
....(底下省略)....
在文件系統(tǒng)下創(chuàng)建一個文件都會分配一個 inode 和若干 iblock,目錄和文件都是文件系統(tǒng)下的一個文件,
inode :記錄了目錄的權限, block:記錄了目錄的名稱,目錄下包含的文件名名與文件名所占用的 inode 號碼
[root@bogon ~]# ls -li 2366420 -rw------- 1 root root 1377 02-18 20:26 anaconda-ks.cfg 2366454 drwxr-xr-x 2 root root 4096 02-18 20:41 Desktop 2366370 -rw-r--r-- 1 root root 35014 02-1820:25 install.log 2366371 -rw-r--r-- 1 root root 6431 02-18 20:22 install.log.syslog
文件名:在包含其的目錄對應的 iblock 中記錄 inode :記錄了文件的權限, block:記錄文件實際數據
舉例來說,如果我想要讀取/etc/passwd 這個文件時,系統(tǒng)是如何讀取的呢?
[root@bogon ~]# ll -di / /etc /etc/passwd 2 drwxr-xr-x 24 root root 4096 02-22 19:34 / 1134561 drwxr-xr-x 114 root root 1228802-22 19:36 /etc 2528506 -rw-r--r-- 1 root root 2219 02-18 20:39 /etc/passwd