[英]Understanding shadow paging and how it differs from journaling file systems
這兩個系統都允許您通過不同的機制提供原子性/一致性:
當你修改某些東西時,影子分頁總是分配一個新塊,當一個塊被覆蓋時,它的舊副本變得空閑,因為任何其他活動文件系統塊都不會引用它。 崩潰一致性通過樹上的遞歸元數據更新來實現——您更新葉塊所在的位置(在修改期間復制到其他地方),並且必須更新其父塊(在修改期間復制到其他地方)等。 文件系統的新版本當更新到樹根的整個鏈時,所有修改都變得可見。
日志允許您就地修改塊,但您仍然必須將它們寫入兩次:一次寫入日志以標記您的意圖(並在需要時提供多次更新原子性,例如實現將文件從一個目錄移動到另一個目錄),以及然后一次在日志本身。 由於您正在就地修改,對於同一塊的覆蓋,除了您覆蓋的特定塊之外,您通常不必更新許多其他文件系統樹塊,因為在您編寫它們的新版本時這些塊並沒有改變位置。
最大的區別是影子分頁/寫時復制使得在文件系統中實現快照變得非常容易——你需要做的就是跟蹤文件系統樹根的舊版本,以及它當時引用的任何東西. 在日記中,這要困難得多,因為任何塊都可以隨時被覆蓋,而且日記不是無限的——通常它會很快被覆蓋,否則它會占用大量磁盤空間。
寫時復制的最大缺點,特別是對於旋轉磁盤,可能是它傾向於瑞士奶酪你的數據,導致它變得非常碎片化,因此在頻繁更新的文件的大量順序讀取期間需要更多的磁盤搜索。 ZFS 有這個問題,我認為后來的一些寫時復制系統通過一些中間層將邏輯塊地址映射到物理地址來解決這個問題,以允許對數據進行碎片整理。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.