close

專案 Filesystem in Userspace  (FUSE) 可以在不碰觸 Linux Kernel 的情況下安裝新的檔案系統。此檔案系統執行時就像一般程式那樣,可以使用共享函式庫、執行很難在 Linux Kernel 裡執行的任務。

就機器裡其它應用程式的角度來看,FUSE 檔案系統看起來就像一般檔案系統那樣。在這裡,我要介紹的是 compFUSEd  ,這是一套壓縮的 FUSE 檔案系統。有了 compFUSEd 就可以大大節省那些可高度壓縮之檔案的磁碟空間,例如大部份文字檔與可執行檔。

CompFUSEd 乃是以 "表層" 檔案系統的方式設計,意思是:取現存 "基本" 檔案系統,加以修整並以相同檔案系統呈現。這裡的 "修整",指的是壓縮/解壓縮檔案。CompuFUSEd 將被寫入的資料,將之壓縮後交給底層 "基本" 檔案系統進行儲存。當你透過 compFUSEd 讀取檔案時,會是從基本檔案系統裡將檔案讀取出來,解壓縮後再交給你。這代表應用程式可以不用知道壓縮的事、甚至在不知道它的資料存放在磁碟裡是被壓縮過的情況下,使用 compFUSEd 檔案系統。

現在還沒有任何支援 Ubuntu、Fedora 或 openSUSE 使用的 compuFUSEd 套件。本文我是在 64 位元的 Fedora 8 下,編譯 200712321 版本的原始程式碼。下載頁 指出 compFUSEd 的打包檔為 cf-GISMO-date。前置的 cf 指的是 compFUSEd,展開的打包檔 ( tarball ) 最後會放在名為 CompFused 的目錄下 - 目錄名稱不帶任何版本資訊。

CompuFUSEd 支援 zilb、bzip2、lzo 與 lzo2 的壓縮函式庫。我在 Fedora 8 下無法成功編譯後兩者的支援。你得編輯 Makefile 這個檔,將不需要的、在 Linux 系統下編譯失敗的那些壓縮函式庫支援排除/取消。我還發現 compFUSEd 在建置時預設動作會試圖連結 profiler 函式庫,你必須編輯 Rules.make 這個檔將這些連結的相依性移除。還有,build 動作失敗時,錯誤訊息會指出一些特定訊息、共享物件,與缺乏 -fPIC position-independent   code 選項。PIC code ( position-independent code ) 有一個優點,就是它可以使載入至不同的記憶體位置;這部份在編譯共享函式庫時就派上用場了,因為這樣可以在多個函式庫要求相同位址時,得已移動它們。在 Rules.make 裡的 CFLAGS 加入 -fPIC,再執行 make clean all 解決此問題,讓我順利完成編譯。

詳細內容請見原文出處:
Save disk space - use compFUSEd to transparently compress filesystems


如有版權問題,請來信 (nicaliu at gmail dot com) 告知,謝謝。

arrow
arrow
    全站熱搜

    nicaliu 發表在 痞客邦 留言(1) 人氣()