2008/12/09

[Linux] 嵌入式系統上常見的檔案系統註記

之前有寫過這篇squashfs 介紹的文章,不知道為什麼,這篇隨便寫寫的文章被排到蠻高的位置,不過 bounce rate 也很高 (真是汗顏) ,那個時候還沒想到要玩 squashfs ,只是覺得這個 fs 還蠻有意思的,所以做個書籤,記錄一下,想說以後應該會用到。只是沒想到,後來真的用上了。

首先要提出來的,是嵌入式系統上面重視的幾個特點,像是:

  • 斷電可靠度
  • 耗損平衡
  • 資料壓縮
  • 垃圾收集
  • 就地執行


斷電可靠度,在唯讀的情況下,應該都可以過關,但是 rw 的時候,不知道其它的 fs 能不能過關,意即,如果今天執行寫入動作的時候斷電了, fs 能不能在下次開機讀取的時候,仍然維持正常運作,在日誌檔、inode、目錄等結構都不用擔心會有破碎的情況。

耗損平衡則是因為 NOR/NAND flash 的特性,在寫入 0 區的時候,需要 erase block ,然而這會造成寫入壽命提早完結,固定區塊寫入次數過多的情況,所以說,需要依靠軟體的部份加以處理。(垃圾收集也是跟這個物理特性有關)

資料壓縮,主要是在 SDRAM 價格比 flash 便宜﹑及寫入更新的動作在嵌入式裝置上面其實遠遠低於讀取的情況下構成的解決方案。所以我們可以使用資料壓縮來讓嵌入式裝置在運行期間才真的解開來運作。

就地執行(XIP)的特性在 squashfs 及 jfs 上面都還沒有看到,所以這個特點我就跳過了.... (其實我還不知道什麼情況下可以 XIP)

這些功能除了就地執行之外,其它的 jffs2 都有達成目標,這應該也是 jffs2 之所以可以歷久彌新的原因之一(參考zylix666 的文章)。
再來是 squashfs 官網提到的, squashfs 只是一個 fs structure ,真正讓它可以壓的比別人小的是背後的演算法。但是在演算法的部份,因為 LZMA 在 Linux kernel 的支援還不存在,所以 squashfs 想要包進 kernel 就只好改預設演算法為 gzip ,僅管如此, squashfs + LZMA 的部份還是很多人在用。 (目前似乎是最小的組合)

另外翻到 ramfs 跟 tmpfs 的比較的部份,這兩種檔案系統的用法幾乎一樣,我只看到在使用的對象上面, ramfs 使用的是 physical ram ,而 tmpfs 則使用的是 logical 的 memory address ,所以 tmpfs 也有可能會使用到 swap (這點之前沒有意識到,換句話說, tmpfs 不見得可以「很快」。

----
參考連結:
* LZMA
* jffs2
* squashfs
* ramfs 和 tmpfs 的使用
* cramfs
* 快閃記憶體

沒有留言:

[Windows] git-bash 底下的工具

因為工作轉到 Windows 平台上的關係,所以很多工具改到 Windows 上面運作,跟著在 TortoiseGit 底下使用 git-bash 來維護自己的專案原始碼。結果就是裝了前面提過的 auto-hotkey 使用熱鍵來提昇自己的平台操作速度; 但除了 hotkey...