自從我們開始使用電腦後,大多數的使用者都曾經使用過檔案,而我們總是對關於硬碟如何正確地儲存檔案感到好奇, 它看起來似乎非常抽象,所以今天讓我們看一看 Linux 作業系統中較新的檔案系統版本『第二延伸系統( ext2 )』 ,並了解它各方面之用途。
這個檔案系統是主要來自於 Andrew Tanenbaum 所寫的 Minix 檔案系統,它也是唯一可用在免費作業系統的檔案系統,稱之為 Minix。它後來修正為 Linux 所慣用的檔案系統並稱為延伸檔案系統,到現在 Linux 的檔案系統稱為 ext2 (第二延伸檔案系統),它是延伸檔案系統中較新的版本並支援存取控制列(ACL)。
但是在著手研究 ext2 檔案系統之前,讓我們先了解檔案系統中之專有名詞的關聯。
Block (區塊): 檔案在磁碟中被儲存在整數固定大小的區塊中, 那區塊的大小通常是2的次方。在預設中,ext2檔案系統的區塊大小是4K。研究顥示, 4K位元組對於一磁碟區塊而言是最理想的大小,假如一個檔案的大小無法達成4K位元組的倍數時, 那最後的磁碟區塊部分就會被浪費。在最不好的例子中幾乎在完整的區塊中就有一位元組被浪費掉。
對於這情況有一點技巧,假如我們選擇了一個較大的區塊,則對於小的檔案而言會有一些磁碟空間被浪費掉。 另外一方面,假如我們使用一個非常小的區塊,則磁碟區塊數量會成指數的增加, 因此對於檔案而言需有更多的搜尋時間。所以,選擇區塊大小必須三思而後行。
當一個檔案被載入到記憶體時,那磁碟區塊會被放在主記憶體中之緩衝快取區,假如它們已經變更了, 區塊在緩衝區中會被標記為’Dirty’, 其意指的是這些區塊必須先寫到磁碟中來維持磁碟上的區塊及在主記憶體中的區塊之一致性.
Superblock:superblock 是在每個檔案系統開始的位置, 其儲存資訊像是檔案系統的大小,空的和填滿的區塊,它們各自的總數和其他諸如此類的資料。 要從一個檔案系統中存取任何檔案皆須經過檔案系統中之superblock。如果superblock損壞了, 它可能無法從磁碟中去取得資料。
Inode: 對於檔案系統而言一個inode是在inode表格中的一個項目。 Inode包含了所有檔案有關的資訊例如名稱、大小、連接的數量、資料建立之日期,修改及存取的時間。 它也包含了磁碟區塊的檔案指向(pointer)。pointer是用來記錄檔案被儲存在何處。
Ext2fs公用程式
現在讓我們來看看一些標準Linux版本之ext2fsprogs公用程式:
e2fsck
這個程式允許我們在ext2檔案系統上去執行檔案系統檢查,它像是Windows中之 Scandisk一樣,但卻是一種更有效的系統檢查方式。在此,我們可以加上一個檔案名稱來檢查上面之損壞區塊。
警告:絕對不要在任何已掛載的檔案系統上執行 e2fsck/fsck。假如我們想要去執行 fsck,我們應該卸下檔案系統後再去執行 fsck(亦即需要 umount 該磁區囉)。如果不這樣做,可能會讓檔案系統毀損。
tune2fs
這允許我們去調整檔案系統的參數設定。在此,我們可以設定在兩個檔案系統檢查間之最大掛載總數、 容量標記、錯誤行為、變更保留的資訊和許多其他參數。
dumpe2fs
這個程式將ext2檔案系統狀態輸出到標準的設備上。它對於分析問題以及存取一般關於檔案系統用法的資訊是有幫助的。
mke2fs
這個程式允許我們在先前尚未格式化的磁碟中,去建立一個ext2的檔案系統。 它提供了許多的選項包含區塊的大小、段落的大小、每一個inode的位元組到多種磁碟陣列的選項。 mke2fs通常在第一次安裝的期間執行,並建立完成新的 root 及其他的檔案系統。(就相當於 DOS 底下的 format 程式啦!)
badblocks
這個程式去搜尋磁碟並檢查區塊是否已經損壞,它通常會在新的檔案系統安裝程式前執行, 但請不要在掛載好的檔案系統上執行。
在Linux檔案系統中最新的版本被稱為ext3,並已有 Journaling 之支援。Journaling 檔案系統對於所有已完成的步驟,持有記錄以及檢查點,所以假使系統當機時,它可以從最後的檢查點來還原檔案系統。