文件系統技術內幕:大數據時代海量數據存儲之道
內容描述
本書通過理論與實踐相結合的方式,深入淺出地介紹了文件系統的概念、原理和具體實現。本書涵蓋本地文件系統、網絡文件系統、分佈式文件系統和對象存儲等內容,可以說涵蓋了數據持久化文件系統的主要領域。為了使讀者更加深入地理解文件系統的原理,本書不僅介紹了文件系統的原理和關鍵技術,還結合開源項目介紹了文件系統的實現細節。最後,本書介紹了在因特網領域廣泛使用的對象存儲、承載海量訪問請求的原理及可存儲海量數據的架構。希望讀者通過閱讀本書對文件系統有全面、深入的認識。本書既可以作為文件系統及其他存儲系統開發人員的指導用書,也可以作為軟件架構師、程序員和 Linux 運維人員的參考用書。
目錄大綱
目錄
□ □ 章從文件系統是什麼說起. 1
1.1 什麼是文件系統. 1
1.1.1 普通用戶角度的文件系統. 3
1.1.□ 操作系統層面的文件系統. 9
1.1.3 文件系統的基本原理. 1□
1.□ 常見文件系統及分類. 13
1.□.1 本地文件系統. 14
1.□.□ 偽文件系統. 14
1.□.3 網絡文件系統. 15
1.□.4 集群文件系統. 16
1.□.5 分佈式文件系統. 16
第□ 章知其然——如何使用文件系統. 17
□.1 巧婦之炊——準備開發環境. 17
□.□ 文件內容的訪問——讀/寫文件. 18
□.□.1 文件系統的API . 18
□.□.□ 文件訪問的一般流程. 19
□.□.3 文件內容的讀/寫實例. □0
□.□.4 關於API 函數的進一步解釋. □□
□.3 如何遍歷目錄中的文件. □4
□.4 格式化文件系統與掛載. □7
□.5 文件系統與權限管理. □9
□.5.1 Linux 權限管理簡介. 30
□.5.□ 設置文件的RWX 權限. 31
□.5.3 設置文件的ACL 權限. 34
□.6 文件系統的鎖機制. 37
□.6.1 文件鎖的分類與模式. 37
□.6.□ Linux 文件鎖的使用. 38
□.7 文件系統的擴展屬性. 41
□.8 文件的零拷貝. 4□
□.8.1 零拷貝的基本原理. 4□
□.8.□ 零拷貝的系統API . 44
第3 章知其所以然——本地文件系統原理及核心技術. 46
3.1 Linux 文件系統整體架構簡介. 46
3.1.1 從VFS 到具體文件系統. 48
3.1.□ 關鍵處理流程舉例. 50
3.□ 本地文件系統的關鍵技術與特性. 61
3.□.1 磁盤空間佈□(Layout) . 61
3.□.□ 文件的數據管理. 69
3.□.3 緩存技術. 77
3.□.4 快照與克隆技術. 8□
3.□.5 日誌技術. 84
3.□.6 權限管理. 85
3.□.7 配額管理. 89
3.□.8 文件鎖的原理. 91
3.□.9 擴展屬性與ADS . 9□
3.□.10 其他技術簡介. 94
3.3 常見本地文件系統簡介. 95
3.3.1 ExtX 文件系統. 95
3.3.□ XFS 文件系統. 95
3.3.3 ZFS 文件系統. 96
3.3.4 Btrfs 文件系統. 97
3.3.5 FAT 文件系統. 98
3.3.6 NTFS 文件系統. 98
第4 章從理論到實戰——Ext□ 文件系統代碼詳解. 99
4.1 本地文件系統的分析方法與工具. 99
4.1.1 基於文件構建文件系統. 100
4.1.□ 了解函數調用流程的利器. 100
4.□ 從Ext□ 文件系統磁盤布□說起. 10□
4.□.1 Ext□ 文件系統整體佈□概述. 10□
4.□.□ 超級塊(SuperBlock) . 103
4.□.3 塊組描述符(Block Group Descriptor) . 106
4.□.4 塊位圖(Block Bitmap) . 108
4.□.5 inode 位圖(inode Bitmap) . 109
4.□.6 inode 與inode 表. 109
4.3 Ext□ 文件系統的根目錄與目錄數據布□ . 113
4.4 Ext□ 文件系統的掛載. 116
4.5 如何創建一個文件. 117
4.5.1 創建普通文件. 118
4.5.□ 創建軟硬鏈接. 1□1
4.5.3 創建目錄. 1□5
4.6 Ext□ 文件系統刪除文件的流程. 1□5
4.7 Ext□ 文件系統中文件的數據管理與寫數據流程. 1□9
4.7.1 Ext□ 文件系統中的文件數據是如何管理的. 1□9
4.7.□ 從VFS 到Ext□ 文件系統的寫流程. 130
4.7.3 不同寫模式的流程分析. 134
4.7.4 緩存數據刷寫及流程. 138
4.8 讀數據的流程分析. 140
4.8.1 緩存命中場景. 141
4.8.□ 非緩存命中場景. 14□
4.8.3 數據預讀邏輯. 143
4.9 如何分配磁盤空間. 148
4.9.1 計算存儲路徑. 150
4.9.□ 獲取存儲路徑. 15□
4.9.3 分配磁盤空間. 153
4.10 Ext□ 文件系統的擴展屬性. 154
4.10.1 Ext□ 文件系統擴展屬性是怎麼在磁盤存儲的. 154
4.10.□ 設置擴展屬性的VFS 流程. 157
4.10.3 Ext□ 文件系統擴展屬性接口實現. 159
4.11 權限管理代碼解析. 163
4.11.1 ACL 的設置與獲取. 163
4.11.□ ACL 權限檢查. 164
4.1□ 文件鎖代碼解析. 165
4.1□.1 flock()函數的內核實現. 165
4.1□.□ fcntl()函數的內核實現. 167
第5 章基於網絡共享的網絡文件系統. 17□
5.1 什麼是網絡文件系統. 17□
5.□ 網絡文件系統與本地文件系統的異同. 174
5.3 常見的網絡文件系統簡析. 174
5.3.1 NFS 文件系統. 174
5.3.□ SMB 協議與CIFS 協議. 175
5.4 網絡文件系統關鍵技術. 175
5.4.1 遠程過程調用(RPC 協議) . 176
5.4.□ 客戶端與服務端的語言——文件系統協議. 177
5.4.3 文件鎖的網絡實現. 178
5.5 準備學習環境與工具. 179
5.5.1 搭建一個NFS 服務. 179
5.5.□ 學習網絡文件系統的利器. 180
5.6 網絡文件系統實例. 181
5.6.1 NFS 文件系統架構及流程簡析. 181
5.6.□ RPC 協議簡析. 185
5.6.3 NFS 協議簡析. 186
5.6.4 NFS 協議的具體實現. 191
5.7 NFS 服務端及實例解析. □03
5.7.1 NFSD . □03
5.7.□ NFS-Ganesha . □10
第6 章提供橫向擴展的分佈式文件系統. □16
6.1 什麼是分佈式文件系統. □16
6.□ 分佈式文件系統與網絡文件系統的異同. □17
6.3 常見分佈式文件系統. □17
6.3.1 GFS . □18
6.3.□ CephFS . □19
6.3.3 GlusterFS . □19
6.4 分佈式文件系統的橫向擴展架構. □□0
6.4.1 中心架構. □□0
6.4.□ 對等架構. □□1
6.5 分佈式文件系統的關鍵技術. □□□
6.5.1 分佈式數據布□ . □□□
6.5.□ 分佈式數據可靠性(Reliability). □□4
6.5.3 分佈式數據一致性(Consistency) . □□8
6.5.4 設備故障與容錯(Fault Tolerance) . □□9
6.6 分佈式文件系統實例之CephFS . □30
6.6.1 搭建一個CephFS 分佈式文件系統. □30
6.6.□ CephFS 分佈式文件系統架構簡析. □31
6.6.3 CephFS 客戶端架構. □34
6.6.4 CephFS 集群端架構. □36
6.6.5 CephFS 數據組織簡析. □39
6.6.6 CephFS 文件創建流程解析. □44
6.6.7 CephFS 寫數據流程解析. □51
6.7 分佈式系統實例之GlusterFS . □53
6.7.1 GlusterFS 的安裝與使用. □53
6.7.□ GlusterFS 整體架構簡析. □57
6.7.3 轉換器與轉換器樹. □59
6.7.4 GlusterFS 數據分佈與可靠性. □63
6.7.5 GlusterFS 客戶端架構與I/O 流程. □68
6.7.6 GlusterFS 服務端架構與I/O 流程. □70
第7 章百花爭艷——文件系統的其他形態. □7□
7.1 用戶態文件系統框架. □7□
7.1.1 Linux 中的用戶態文件系統框架Fuse . □7□
7.1.□ Windows 中的用戶態文件系統框架Dokany . □79
7.□ 對象存儲與常見實現簡析. □8□
7.□.1 從文件系統到對象存儲. □8□
7.□.□ S3 對象存儲簡析. □87
7.□.3 Haystack 對象存儲簡析. □88
參考文獻. □95