關于Linux系統中日志檔案系統的概述
釋出時間:2007.06.01 14:41 來源:賽迪網技術社群 作者:lynn
衆所周知,檔案系統是作業系統最為重要的一部分。每種作業系統都有自己的檔案系統。檔案系統直接影響着作業系統的穩定性和可靠性。Linux下的檔案系統通常有兩種,即日志檔案系統和非日志檔案系統,以下簡單介紹兩類檔案系統。
一、 非日志檔案系統
非日志檔案系統在工作時,不對檔案系統的更改進行日志記錄。
檔案系統通過為檔案配置設定檔案塊的方式把資料存儲在磁盤上。每個檔案在磁盤上都會占用一個以上的磁盤扇區,檔案系統的工作就是維護檔案在磁盤上的存放,記錄檔案占用了哪幾個扇區。另外扇區的使用情況也要記錄在磁盤上。檔案系統在讀寫檔案時,首先找到檔案使用的扇區号,然後從中讀出檔案内容。如果要寫檔案,檔案系統首先找到可用扇區,進行資料追加。同時更新檔案扇區使用資訊。不同的檔案系統用不同的方法配置設定和讀取檔案塊。例如,dos/windows就使用fat檔案系統,而windows NT則采用NTFS檔案系統。
非日志檔案系統能夠工作得很穩定,但是,它存在不少問題。各位請看,對于一個普通的日志檔案系統,如Ext2檔案系統,如果系統剛将檔案的磁盤分區占用資訊(meta-data)寫入到磁盤分區中,還沒有來得及将檔案内容寫入磁盤,這時意外發生了:系統斷電了,結果會造成:檔案的内容仍然是老内容,而meta-data資訊是新内容,二者不一緻了。
讓我們再看一下Linux系統中fsck是如何工作的:通常情況下,當 Linux 系統啟動時,首先運作fsck,由它掃描/etc/fstab 檔案中列出的所有本地檔案系統。fsck 的工作就是確定要裝載的檔案系統的中繼資料是處于可使用的狀态。當系統關閉時,fsck又把所有的緩沖區資料轉送到磁盤,并確定檔案系統被徹底解除安裝,以保證系統下次啟動時能夠正常使用。
然而意想不到掉電或者其它故障會導緻系統當機、重新開機。出現這種情況時,作業系統來不及解除安裝檔案系統。重新開機後,fsck對磁盤進行徹底掃描,全面地檢查中繼資料,竭盡全能修正檢查過程中能找到的所有錯誤。對所有的中繼資料做徹底的一緻性檢查極其耗時。檔案系統越大,完成徹底的掃描時間就越長。Fsck也會碰到它無法修複的磁盤錯誤。碰到這種情況,就是簡單地将檔案删除或另存為一個檔案。在高密度通路的資料中心,fsck可能會造成極大的資料檔案破壞。隻有當fsck 完成掃描、檢查與修複工作後,Linux系統才能開始使用。當然,如果有嚴重的檔案或資料丢失的話,系統很可能無法重新啟動了!
非日志檔案系統的種類:
Linux可以支援種類繁多的檔案系統,幾乎所有的Linux發行版都用ext2作為預設的檔案系統。Ext2檔案系統就是一個非日志檔案系統。此外,Linux支援的其它非日志檔案系統還有:FAT、VFAT、HPFS(OS/2)、NTFS(Windows NT)、Sun的UFS等。
二、 日志式檔案系統
日志檔案系統則是在非日志檔案系統的基礎上,加入了檔案系統更改的日志記錄。
日志檔案的設計思想是:跟蹤記錄檔案系統的變化,并将變化内容記錄入日志。日志式檔案系統的思想來自于大型資料庫系統。資料庫操作由多個相關的、互相依賴的子操作組成,任何一個子操作的失敗都意味着整個操作的無效性,是以,對資料的任何修改都要求回複到操作以前的狀态。日志式檔案系統采用了類似的技術。
日志檔案系統在磁盤分區中儲存有日志記錄,寫操作首先是對記錄檔案進行操作,若整個寫操作由于某種原因(如系統掉電)而中斷,系統重新開機時,會根據日志記錄來恢複中斷前的寫操作。這個過程隻需要幾秒鐘到幾分鐘。
日志檔案系統是如何工作的?
在日志檔案系統中,所有的檔案系統的變化、添加和改變都被記錄到“日志”(即記錄檔案metadata資訊的資料)中。每隔一定時間,檔案系統會将更新後的檔案metadata及檔案内容寫入磁盤,之後删除這部分日志。重新開始新日志記錄。
在對中繼資料做任何改變以前,檔案系統驅動程式會向日志中寫入一個條目,這個條目描述了它将要做些什麼。然後,它繼續并修改中繼資料。通過這種方法,日志檔案系統就擁有了近期中繼資料被修改的曆史記錄,當檢查到沒有徹底解除安裝的檔案系統的一緻性問題時,隻要根據資料的修改曆史進行相應的檢查即可了。也即日志檔案系統除了存儲資料和中繼資料(metadata)以外,它們還儲存有一個日志,我們可以稱之為元中繼資料(關于中繼資料的中繼資料)。
日志檔案系統使得資料、檔案變安全了,但是系統開銷加大了。每一次更新和大多數的日志操作都需要寫同步,這需要更多的磁盤I/O操作。從日志檔案的原理出發,将那些需要經常寫操作的分區上使用日志檔案系統是一個好的主意。
Linux系統中可以混合使用日志檔案系統或非日志檔案系統。日志增加了檔案操作的時間,但是,從檔案安全性角度出發,磁盤檔案的安全性得到了重大的提高。筆者對日志檔案系統進行了測試,日志檔案系統的性能并不比ext2檔案系統有太大的性能損失,有的日志檔案系統由于采用B+樹算法,在操作一些大尺寸的檔案時,性能反面比非日志檔案系統的性能還要好。
使用日志檔案系統有什麼好處?
檔案的安全提高了,檔案被破壞的機率降低了,對磁盤的掃描時間縮短了,掃描次數減少了。當系統意外當機後,不會再有檔案内容的丢失,至少檔案應該保持上一個版本的内容;采用日志檔案系統,通常系統每重新啟動20-30次後,才會對磁盤進行一次整體掃描,掃描次數減少了