簡單說明日誌檔案系統的作用

2021-07-02 13:24:53 字數 1553 閱讀 5386

檔案系統是用來管理和組織儲存在磁碟驅動器上的資料的系統軟體,其實現了資料完整性的保證,也就是保證寫入磁碟的資料和隨後讀出的內容的一致性。除 了儲存以檔案方式儲存的資料以外,乙個檔案系統同樣儲存和管理關於檔案和檔案系統自身的一些重要資訊(例如:日期時間、屬主、訪問許可權、檔案大小和儲存位 置等等)。這些資訊通常被稱為元資料(metadata)。

由於為了避免磁碟訪問瓶頸效應,一般檔案系統大都以非同步方式工作,因此如果磁碟操作被突然中斷可能導致資料被丟失。例如如果出現這種情況:如果當你處理乙個在linux的ext2檔案系統上的文件,突然機器崩潰會出現什麼情況?

有這幾種可能:

◆當你儲存檔案以後,系統崩潰。這是最好的情況,你不會丟失任何資訊。只需要重新啟動計算機然後繼續工作。

◆在你儲存檔案之前系統崩潰。你會丟失你所有的工作內容,但是老版本的文件還會存在。

◆當正在將儲存的文件寫入磁碟時系統崩潰。這是最糟的情況:新版檔案覆蓋了舊版本的檔案。這樣磁碟上只剩下乙個部分新部分舊的檔案。如果檔案是二進位制檔案那麼就會出現不能開啟檔案的情況,因為其檔案格式和應用所期待的不同。

在最後這種情況下,如果系統崩潰是發生在驅動器正在寫入元資料時,那麼情況可能更糟。這時候就是檔案系統發生了損壞,你可能會丟失整個目錄或者整個磁碟分割槽的資料。

linux標準檔案系統(ext2fs)在重新啟動時會通過呼叫檔案掃瞄工具fsck試圖恢復損壞的元資料資訊。由於ext2檔案系統儲存有冗餘的 關鍵元資料資訊的備份,因此一般來說不大可能出現資料完全丟失。系統會計算出被損壞的資料的位置,然後或者是通過恢復冗餘的元資料資訊,或者是直接刪除被 損壞或是元資料資訊損毀的檔案。

很明顯,要檢測的檔案系統越大,檢測過程費時就越長。對於有幾十個g大小的分割槽,可能會花費很長時間來進行檢測。由於linux開始用於大型伺服器中越來越重要的應用,因此就越來越不能容忍長時間的當機時間。這就需要更複雜和精巧的檔案系統來替代ext2。

因此就出現了日誌式檔案系統(journalling filesystems)來滿足這樣的需求。

什麼是日誌式檔案系統

這裡僅僅對日誌式檔案系統進行簡單的說明。如果需要更深入的資訊請參考文章日誌式檔案系統,或者是日誌式檔案系統介紹。

大多數現代檔案系統都使用了來自於資料庫系統中為了提高崩潰恢復能力而開發的日誌技術。磁碟事務在被真正寫入到磁碟的最終位置以前首先按照順序方式寫入磁碟中日誌區(或是log區)的特定位置。

根據日誌檔案系統實現技術的不同,寫入日誌區的資訊是不完全一樣的。某些實現技術僅僅寫檔案系統元資料,而其他則會記錄所有的寫操作到日誌中。

現在,如果崩潰發生在日誌內容被寫入之前發生,那麼原始資料仍然在磁碟上,丟失的僅僅是最新的更新內容。如果當崩潰發生在真正的寫操作時(也就是日 志內容已經更新),日誌檔案系統的日誌內容則會顯示進行了哪些操作。因此當系統重啟時,它能輕易根據日誌內容,很快地恢復被破壞的更新。

在任何一種情況下,都會得到完整的資料,不會出現損壞的分割槽的情況。由於恢復過程根據日誌進行,因此整個過程會非常快只需要幾秒鐘時間。

應該注意的是使用日誌檔案系統並不意味著完全不需要使用檔案掃瞄工具fsck了。隨機發生的檔案系統的硬體和軟體錯誤是根據日誌是無法恢復的,必須借助於fsck工具。

簡單說明redux thunk的作用

const store createstore thunk import from types 普通action export const showall export const shownothing export const addtodo todo 可多次dispatch的action ex...

JS中push 的作用簡單說明

1.push 方法可以向陣列的末尾新增乙個或多個元素,並返回新的長度。2.語法 arrayobject.push newelement1,newelement2,3.返回值 把指定的值新增到陣列後的新長度。4.說明 push 方法可以把他的引數順序新增到arrayobject的尾部。它可以直接修改 ...

linux系統結構及路徑的簡單說明

1,系統結構 bin 常用系統命令 sbin 系統管理命令 boot 啟動分割槽 sys 核心引數調整 dev 裝置檔案 lib 32位庫檔案 lib64 64文庫檔案 media run mnt 臨時裝置的掛載點 opt 第三方軟體安裝位置 proc 系統資訊 etc 系統配置目錄 home 普通...