顯示具有 fuse 標籤的文章。 顯示所有文章
顯示具有 fuse 標籤的文章。 顯示所有文章

星期三, 8月 19, 2009

系統自動掛載ntfs partition

ntfs-3g所賜, 我們已經可以在Linux上掛載ntfs的檔案系統, 進行資料的讀寫動作. 雖然Linux系統UI已經做得很好, 只要用滑鼠點一下ntfs partition就會自動幫我們掛載到系統上, 可是總覺得如果可以如其他的ext3 partition一樣, 在開機後就自動掛載那不是更完美嗎? 既然有這個想法, 就要想辦法解決一下. 其實很簡單, 還是一樣利用/etc/fstab就可以輕鬆達到.

首先, 找出ntfs partition的UUID, 方法可以參考取得partition的UUID
再來就是編輯/etc/fstab這個檔案, 在檔案中加上
UUID=ntfs_partition_uuid mount_point ntfs-3g defaults 0 2
這樣就可以了.

例如: 我們的ntfs partition的uuid如果是4C54A5A254A58EF0, 並且要將該partition掛載到/media/VAIO目錄中
$ sudo mkdir /media/VAIO
$ sudo echo "UUID=4C54A5A254A58EF0 /media/VAIO ntfs-3g defaults 0 2" >> /etc/fstab
$ sudo mount -a

星期二, 3月 25, 2008

利用valgrind對用fuse所出的檔案系統進行memory leak除錯

如之前的文章說過,valgrind可以幫助程式設計者快速找出程式中會造成memory leak的部分。但是,如果你用fuse來進行user-level的檔案系統開發,並想利用valgrind來找出程式中memory leak的部分,馬上你就會發現一個問題,就是程式跑一下子後就會自動結束了。這時候你應該會看到螢幕上出現以下的錯誤訊息:

fuse: bad mount point `/mnt/storage': Transport endpoint is not connected

其實這不算是個錯誤,造成這個現象的主要原因是fuse的runtime librry會呼叫mount,進行檔案系統掛載的動作。但是因為mount這支程式本身是privileged program,必須要有root權限才可以執行此程式進行檔案系統掛載的動作,因此才會出現上面錯誤。

解決此問題最簡單的方式,就是將mount程式的setuid bit取消掉,也就是執行

chmod -s /bin/mount

如此一來,就可以使用valgrind來對用fuse所寫的檔案系統進行memory leak除錯的工作了。

當然,將mount的setuid bit取消掉會造成系統安全有疑慮。不過,也沒關係啦,只要記得在進行完debug的動作後,恢復mount程式的權限就可以了。

FUSE (Filesystem in Userspace)

這裡所指的FUSE是Filesystem in Userspace,可不是保險絲。
一般來說,檔案系統的開發是需要寫kernel-level module的,但是kernel-level programming比較困難,不容易debug,而且只要一不小心很可能會造成整個系統當機。FUSE則是用來解決這個問題的一個Linux kernel標準module。
FUSE是一套允許使用者自行建立在Linux上執行的檔案系統的開發套件,這個套件包含了kernel module以及系統相關的library。其中kernel module是用來與Linux kernel的VFS的介面銜接,VFS使得應用程式可以不需要理會所使用的檔案系統為何,就可以在各式各樣的檔案系統上進行檔案存取的動作,因為VFS會根據mount point資訊以及應用程式所要存取的路徑來決定應該將request轉到那個檔案系統模組進行處理。換句話說,有了FUSE的幫忙,我們就可以輕鬆的在user level進行檔案系統功能的開發,可以應用以往在user level 所學的工具以及programming資源來進行檔案系統的開發,實在是一個不錯的開發工具。

星期一, 4月 30, 2007

如何讓一般使用者也可以利用fuse掛載檔案系統

由於有越來越多的file system是以fuse來完成,
以root的權限,完成下列幾個步驟:
  1. chmod 4755 /usr/bin/fusermount
  2. /sbin/modprobe fuse
  3. chmod o+rw /dev/fuse
如此一來,不具root權限的user也可以利用fuse,自行mount檔案系統了。

如果user要umount檔案系統,因為其不具有root的權限,所以無法執行umount,同樣需利用fuse所提供的fusermount這個utility來執行卸載的動作。也就是執行

/usr/bin/fusermount -u mount_point