1. 程式人生 > >linux squashfs嵌入式檔案系統

linux squashfs嵌入式檔案系統

squashfs是以linux 核心原始碼補丁的形式釋出,附帶mksquashfs工具,用於建立squash檔案系統。squashfs可以將整個檔案系統或者某個單一的目錄壓縮在一起, 存放在某個裝置, 某個分割槽或者普通的檔案中. 如果你將其壓縮到一個裝置中, 那麼你可以將其直接mount起來使用; 而如果它僅僅是個檔案,你可以將其當為一個loopback 裝置使用. squashfs檔案系統的設計令人欣喜.  For archiving purposes, 它可以讓你更加靈活的使用, 而且它比.tar.gz文件有更快的響應速度. 以下是squash檔案系統的特點: · 資料(data),節點(inode)和目錄(directories)都被壓縮。

· 儲存了全部的32位UID/GIDS和檔案的建立時間. (注: cramfs是8位,沒有建立時間)。

· 支援多達4G的檔案系統. (cramfs是16M)。

· 節點和目錄都是高度壓縮, 而且都是儲存在位元組邊界(packed on byte boundaries); 所有壓縮的節點長度平均在8個位元組左右.(具體的長度根據檔案的型別是不同的. 比如, 普通檔案,目錄,符號連結,塊裝置和字元裝置的節點的大小就不一樣)。

· squashfs可以允許塊大小(block size)達32Kb(1.x)和64kb(2.x), 這樣可以達到比4K塊大小更大的壓縮率。

·  squashfs 2引進了碎片塊(fragment blocks)的概念: 一種將許多比塊size 小的檔案儲存在一個塊中, 以達到更大的壓縮率。

· 重複的檔案會被檢測並刪除掉。

· 同時支援big和little endian架構. SQ可以將檔案系統MOUNT到不同的位元組順序(byte-order)的機器上面。

編譯使用SQ的基本步驟:
  1.重新打包和編譯linux核心, 使之支援SQ.
  2.編譯mksquashfs工具.
  3.使用mksquashf建立壓縮檔案系統.
  4.試用: mount suqash檔案系統到一個臨時目錄.
  5.如果需要的話,更改/etc/fstab 或者起始指令碼, 以使linux作業系統自動載入新的 squashfs 檔案系統.

        squashfs是一個只讀壓縮檔案系統,對嵌入式來說,可以減少成本,在使用nand flash作為儲存裝置的開發板來說,要使用squashfs首先核心當中要有對squashfs的支援,同時還要有對mtd字元裝置和塊裝置的支援。

        針對將squashfs放在一個nand 分割槽的情況,對squashfs的操作應該有下面幾步:

a.製作squashfs映象(本操作位於宿主機)
        #mksquash xxxx xxxx.squash (可以通過"-comp "指定壓縮方式)

b.擦除nand分割槽
        #flash_eraseall /dev/mtdx(需要對字元裝置的支援)

c.拷貝映象
        #dd if=xxxx.squash of=/dev/mtdx
注:檔案系統知識一個檔案的組織資料結構而已,將squash映象全盤拷入到分割槽當中去就意味這建立了一個squash檔案系統。

d.掛載裝置
        #mount -t squashfs /dev/mtdblockx /mnt/xxx(需要mtd塊裝置的支援)
       
        由於對錯誤和過程沒有完全記錄,且對知識沒有充分掌握,以致在次使用squashfs的時候仍有問題不能精確的定位,下面是補充:
        在製作好squashfs之後,可以直接將檔案系統掛載在某個目錄下面:
        #mount -t squashfs xxx.squash /dir/
        接著得到如下列印:

can't setup loop device:no space left.
       
        最後在製作squashfs的時候需要考慮版本的問題,如果提示版本的問題,需要換其他的版本,但是現在最新的squashfs工具已經沒有這個問題了。