作者 主題: [分享] 壓縮檔案系統 (二)  (閱讀 14314 次)

0 會員 與 1 訪客 正在閱讀本文。

thyme

  • 老人組
  • 俺是博士!
  • *****
  • 文章數: 1281
    • 檢視個人資料
[分享] 壓縮檔案系統 (二)
« 於: 2005-03-11 11:05 »
(範例程式所表示的目錄或device,僅供參考,可能不存在,
也不保証一定可執行)

「EXT2」

再來要熟悉一下怎麼做 ext2 的檔案系統
代碼: [選擇]

# mke2fs /dev/hdax
# mount -t ext2 /dev/hdax /mnt/tmp

咦,這好像太簡單了,沒錯,的確太簡單了,我們要談的不是這個。

代碼: [選擇]

#!/bin/sh
echo "create 4,096KB "
dd if=/dev/zero of=/tmp/tmp_loop bs=1k count=4096
losetup /dev/loop0 /tmp/tmp_loop
mke2fs -m 0 /dev/loop0
mount -t ext2 /dev/loop0 /mnt/tmp

這時候,你會發覺,在 /mnt/tmp 有 4MB 的空間可以寫入唷!
這有什麼用途呢?當然很有用,如果你有看過如何製作軟碟開機片,
一定會覺得很熟悉!

再來,把後面的尾巴完成
代碼: [選擇]

#!/bin/sh
#先把一些你需要的檔案copy進入 /mnt/tmp
umount /mnt/tmp
losetup -d /dev/loop0
echo "建立 ramdisk image : initrd.img"
dd conv=sync if=/tmp/tmp_loop | gzip -9 > /tmp/initrd.img.gz

如果你有把整個開機需要的檔放進去,那這個 image 就是可開機的
linux檔了。
要看內容怎麼辦?
代碼: [選擇]

# gunzip /tmp/initrd.img.gz
# mount -t ext2 -o loop /tmp/initrd.img /mnt/tmp

上面程式有看到 gzip ,好像有談到縮壓了,沒錯,這是很普通嵌入
式所應用的縮壓方式,但是,我們不用這個方式,因為,要應用時,
要先做一個 ramdisk ,然後把檔案 gunzip 到 ramdisk 上,才能使
用,有什麼缺點呢?舉個例子來說明,假設總共要8MB,縮壓後只要
4MB,你 flash 有 4MB 剛好放得下,記憶體有 16MB ,那開機後
要劃 8MB 的 ramdisk 給解開的檔案系統用,記憶體就憑空少了
8MB,所以這並不是一個很好的方法。當然,也有好處,一切唯讀,
隨便重開機也不會掛,重開機一切恢復正常。