1. 程式人生 > >《笨兔兔的故事》之檔案系統部分讀書心得

《笨兔兔的故事》之檔案系統部分讀書心得

最近看了一本電子書,書名叫《笨兔兔的故事》,乍一聽書名,是不是以為是童話故事書?實際上它是一本介紹linux系統的技術書籍,作者通過趣味幽默的筆觸,把很多乏味難讀的技術文章,通過笨兔兔這個小動物以第一人稱生動表達,非常適合初學者,或者即使有經驗的同事把它當趣味小說也能串聯複習到不少知識,歡迎各位同事下載閱讀,希望你能在這本書中有所收穫!(此處不可以上傳PDF附件,可以自行下載,地址http://xiaoxing.b0.upaiyun.com/2013/04/story.pdf)。

此文件以Ubuntu8.04(即是作者起名為“笨兔”)系統為例,先後介紹了系統的安裝過程,安裝後的配置,常用影音軟體、辦公軟體的介紹,介紹wine和虛擬機器VBox,Ubuntu下的程式開發軟體的使用方法,shell的介紹等等。本書介紹內容很多,我只針對磁碟檔案系統這部分總結(知識分享負責的部分),以下兩段是摘錄。

———————————————————————————————————-

Windows只會兩種檔案系統——換句話說,只會用兩種方式規劃整個屋子的空間,那就是FAT32和NTFS。FAT32是一種很老舊的格式了,連 4G 以上的檔案都不支援,效能也不好,還不支援多使用者的許可權,所以基本不怎麼用了。這個查皮也是,沒有用FAT32,而是用了另一個比較高階的格式——NTFS。那麼,我就必須能夠讀懂 NTFS 格式的磁碟,我才能去查皮那裡串門。要說以前,我們Linux是不太能讀懂NTFS格式的磁碟的,畢竟是微軟私有的格式,我的前輩們基本上只能勉強自從NTFS的磁碟上讀取東西,往裡寫是不行的。不過自從Canonical學校為我們增加了一本ntfs-3g教材以後,讀寫NTFS就都不在話下了。不過雖然能夠讀懂,但是我自己是不會用這個檔案系統的,我會用很多其他的檔案格式,比如ext2,ext3,xfs,jfs,reiserfs,ufs,zfs 等等,各有優勢,我現在的屋裡使用的是非常強大的xfs格式,至於怎麼強大,以後慢慢細聊,現在,我要走了,去串門。

檔案系統就是我們管理整個硬碟這間屋子的方式,這個以前跟大家說過了。檔案系統有很多種,過去的檔案系統都是非日誌檔案系統,這種檔案系統比較落後。比如EXT2,比如查皮那的FAT。非日誌檔案系統在發生意外斷電的時候就容易出問題。就像今天的情況,如果我這屋子用的是ext2的話,沒準就丟個檔案阿什麼的,搞不好整個分割槽都壞掉了。那用日誌檔案系統又怎麼樣呢?日誌檔案系統,顧名思義,就是有日誌的檔案系統(廢話)。還是拿上面那種情況舉例,OO 要存那檔案,那我怎麼做呢?我會在硬碟上一個專門的記錄日誌的地方些下來:OO 要覆蓋 笨兔兔的故事.odt 檔案。如果這個時候停電了,沒事,原來的那檔案還好好的,但是記憶體裡的還是沒了,這條記錄也就作廢。記錄之後,我就開始把記憶體裡的東西往硬盤裡放——放在記錄日誌的地方,並不動原來的那個檔案。如果放到一半停電了,那也沒關係,原來的檔案還好好的。修改了的那份也有一部分放到了硬盤裡,不過這是一部分的話,多半還是沒什麼用。如果我把檔案完全搬到了記錄日誌的那部分硬盤裡,那就再在剛才記錄的那條日誌下面寫上:已經把要覆蓋的內容存到了日誌去xxx位置,準備替換原檔案。如果這個時候停電,沒事,等再開機,我一查日誌,就知道要修改的版本已經完全存在了硬盤裡,只要按著上面記錄的繼續做就行了。寫好日誌之後,就開始用日誌區的這個新檔案去替換硬碟上那個原來的檔案。這個過程會很快,因為其實並不需要真的搬運資料,只要在原檔案的地方做上標記,表示這個檔案已經作廢,然後把那個 笨兔兔的故事.odt檔名指向新寫的這個檔案就好了。(我們只是拿箱子比喻檔案,但檔案畢竟不是你家的箱子。)這樣,無論中間的哪個過程斷電,都不會完全損壞整個檔案,要麼原版還留著,要麼修改後的版本已經生效,通過檢視日誌就能知道現在哪個版本有效。這就是日誌檔案系統。

———————————————————————————————————-

總結:

1. 介紹:

檔案系統:是一種儲存和組織計算機資料的方法,它使得對其訪問和查詢變得容易,檔案系統使用檔案和樹形目錄的抽象邏輯概念代替了硬碟和光碟等物理裝置使用資料塊的概念,是一套實現了資料的儲存、分級組織、訪問和獲取等操作的抽象資料型別。

Windows系統支援FAT32及NTFS檔案系統,Linux系統可以支援十多種檔案系統型別:Btrfs、JFS、ReiserFS、ext、ext2、ext3、ext4、XFS、ISO9660、XFS、Minx、MSDOS、UMSDOS、VFAT、NTFS、HPFS、NFS、SMB、SysV、PROC等。

想要知道你的linux支援的檔案系統有哪些,可以檢視下面的目錄:

ls –l /lib/modules/$(uname -r)/kernel/fs

檢視系統目前已載入到記憶體中支援的檔案系統:

cat /proc/filesystems

注意:部分Linux發行版預設不支援NTFS檔案系統,解決方法是安裝ntfs-3g或ufsd等NTFS驅動程式。部分Linux發行版對NTFS的支援度並不高。

2.檔案系統特性:

檔案資料除了實際內容外,通常還有很多的屬性。EXT2檔案系統將檔案的實際內容放在資料塊中,將屬性放在i節點中。此外,還有超級塊用來記錄整個檔案系統的整體資訊。

超級塊(super block):記錄檔案系統的整體資訊,包括inode/block的總量、使用量、剩餘量、以及檔案系統的格式與相關資訊。

i節點(inode):記錄檔案的屬性,一個檔案佔用一個inode,同時記錄此檔案的資料所在的block號碼。

資料塊(block):實際記錄檔案的內容,如果檔案太大時,或佔用多個block。

3. 常用命令:

3.1 dumpe2fs

功能:顯示ext2/ext3檔案系統資訊。

用法:dumpe2fs [ -bfhixV ] [ -ob superblock ] [ -oB blocksize ] device

-b 列出保留為壞道的部分。

-h 僅列出superblock的資料,不會列出其他的區段內容。

3.2 df

功能:顯示檔案系統的整體磁碟使用情況。

用法:df [-ahikHTm] [目錄或檔名]

-a 列出所有的檔案系統,包括/proc等檔案系統。

-K 以KB的形式顯示檔案系統容量。

-m 以MB的形式顯示檔案系統容量。

-h 以易讀的KB、MB、GB的實現顯示檔案系統容量。

-H 以1M=1000K代替1M=1024K的進位方式。

-T 連同該分割槽的檔案系統名稱(如ext3)也列出來。

-i 不以硬碟容量,而以inode的數量顯示出來。

3.3 du

功能:評估檔案或目錄的容量。

用法:du [-ahskm] 檔案或目錄

-a 列出所有的檔案和目錄的容量。

-h 以人們易讀的KB、MB、GB的形式顯示容量。

-s 僅列出總量。

-S 列出不包括子目錄的總量。

-k  以KB顯示容量。

-m 以MB顯示容量。

–exlude 排除某個目錄或檔案

–max-depth 深入到第幾階目錄。

3.4 ln

Linux下的連結檔案有兩種:

軟連線:類似於windows下的快捷方式。

硬連結:在某個目錄下,產生一個新檔名,該檔名對應一個已存在的inode,並不產生一個新的檔案。

3.5 fdisk

功能:分割槽命令(工具)

用法:fdisk [-l] 裝置名稱

-l 輸出裝置的所有分割槽內容。

fdisk –l 列出系統的所有能夠找到的裝置的分割槽。

4. 日誌檔案系統

正常情況下,資料的新增或改動操作可以順利完成。但是如果在寫入檔案時,有異常情況發生會怎樣?(比如:突然斷電、或核心發生錯誤)早期ext2檔案系統中,如果發生這種情況,系統在重啟時會進行一致性檢查,要耗費很長時間。為了避免檔案系統不一致的情況發生,在檔案系統中規劃出一個塊,該塊專門記錄寫入或修訂檔案時的步驟。這樣,即可簡化一致性的檢查。也就是說:

預備:當系統要寫入一個檔案時,會先在日誌記錄塊中記錄某個檔案準備要寫入的資訊。

實際寫入:開始寫入檔案的許可權與資料,開始更新meta data的資料。

結束:完成資料與meta data的更新後,在日誌記錄塊中完成該檔案的記錄。

在這樣的程式當中,萬一資料的記錄過程當中發生了問題,那麼我們的系統只要去檢查日誌記錄塊就可以知道那個檔案發生了問題,針對該問題來做一致性檢查即可,而不必針對整塊檔案系統去檢查,這樣就可以達到快速修復檔案系統的能力了。這就是日誌式檔案最基礎的功能。