2006年6月6日 星期二

使用 SquashFS 免受核心版本不支援之苦

Standard
SquashFS是一個即時解壓縮的檔案系統,如同Cloop、CramFS一般。只是,SquashFS的壓縮比更高、速度更快,又不像CramFS有單一檔案大小或整體檔案系統大小的限制,在LiveCD的應用上非常有用。但往往這種特殊的模組,並不像 Cramfs是內建於Linux Kernel之中。要使用他,我們必須去抓回最新的 Patch,對自己的Kernel做修改。

問題是,Patch 永遠跟不上 Kernel 發行的速度,如果我們要使用最新的核心,不見得Patch一定能夠跟上支援,導致在考量之下,有時必須退而求其次使用舊的核心。但是,如果將Patch做成模組,就可不必管Kernel的變化,無論Kernel多新,我們都還是可以使用 SquashFS。

這是我對原 Patch 的分解修改 :squashfs-fred.tar.gz

只要解開後直接 make 就可以製作出 .ko 的模組,接著只要將此模組複製到 /lib/modules//kernel/fs/squashfs/ 之中即可使用。修改成單純模組的缺點是,開機時的 initrd 不支援SquashFS,因為若要支援必須修改核心的 init/do_mounts_rd.c 並重新編譯 Kernel,所以若做成 patch 勢必又將與核心版本扯上關係。我做此修正的重點是要讓每一版的Linux Kernel都能很容易使用SquashFS,不需要因為 Kernel 太新而不能使用。有興趣的人可以試試看。

註:本修改只在 Kernel 2.6 版以上測試過。