Skip to main content

二、崩潰情景(Crash Scenarios):

          為了更好理解這個問題,我們來看看一些崩潰情景的例子。 想像一下,只有一次寫入成功;我們在此列出此時可能的三種結果,:

  • Just the data block(Db) is written to disk:
    在這種情況下,資料在磁盤上,但沒有inode指向它,甚至說沒有bitmap分配了該區塊。因此,就如同寫入從未發生過一樣。從文件系統崩潰一致性的角度來看,這種情況根本不是問題。
  • Just the updated inode (I[v2]) is written to disk.
    在這種情況下,inode指向Db即將寫入的磁盤地址(5),但是Db尚未寫入該地址。因此,如果我們相信指針,我們將從磁盤讀取垃圾資料(磁盤地址5的舊內容)。
    此外,我們有一個新問題,我們稱之為一致性的文件系統。磁盤上的bitmap告訴我們Data Blocks5沒有被分配,但是inode是說它有。bitmap和inode之間的不一致是文件系統資料結構的不一致;要使用文件系統,我們必須以某種方式解決這個問題(更多關於下面的內容)。
  • Just the updated bitmap (B[v2]) is written to disk.
    在這種情況下,bitmap指示塊5已分配,但沒有指向它的inode。因此文件系統再次不一致;如果未解決,則此寫入將導致空間洩漏,因為塊5將永遠不會被文件系統使用。

在嘗試將三個塊寫入磁碟時,還有三種崩潰場景。(兩次寫入成功,最後一次寫入失敗):

  • The inode (I[v2]) and bitmap (B[v2]) are written to disk, but not data (Db).
    在這種情況下,文件系統Metadata是完全一致的:inode具有指向塊5的指針,bitmap指示5正在使用,因此從文件系統Metadata的角度來看,一切看起來都不錯。但是有一個問題:5又有垃圾。

    (However, it might be a problem for the user, who just lost some data!)

  • The inode (I[v2]) and the data block (Db) are written, but not the bitmap (B[v2]).
    在這種情況下,我們有inode指向磁盤上的正確資料,但inode和舊版本的bitmap(B1)之間又有不一致。因此,我們再次需要在使用文件系統之前解決問題。

  • The bitmap (B[v2]) and data block (Db) are written, but not the inode (I[v2]).
    在這種情況下,我們再次在inode和資料bitmap之間存在不一致。但是,即使塊已寫入並且bitmap指示其用法,我們也不知道它屬於哪個文件,因為沒有inode指向該文件。

頁次: 1 2 3 4 5

Thx Chang

Author Thx Chang

More posts by Thx Chang
/* 2024/5/10 */