1 認(rèn)識(shí) Linux 文件系統(tǒng)
Linux 最傳統(tǒng)的磁盤(pán)文件系統(tǒng)使用的是 ext2
1.1 磁盤(pán)組成與分區(qū)
- 磁盤(pán)組成
- 圓形的碟片(記錄數(shù)據(jù))
- 機(jī)械手臂,可擦寫(xiě)碟片上的數(shù)據(jù)
- 主軸馬達(dá),可以轉(zhuǎn)動(dòng)碟片,讓機(jī)械手臂上的磁頭在碟片上讀寫(xiě)數(shù)據(jù)
1.2 文件系統(tǒng)特性
- 文件除了文件實(shí)際內(nèi)容,還有屬性。文件系統(tǒng)會(huì)將文件數(shù)據(jù)和屬性分別存放在不同的區(qū)塊,權(quán)限和屬性放置在 inode 中,實(shí)際數(shù)據(jù)放置到區(qū)塊中。
- 超級(jí)區(qū)塊:記錄此文件系統(tǒng)的整體信息,包括 inode 與數(shù)據(jù)區(qū)塊的總量、使用量、剩余量以及文件系統(tǒng)的格式相關(guān)信息。
- Inode:記錄文件的屬性,一個(gè)文件占一個(gè) inode,同時(shí)記錄此文件數(shù)據(jù)所在的區(qū)塊號(hào)碼。
- 數(shù)據(jù)區(qū)塊:實(shí)際文件內(nèi)容,文件太大,會(huì)占用多個(gè)區(qū)塊。
根據(jù)數(shù)據(jù)存取分為兩種文件系統(tǒng):
索引式文件系統(tǒng)(indexed allocation)
每個(gè) inode與block都有編號(hào),而每個(gè)文件都會(huì)占用一個(gè)inode,inode 內(nèi)則有文件數(shù)據(jù)放置的block號(hào)碼。
如下圖所示,文件系統(tǒng)先格式化出inode與block的區(qū)塊,假設(shè)某一個(gè)文件的屬性與權(quán)限數(shù)據(jù)是放置到inode4號(hào),而這個(gè)inode記錄了文件數(shù)據(jù)的實(shí)際放置點(diǎn)為2、7、13、15這四個(gè)block號(hào)碼,操作系統(tǒng)就能夠據(jù)此來(lái)排列磁盤(pán)的讀取順序,可以一次性將四個(gè)block內(nèi)容讀出來(lái)。那么數(shù)據(jù)的讀取就如同下圖中的箭頭所指定的模樣了。這種數(shù)據(jù)存取的方法我們稱為索引式文件系統(tǒng)。

FAT文件系統(tǒng)
U盤(pán)使用的文件系統(tǒng)一般為FAT格式。FAT文件系統(tǒng)并沒(méi)有inode,所以沒(méi)有辦法將這個(gè)文件的所有block在一開(kāi)始就讀取出來(lái)。每個(gè)block號(hào)碼都記錄在前一個(gè)block當(dāng)中,他的讀取方式如下圖所示:

假設(shè)文件的數(shù)據(jù)依序?qū)懭?->7->4->15號(hào)這四個(gè)block號(hào)碼中,但這個(gè)文件系統(tǒng)沒(méi)有辦法一口氣就知道四個(gè)block的號(hào)碼,他得要一個(gè)一個(gè)的block讀出后,才會(huì)知道下一個(gè)block在何處。
1.3 Linux的ext2文件系統(tǒng)
文件系統(tǒng)一開(kāi)始就將inode和數(shù)據(jù)區(qū)塊規(guī)劃好了,除非重新格式化,否則inode與數(shù)據(jù)區(qū)塊規(guī)定后就不在變動(dòng)。
ext2文件系統(tǒng)格式化的時(shí)候區(qū)分多個(gè)區(qū)塊群組,每個(gè)區(qū)塊群組都有獨(dú)立的數(shù)據(jù)區(qū)塊、inode、超級(jí)區(qū)塊系統(tǒng),比較好管理。
1.3.1 data block(數(shù)據(jù)區(qū)塊)
用來(lái)放置文件數(shù)據(jù),在ext2文件系統(tǒng)中所支持的區(qū)塊有1K 2K 4K 三種。

