成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Linux日志文件系統原來是這樣工作的

系統 Linux
文件系統要解決的一個關鍵問題是怎樣防止掉電或系統崩潰造成數據損壞,在此類意外事件中,導致文件系統損壞的根本原因在于寫文件不是原子操作,因為寫文件涉及的不僅僅是用戶數據,還涉及元數據(metadata)包括 Superblock、inode bitmap、inode、data block bitmap等,所以寫操作無法一步完成...

[[353758]]

文件系統要解決的一個關鍵問題是怎樣防止掉電或系統崩潰造成數據損壞,在此類意外事件中,導致文件系統損壞的根本原因在于寫文件不是原子操作,因為寫文件涉及的不僅僅是用戶數據,還涉及元數據(metadata)包括 Superblock、inode bitmap、inode、data block bitmap等,所以寫操作無法一步完成,如果其中任何一個步驟被打斷,就會造成數據的不一致或損壞。

舉一個簡化的例子,我們對一個文件進行寫操作,要涉及以下步驟:

  1. 從data block bitmap中分配一個數據塊;
  2. 在inode中添加指向數據塊的指針;
  3. 把用戶數據寫入數據塊。
  • 如果步驟2完成了,3未完成,結果是數據損壞,因為該文件認為數據塊是自己的,但里面的數據其實是垃圾;
  • 如果步驟2完成了,1未完成,結果是元數據不一致,因為該文件已經把數據塊據為己有,然而文件系統卻還認為該數據塊未分配、隨后又可能會把該數據塊分配給別的文件、造成數據覆蓋;
  • 如果步驟1完成了、2未完成,結果就是文件系統分配了一個數據塊,但是沒有任何文件用到這個數據塊,造成空間浪費;
  • 如果步驟3完成了,2未完成,結果就是用戶數據寫入了硬盤數據塊中,但白寫了,因為文件不知道這個數據塊是自己的。

日志文件系統(Journal File System)就是為解決上述問題而誕生的。

它的原理是在進行寫操作之前,把即將進行的各個步驟(稱為transaction)事先記錄下來,保存在文件系統上單獨開辟的一塊空間上,這就是所謂的日志(journal),也被稱為write-ahead logging,日志保存成功之后才進行真正的寫操作、把文件系統的元數據和用戶數據寫進硬盤(稱為checkpoint),這樣萬一寫操作的過程中掉電,下次掛載文件系統之前把保存好的日志重新執行一遍就行了(術語叫做replay),避免了前述的數據損壞場景。

有人問如果保存日志的過程中掉電怎么辦?最初始的想法是把一條日志的數據一次性寫入硬盤,相當于一個原子操作,然而這并不可行,因為硬盤通常以512字節為單位進行操作,日志數據一超過512字節就不可能一次性寫入了。所以實際上是這么做的:給每一條日志設置一個結束符,只有在日志寫入成功之后才寫結束符,如果一條日志沒有對應的結束符就會被視為無效日志,直接丟棄,這樣就保證了日志里的數據是完整的。

一條日志在它對應的寫操作完成之后就沒用了,占用的硬盤空間就可以釋放。保存日志的硬盤空間大小是有限的,被循環使用,所以日志也被稱為circular log。

至此可以總結一下日志文件系統的工作步驟了:

  1. Journal write : 把transaction寫入日志中;
  2. Journal commit : 在一條日志保存好之后,寫入結束符;
  3. Checkpoint : 進行真正的寫操作,把元數據(metadata)和用戶數據(user data)寫入文件系統;
  4. Free : 回收日志占用的硬盤空間。

以上方式把用戶數據(user data)也記錄在日志中,稱為Data Journaling,Linux EXT3文件系統就支持這種方式,這種方式存在效率問題:

就是每一個寫操作涉及的元數據(metadata)和用戶數據(user data)實際上都要在硬盤上寫兩次,一次寫在日志里,一次寫在文件系統上。元數據倒也罷了,用戶數據通常比較大,拷貝幾個GB的電影文件也要乘以2實在是降低了效率。

一個更高效的方式是Metadata Journaling,不把用戶數據(user data)記錄在日志中,它防止數據損壞的方法是先寫入用戶數據(user data)、再寫日志,即在上述”Journal write”之前先寫用戶數據,這樣就保證了只要日志是有效的,那么它對應的用戶數據也是有效的,一旦發生掉電故障,最壞的結果也就是最后一條日志沒記完,那么對應的用戶數據也會丟,效果與Data Journaling丟棄日志一樣,重要的是文件系統的一致性和完整性是有保證的。

Metadata Journaling又叫Ordered Journaling,大多數文件系統都采用這種方式。像Linux EXT3文件系統也是可以選擇Data Journaling還是Ordered Journaling的。 

 

責任編輯:龐桂玉 來源: 民工哥技術之路
相關推薦

2022-12-14 07:32:40

InnoDBMySQL引擎

2018-04-02 15:13:21

網絡

2023-02-15 08:17:38

2024-04-30 08:22:51

Figma圖形編輯變換矩陣

2025-02-17 09:22:16

MySQLSQL語句

2022-05-05 08:55:12

工業物聯網IIoT

2023-05-22 15:58:11

2024-02-06 09:30:25

Figma矩形矩形物理屬性

2020-05-26 08:52:36

Java JVM多態

2016-10-12 08:54:24

2014-07-21 10:32:52

蘋果公司實習

2021-08-17 07:00:00

雙重檢查鎖Nacos

2015-03-25 09:55:34

程序員程序員修補BUG真正原因

2018-10-26 10:41:19

2020-03-23 08:30:12

程序員男友感受

2020-06-15 14:35:40

樹莓派代碼開發

2017-05-09 15:39:33

ensorFlow機器人機器學習

2022-07-13 10:37:59

服務器故障優化

2017-06-06 15:13:07

2021-02-07 08:13:18

@DateTimeFo@NumberFormSpring
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 中文字幕乱码一区二区三区 | 成人精品一区二区三区中文字幕 | 中文字幕91| 久草新在线 | 一级做a爰片性色毛片视频停止 | 亚洲福利| 国产福利一区二区 | 久久国产精品久久久久久 | 国产精品成av人在线视午夜片 | 色综合99 | 日韩在线中文字幕 | 亚洲精品成人在线 | av中文在线| www.youjizz.com日韩| 久久99蜜桃综合影院免费观看 | 欧美日韩1区2区3区 欧美久久一区 | 一级毛片色一级 | 欧洲精品在线观看 | 精品久久香蕉国产线看观看亚洲 | 精品欧美乱码久久久久久1区2区 | 中文字幕不卡在线观看 | 精品国产欧美 | 国产精品亚洲成在人线 | 国产在线精品一区二区三区 | 久久久国产精品网站 | 久久久久国产一区二区三区 | 欧美a∨| 亚洲美女视频 | 97天天干| 在线观看日本高清二区 | 国产探花在线观看视频 | 天天玩天天干天天操 | 成人av在线播放 | 亚洲福利 | 亚洲综合色自拍一区 | 亚洲综合在线一区二区 | 黑人巨大精品欧美黑白配亚洲 | av天空| 免费精品| 午夜精品久久久久久久久久久久久 | 中文字幕一区二区三区日韩精品 |