操作系統(tǒng)課程設(shè)計(jì):
參考鏈接:
基于FUSE框架的文件系統(tǒng)-課程設(shè)計(jì) - 南國(guó)的博客 - CSDN博客
過(guò)程簡(jiǎn)介:
1.在VMware中最小化安裝Ubuntu18.04.2虛擬機(jī),配置需要的應(yīng)用軟件仗哨。
2.安裝Fuse3.3.0文件系統(tǒng)的框架担锤。
3.創(chuàng)建一個(gè)二進(jìn)制文件為磁盤。
4.初始化磁盤。
5.實(shí)現(xiàn)各函數(shù)接口的功能羡微。
6.編寫meson.build(相當(dāng)于makefile)文件夕春。
7.測(cè)試。
過(guò)程:
第一步:配置Ubuntu虛擬機(jī)荧降,以下配置需要的軟件接箫。
下載安裝軟件。
$ sudo apt-get install?git gcc vim lrzsz openssh-server meson pkg-config makeunity-tweak-tool libtool m4 autoconf?
第二步剪返,安裝fuse文件系統(tǒng)框架废累。
2.1 github上下載fuse壓縮包。
$ wget https://github.com/libfuse/libfuse/archive/fuse-3.3.0.tar.gz
2.2 解壓fuse-3.3.0.tar.gz脱盲。
$ tar -xvf fuse-3.3.0.tar.gz
2.3 參考官方github上的指示配置邑滨。
$ cd libfuse-fuse-3.3.0
$ mkdir build
$ cd build
$ meson ..
2.4 安裝pip3以安裝pytest。
$ sudo apt-get install python3-pip
$ pip3 install pytest --user
2.5 安裝libfuse钱反。
"To build,test and install libfuse, use Ninja(Running the tests requires the pytest python module.)"
$ ninja
$ sudo python3 -m pytest test/
$ sudo ninja install
由于碰到error,上網(wǎng)查資料哎壳,根據(jù)官方開發(fā)人員與用戶的討論,得到解決方法幢竹。
鏈接:Init script is installed in /usr/local/etc, not /etc · Issue #178 · libfuse/libfuse · GitHub
$ sudo mv /usr/local/etc/init.d/fuse3 /etc/init.d
再回來(lái)耳峦,輸入sudo ninja install,不報(bào)錯(cuò)焕毫,只有warning可接受蹲坷。
$ sudo ninja install
2.6 編輯/etc/ld.so.conf驶乾,include?
$ sudo vim /etc/ld.so.conf
(按a進(jìn)入編輯模式)
在最后追加一行:include?/usr/local/lib/x86_64-linux-gnu)
按ESC,輸入:wq 以退出
2.7?
$ sudo ldconfig -v
(此處作用參考鏈接:linux中l(wèi)dconfig的使用介紹 - chenzixun0的專欄 - CSDN博客)
2.8 嘗試簡(jiǎn)單測(cè)試县匠。
$ cd libfuse-fuse-3.3.0/build/example?
$ mkdir mytestmount
$ ./hello mytestmount
$ cat mytestmount/hello
$ fusermount -u mytestmount? //取消掛載 unmount,結(jié)束使用或者修改程序前需要做
第三步风科,創(chuàng)建一個(gè)二進(jìn)制文件作為磁盤。
這里展示方法乞旦,另開了一個(gè)位置的工作目錄贼穆。
輸入命令
$ dd bs=1K count=5K if=/dev/zero of=testdisk
第四步,初始化這個(gè)磁盤兰粉。
專門寫一份程序故痊,用于初始化磁盤鏡像(image)。
第五步玖姑,編寫接口函數(shù)愕秫。
相比較于fuse2版本的函數(shù)的編寫,需要注意:
1.需要在include頭文件前就加上或者改成#define FUSE_USE_VERSION 31
否則會(huì)經(jīng)由fuse_common.h報(bào)一個(gè)錯(cuò)焰络。
2. filler(buf, ".", NULL, 0, 0);? 替代了?filler(buf, ".", NULL, 0);
否則會(huì)報(bào)參數(shù)過(guò)少的error戴甩。
寫完后,把.c和.h的文件都放到fuse/example下闪彼。
第六步,meson.build(相當(dāng)于makefile)的編寫甜孤。
很簡(jiǎn)單:
打開example/meson.build,將文件名追加到第一行examples數(shù)組中备蚓。如圖课蔬。
改了meson.build,就可以按前面的辦法編譯:
從在libfuse-fuse-3.3.0目錄下mkdir build開始做到sudo ninja install郊尝。
第七步二跋,測(cè)試。
測(cè)試流程:
1.在某個(gè)目錄下流昏,創(chuàng)建一個(gè)文件作為磁盤鏡像扎即。
2.初始化磁盤。
3.創(chuàng)建文件夾况凉,掛載文件系統(tǒng)谚鄙,同時(shí)開啟調(diào)試模式。
4.另開一個(gè)終端刁绒,輸入測(cè)試的命令闷营,完成后卸載掛載點(diǎn)。
5.再次另開一個(gè)掛載點(diǎn)測(cè)試,如果文件存在傻盟,就是文件系統(tǒng)實(shí)現(xiàn)速蕊。
這里的測(cè)試過(guò)程比較艱辛,我重開了虛擬機(jī)好幾次娘赴。最后成功了规哲,我才明白,前面第一個(gè)掛載點(diǎn)的目錄或者文件刪了诽表,自然后面另開掛載點(diǎn)就沒(méi)了唉锌,之前看參考文檔的那個(gè)博主說(shuō)還以為刪了也還在,后來(lái)才明白刪了就沒(méi)了竿奏,沒(méi)刪的話應(yīng)該是寫在了磁盤里了袄简,所以可以在別的掛載點(diǎn)上繼續(xù)看到。