文件系統技術內幕:大數據時代海量數據存儲之道

張書寧

買這商品的人也買了...

商品描述

本書通過理論與實踐相結合的方式,深入淺出地介紹了文件系統的概念、原理和具體實現。
本書涵蓋本地文件系統、網絡文件系統、分佈式文件系統和對象存儲等內容,可以說涵蓋了數據持久化文件系統的主要領域。
為了使讀者更加深入地理解文件系統的原理,
本書不僅介紹了文件系統的原理和關鍵技術,還結合開源項目介紹了文件系統的實現細節。
最後,本書介紹了在因特網領域廣泛使用的對象存儲、承載海量訪問請求的原理及可存儲海量數據的架構。
希望讀者通過閱讀本書對文件系統有全面、深入的認識。
本書既可以作為文件系統及其他存儲系統開發人員的指導用書,
也可以作為軟件架構師、程序員和 Linux 運維人員的參考用書。

目錄大綱

目錄
章從文件系統是什麼說起. 1
1.1 什麼是文件系統. 1
1.1.1 普通用戶角度的文件系統. 3
1.1.2 操作系統層面的文件系統. 9
1.1.3 文件系統的基本原理. 12
1.2 常見文件系統及分類. 13
1.2.1 本地文件系統. 14
1.2.2 偽文件系統. 14
1.2.3 網絡文件系統. 15
1.2.4 集群文件系統. 16
1.2.5 分佈式文件系統. 16
第2 章知其然——如何使用文件系統. 17
2.1 巧婦之炊——準備開發環境. 17
2.2 文件內容的訪問——讀/寫文件. 18
2.2.1 文件系統的API . 18
2.2.2 文件訪問的一般流程. 19
2.2.3 文件內容的讀/寫實例. 20
2.2.4 關於API 函數的進一步解釋. 22
2.3 如何遍歷目錄中的文件. 24
2.4 格式化文件系統與掛載. 27
2.5 文件系統與權限管理. 29
2.5.1 Linux 權限管理簡介. 30
2.5.2 設置文件的RWX 權限. 31
2.5.3 設置文件的ACL 權限. 34
2.6 文件系統的鎖機制. 37
2.6.1 文件鎖的分類與模式. 37
2.6.2 Linux 文件鎖的使用. 38
2.7 文件系統的擴展屬性. 41
2.8 文件的零拷貝. 42
2.8.1 零拷貝的基本原理. 42
2.8.2 零拷貝的系統API . 44
第3 章知其所以然——本地文件系統原理及核心技術. 46
3.1 Linux 文件系統整體架構簡介. 46
3.1.1 從VFS 到具體文件系統. 48
3.1.2 關鍵處理流程舉例. 50
3.2 本地文件系統的關鍵技術與特性. 61
3.2.1 磁盤空間佈局(Layout) . 61
3.2.2 文件的數據管理. 69
3.2.3 緩存技術. 77
3.2.4 快照與克隆技術. 82
3.2.5 日誌技術. 84
3.2.6 權限管理. 85
3.2.7 配額管理. 89
3.2.8 文件鎖的原理. 91
3.2.9 擴展屬性與ADS . 92
3.2.10 其他技術簡介. 94
3.3 常見本地文件系統簡介. 95
3.3.1 ExtX 文件系統. 95
3.3.2 XFS 文件系統. 95
3.3.3 ZFS 文件系統. 96
3.3.4 Btrfs 文件系統. 97
3.3.5 FAT 文件系統. 98
3.3.6 NTFS 文件系統. 98
第4 章從理論到實戰——Ext2 文件系統代碼詳解. 99
4.1 本地文件系統的分析方法與工具. 99
4.1.1 基於文件構建文件系統. 100
4.1.2 了解函數調用流程的利器. 100
4.2 從Ext2 文件系統磁盤佈局說起. 102
4.2.1 Ext2 文件系統整體佈局概述. 102
4.2.2 超級塊(SuperBlock) . 103
4.2.3 塊組描述符(Block Group Deor) . 106
4.2.4 塊位圖(Block Bitmap) . 108
4.2.5 inode 位圖(inode Bitmap) . 109
4.2.6 inode 與inode 表. 109
4.3 Ext2 文件系統的根目錄與目錄數據佈局. 113
4.4 Ext2 文件系統的掛載. 116
4.5 如何創建一個文件. 117
4.5.1 創建普通文件. 118
4.5.2 創建軟硬鏈接. 121
4.5.3 創建目錄. 125
4.6 Ext2 文件系統刪除文件的流程. 125
4.7 Ext2 文件系統中文件的數據管理與寫數據流程. 129
4.7.1 Ext2 文件系統中的文件數據是如何管理的. 129
4.7.2 從VFS 到Ext2 文件系統的寫流程. 130
4.7.3 不同寫模式的流程分析. 134
4.7.4 緩存數據刷寫及流程. 138
4.8 讀數據的流程分析. 140
4.8.1 緩存命中場景. 141
4.8.2 非緩存命中場景. 142
4.8.3 數據預讀邏輯. 143
4.9 如何分配磁盤空間. 148
4.9.1 計算存儲路徑. 150
4.9.2 獲取存儲路徑. 152
4.9.3 分配磁盤空間. 153
4.10 Ext2 文件系統的擴展屬性. 154
4.10.1 Ext2 文件系統擴展屬性是怎麼在磁盤存儲的. 154
4.10.2 設置擴展屬性的VFS 流程. 157
4.10.3 Ext2 文件系統擴展屬性接口實現. 159
4.11 權限管理代碼解析. 163
4.11.1 ACL 的設置與獲取. 163
4.11.2 ACL 權限檢查. 164
4.12 文件鎖代碼解析. 165
4.12.1 flock函數的內核實現. 165
4.12.2 fcntl函數的內核實現. 167
第5 章基於網絡共享的網絡文件系統. 172
5.1 什麼是網絡文件系統. 172
5.2 網絡文件系統與本地文件系統的異同. 174
5.3 常見的網絡文件系統簡析. 174
5.3.1 NFS 文件系統. 174
5.3.2 SMB 協議與CIFS 協議. 175
5.4 網絡文件系統關鍵技術. 175
5.4.1 遠程過程調用(RPC 協議) . 176
5.4.2 客戶端與服務端的語言——文件系統協議. 177
5.4.3 文件鎖的網絡實現. 178
5.5 準備學習環境與工具. 179
5.5.1 搭建一個NFS 服務. 179
5.5.2 學習網絡文件系統的利器. 180
5.6 網絡文件系統實例. 181
5.6.1 NFS 文件系統架構及流程簡析. 181
5.6.2 RPC 協議簡析. 185
5.6.3 NFS 協議簡析. 186
5.6.4 NFS 協議的具體實現. 191
5.7 NFS 服務端及實例解析. 203
5.7.1 NFSD . 203
5.7.2 NFS-Ganesha . 210
第6 章提供橫向擴展的分佈式文件系統. 216
6.1 什麼是分佈式文件系統. 216
6.2 分佈式文件系統與網絡文件系統的異同. 217
6.3 常見分佈式文件系統. 217
6.3.1 GFS . 218
6.3.2 CephFS . 219
6.3.3 GlusterFS . 219
6.4 分佈式文件系統的橫向擴展架構. 220
6.4.1 中心架構. 220
6.4.2 對等架構. 221
6.5 分佈式文件系統的關鍵技術. 222
6.5.1 分佈式數據佈局. 222
6.5.2 分佈式數據可靠性(Reliability). 224
6.5.3 分佈式數據一致性(Consistency) . 228
6.5.4 設備故障與容錯(Fault Tolerance) . 229
6.6 分佈式文件系統實例之CephFS . 230
6.6.1 搭建一個CephFS 分佈式文件系統. 230
6.6.2 CephFS 分佈式文件系統架構簡析. 231
6.6.3 CephFS 客戶端架構. 234
6.6.4 CephFS 集群端架構. 236
6.6.5 CephFS 數據組織簡析. 239
6.6.6 CephFS 文件創建流程解析. 244
6.6.7 CephFS 寫數據流程解析. 251
6.7 分佈式系統實例之GlusterFS . 253
6.7.1 GlusterFS 的安裝與使用. 253
6.7.2 GlusterFS 整體架構簡析. 257
6.7.3 轉換器與轉換器樹. 259
6.7.4 GlusterFS 數據分佈與可靠性. 263
6.7.5 GlusterFS 客戶端架構與I/O 流程. 268
6.7.6 GlusterFS 服務端架構與I/O 流程. 270
第7 章百花爭艷——文件系統的其他形態. 272
7.1 用戶態文件系統框架. 272
7.1.1 Linux 中的用戶態文件系統框架Fuse . 272
7.1.2 Windows 中的用戶態文件系統框架Dokany . 279
7.2 對象存儲與常見實現簡析. 282
7.2.1 從文件系統到對象存儲. 282
7.2.2 S3 對象存儲簡析. 287
7.2.3 Haystack 對象存儲簡析. 288
參考文獻. 295