星期五, 10月 22, 2010

mtab有多重要?

android 裡面沒有提供 mkfs.ext3,雖然 android source code 裡面有e2fsprogs,但沒有 build 出來。

如果使用 android source code 裡提供的 1.40.x 版的e2fsprogs,cross compile 時,要用 LDFLAGS=-static ./configure --host=arm-none-linux-gnueabi --with-cc=arm-none-linux-gnueabi-gcc 才行,只用 --host 的話,是不行的。我試了好一陣子才試出來。

如果你自己下載 1.41.x版的e2fsprogs,編譯指令簡單多了,只要用 LDFLAGS=-static ./configure --host=arm-none-linux-gnueabi 就行了。

為什麼會提到 1.40.x 跟 1.41.x 呢?這是因為我拿 mkfs.ext3 到 android 環境下格式化分割區,在格式化以後卻發現無法 mount,mount 會出現 Invalid argument的錯誤。原本以為是版本的問題,可是試過1.40.8、1.40.9跟1.41.x以後,發現都不行。接著再試 busybox 提供的 mke2fs,也不行。

實在是沒辦法,只好用 dd 來做。不過 dd 速度真的是不快,而且為了要能把 image 放到 sd 卡上,我還用了 gzip 來壓縮。既要在 android 機器上解壓縮,又要做 dd,自然是慢到爆。 (指令是 gunzip -c xxx.img.gz | dd of=/dev/block/mmcblknpn)

最後的最後,終於想到要注意 mke2fs 關於 /etc/mtab 的警告訊息,它一直很盡責的告訴我,沒有 mtab,它沒辦法檢查分割區是否有 mount 起來。所以我在 /etc 加了一個空的 mtab,再去 mke2fs,完成以後再 mount,想不到就可以了耶~

追查 e2fsprogs 的原始碼,發現的確是有檢查 mtab,而且沒有 mtab 的時候,它不會去製作 journaling,換言之,也就是分割區的確格式化了,但是沒有 journaling 訊息,這也導致了無法 mount 的情況。

呼應主題,mtab有多重要呢? 拿 HTML 的 h1~h7 來比喻的話,mtab 大概有 h1 那麼重要!!!

沒有留言: