了解Linux文件系統的同學都清楚,Linux的文件系統都是在內核態開發的。內核態開發最大的問題是涉及的內容比價多,調試不太方便。因此,很多應用都不太原因涉及內核態的開發。而fuse解決了文件系統必須在內核態的的難題。 它將文件系統的實現從內核態搬到了用戶態,也就是我們可以在用戶態實現一個文件系統。fuse有很多應用,比如與對象存儲(例如S3等)結合,可以實現通過普通目錄訪問雲對象存儲的方式,簡化應用訪問對象存儲的複雜性。
本號將陸續推出3-5篇文章介紹fuse,今天是第一篇,將介紹fuse的基本原理,及給出一個非常簡單的示常式序。多說無益,我們接下來實際操作一下fuse。軟體安裝
要使用該庫進行用戶態文件系統的開發,必需先安裝。包括軟體包和開發用的頭文件等內容。不同的平台安裝方法略有不同,下面分別介紹一下。
Ubuntu 16.04sudo apt-get install libfuse2 libfuse-dev
CentOS 6
yum install fuse fuse-devel
本文安裝的是fuse-devel-2.9.4-1.0.4.el6.x86_64版本的,後續示常式序也是該版本的,如果版本不一致在測試時可能略有不同。
fuse基本原理
簡單的理解,
fuse實現了一個對文件系統訪問的回調。fuse分為
內核態的模塊和用戶態的庫兩部分。其中
用戶態的庫為程序開發提供介面,也是我們實際開發時用的介面,我們通過這些介面將請求處理功能註冊到fuse中。
內核態模塊是具體的數據流程的功能實現,它截獲文件的訪問請求,然後調用用戶態註冊的函數進行處理。