日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux c 编程 pdf_C/C++编程笔记:Linux 日志文件系统未解之谜,你知道吗?

發布時間:2024/9/30 linux 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux c 编程 pdf_C/C++编程笔记:Linux 日志文件系统未解之谜,你知道吗? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文件系統要解決的一個關鍵問題是怎樣防止掉電或系統崩潰造成數據損壞,在此類意外事件中,導致文件系統損壞的根本原因在于寫文件不是原子操作,因為寫文件涉及的不僅僅是用戶數據,還涉及元數據(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。

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

Journal write : 把transaction寫入日志中;

Journal commit : 在一條日志保存好之后,寫入結束符;

Checkpoint : 進行真正的寫操作,把元數據(metadata)和用戶數據(user data)寫入文件系統;

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的。

另外如果你想更好的提升你的編程能力,學好C語言C++編程!彎道超車,快人一步!

C語言C++編程學習交流圈子,QQ群1030652847

分享(源碼、項目實戰視頻、項目筆記,基礎入門教程)

歡迎轉行和學習編程的伙伴,利用更多的資料學習成長比自己琢磨更快哦!

編程學習書籍分享:

編程學習視頻分享:

總結

以上是生活随笔為你收集整理的linux c 编程 pdf_C/C++编程笔记:Linux 日志文件系统未解之谜,你知道吗?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 成人做爰视频www网站小优视频 | 青娱乐超碰 | 在线观看911视频 | 岛国av电影在线观看 | 成人久久网 | 亚洲精品aaa| 国产丝袜视频 | 成人一级生活片 | 国产情侣酒店自拍 | 午夜h | 99国产精品免费 | 蜜桃久久久 | 免费黄片毛片 | 天天看a | 欧美人体一区二区三区 | 99精品视频一区二区三区 | 欧美另类自拍 | 人体av| 蓝牛av| 国产区第一页 | 一边摸一边抽搐一进一出视频 | 97xxx| 亚洲精品另类 | 亚洲AV无码成人片在线观看 | 色哟哟在线视频 | 国产视频二区三区 | 高潮无码精品色欲av午夜福利 | 你懂的av在线 | 欧美色久 | 色综合av在线 | 日韩激情小视频 | 亚洲国产精品毛片av不卡在线 | 国产av毛片 | 日韩精品视频在线观看网站 | 黄色在线观看视频网站 | 91福利视频免费观看 | 国产一区二三区 | 日韩精品电影在线 | 美国成人av| 在线观看免费中文字幕 | 久久不卡日韩美女 | 日本女人性视频 | 四虎av网站| 日本r级电影在线观看 | 夜夜操av | 丰满女邻居的色诱4hd | 色多多在线视频 | 午夜专区 | 福利视频在线导航 | 欧美日韩精品一二三区 | 婷婷激情综合 | 不卡中文字幕 | 99热网| 国产你懂| 久久久1| 中文字幕 国产精品 | 菠萝菠萝蜜网站 | 久久久久亚洲av成人网人人网站 | 久草视频免费在线播放 | 麻豆网| 国产高清视频免费 | 欧美黄色小说 | 极品美女高潮出白浆 | 国产乱free国语对白 | 亚洲AV第二区国产精品 | 国产97色在线 | 国产 | 羞视频在线观看 | 羞羞涩| 天堂视频免费在线观看 | 国产一级二级三级在线观看 | 日韩毛片在线看 | 少妇高潮一区二区三区在线 | 人妻久久一区二区三区 | 久久只有这里有精品 | 日韩一区二区三区av | 中文字幕1 | 香蕉久久a毛片 | 日韩精品三级 | 麻豆tv在线观看 | 国产精伦 | 亚洲国产成人在线视频 | 很黄很色的视频 | 日本黄色精品 | 少妇无内裤下蹲露大唇视频 | 99re99| 三上悠亚一区二区 | 美女隐私无遮挡免费 | 久久午夜鲁丝片午夜精品 | 爱情岛论坛自拍亚洲品质极速最新章 | 禁漫天堂下载18 | 中文字幕一区2区3区 | 亚洲无线视频 | 午夜av导航 | 国产成人无码一区二区三区在线 | av最新天堂| 网站在线播放 | 亚洲一区二区三区在线视频 | 日韩视频免费 | 国产福利视频网站 |