限制
- block的大小與數(shù)量在格式化完就不能夠再改變了(除非重新格式化);
- 每個(gè)block內(nèi)最多只能夠放置一個(gè)文件的數(shù)據(jù);
- 如果文件大于block的大小,則一個(gè)文件會(huì)占用多個(gè)block數(shù)量;
- 若文件小于block,則該 block的剩余容量就不能夠再被使用了(磁盤(pán)空間會(huì)浪費(fèi))。
1.3.2 inode table
記錄內(nèi)容
- 該文件的存取模式(read/write/excute)
- 該文件的擁有者與群組(owner/group)
- 該文件的容量
- 該文件創(chuàng)建或狀態(tài)改變的時(shí)間(ctime)
- 最近一次的讀取時(shí)間(atime)
- 最近修改的時(shí)間(mtime)
- 定義文件特性的旗標(biāo)(flag),如 SetUID...
- 該文件真正內(nèi)容的指向 (pointer)
特點(diǎn)
每個(gè) inode 固定 128B,每個(gè)文件只占用一個(gè) inode ,文件系統(tǒng)能夠建立的文件數(shù)量和 inode 數(shù)量有關(guān),系統(tǒng)讀取文件先找到 inode,分析 inode 的權(quán)限和用戶是否符合,符合才讀取內(nèi)容。
1.3.2 Superblock(超級(jí)區(qū)塊)
沒(méi)有超級(jí)區(qū)塊,就沒(méi)有這個(gè)文件系統(tǒng),文件系統(tǒng)的基本新都存儲(chǔ)在這。
記錄內(nèi)容
- 數(shù)據(jù)區(qū)塊月inode的總量
- 未使用與已使用inode與數(shù)據(jù)區(qū)塊數(shù)量
- 數(shù)據(jù)區(qū)塊與inode大小
- 文件系統(tǒng)的掛載時(shí)間、最近一次寫(xiě)入數(shù)據(jù)的時(shí)間、最近一次檢驗(yàn)磁盤(pán)的時(shí)間等文件系統(tǒng)相關(guān)信息。
- 一個(gè)有效位數(shù)值,若此文件系統(tǒng)已被掛載,有效位為0,若未被掛載,有效位為1。
2 文件系統(tǒng)簡(jiǎn)單操作
2.1 磁盤(pán)與目錄的容量
df
列出文件系統(tǒng)的整體磁盤(pán)使用量
df [-ahikHTm] [目錄或文件名]
選項(xiàng)與參數(shù):
-a:列出所有的文件系統(tǒng),包括系統(tǒng)特有的/proc等文件系統(tǒng);
-k:以KBytes的容量顯示各文件系統(tǒng);
-m:以MBytes的容量顯示各文件系統(tǒng);
-h:以人們較易閱讀的GBytes,MBytes,KBytes等格式自行顯示;
-H:以M=1000K取代M=1024K的進(jìn)位方式;
-T:連同該partition的filesystem名稱(例如xfs)也列出;
-i:不用磁盤(pán)容量,而以inode的數(shù)量來(lái)顯示

字段含義:
- 文件系統(tǒng):代表該文件系統(tǒng)是在哪個(gè)partition,所以列出設(shè)備名稱;
- 1k-塊:說(shuō)明下面的數(shù)字單位是1KB,可利用-h或-m來(lái)改變?nèi)萘?
- 已用:使用掉的磁盤(pán)空間
- 可用:剩下的磁盤(pán)空間大小;
- 已用%:磁盤(pán)的使用率,如果使用率高達(dá)90%以上時(shí),需要注意;
- 掛載點(diǎn):磁盤(pán)掛載的目錄
du
評(píng)估文件系統(tǒng)的磁盤(pán)使用量(常用在推估目錄所占容量)
du [-ahskm] 文件或目錄名稱
選項(xiàng)與參數(shù):
-a:列出所有的文件與目錄容量,因?yàn)槟J(rèn)僅統(tǒng)計(jì)目錄下面的文件量而已。
-h:以人們較易讀的容量格式(G/M)顯示;
-s:列出總量而已,而不列出每個(gè)各別的目錄占用容量;
-S:不包括子目錄下的總計(jì),與-s有點(diǎn)差別。
-k:以KBytes列出容量顯示;
-m:以MBytes列出容量顯示;
df和du的區(qū)別
參考Linux du命令和df命令區(qū)別
摘自《鳥(niǎo)哥的Linux私房菜》,更多精彩參考 http://cn.linux.vbird.org/
參考 https://blog.csdn.net/wisgood/article/details/17316663