4GB SDHC を使って、その一部をルートファイルシステムとして使ってみた。
メモリカードからブートするといくつか利点が挙げられるが特に気になったのは、本体メモリで使われてる jffs2 と違って ext2 ファイルシステムを使うのでその分速くなるよとか、ストレージエリアが 128MB からメモリカードから割り当てた分(今回約 2GB弱割り当てた)に増えるとか。
ということで早速セットアップの準備。
まずインターナルのメモリカードを FAT と ext2 の2つに分ける。HowTo EASILY Partition your MMC card の手順通りにやればいいんだが、一応おさらい。すべて root で実行すること。
# apt-get install e2fsprogs # umount /media/mmc1 # umount /media/mmc2 # sfdisk /dev/mmcblk0 /dev/mmcblk0p1 :1,65536,6 /dev/mmcblk0p2 :65537,, /dev/mmcblk0p3 : /dev/mmcblk0p4 :
sfdisk でパーティションを作成するんだが、上の例だと mmcblk0p1 に 65536 x 32 = 2GB の VFAT を作成。最後の 6 が VFAT の意味。mmcblk0p2 は次のブロック、つまり 65537 から ,, で残り全部のブロックを割り当てて、ext2 用を作成。それ以外のパーティションはとりあえず割り当てなし(swap を割り当てたりして遊んでみたけど、今現在は上記の状態)。
# mkdosfs /dev/mmcblk0p1 # mke2fs /dev/mmcblk0p2
でそれぞれ VFAT と ext2 ファイルシステムを作る。wiki では上記コマンドをそれぞれ実行したあとでその都度システムをリブートしてるんだけど、何か意味あるのかな?そのまんま実行しちゃったけど...
次に HowTo EASILY Boot From MMC card にある通り、起動時にメニューを出せるように initfs を入れ替える。
initfs_flashser.tgz をダウンロードして、解凍する。この中にある initfs_flash を実行する。起動直後注意事項がいくつか表示される。たとえば他のアプリを全部終了して十分な RAM を確保しとけ、とかネットワークを切断しとけとか、インストールするのに 5MB の空きを確保しろとか、とどめは、もし失敗したら自力でフラッシュしなおせるよね?とか。まぁとりあえず注意事項にしたがってもろもろ確認したあと、続行する?Yes/No で Yes を選択。ついでオリジナルをバックアップするか?って聞かれるのでこれも Yes を選択。
しばらくして、不必要なもの(ファイル)を削除するか?って聞かれるが、よくわからんが Yes を選択。しばらくして Part2 - Ready for flashing this image? (yes/no) と聞かれる。この期におよんでいちいち聞きなさんな、って感じだな。書き終わると Press enter to reboot device のメッセージが出る。指示通り enter を押してリブート。
おぉ Booting from flash ... ってなメッセージが上の方に出てるよ。とりあえず initfs は入れ替わったのか?起動後はいたって普通。
さて、お次は現在のシステムを全部メモリカード上にコピーする。OS2007 の動いてる N800 の場合、
# insmod /mnt/initfs/lib/modules/2.6.18-omap1/mbcache.ko
を実行。次に
# insmod /mnt/initfs/lib/modules/2.6.18-omap1/ext2.ko # mkdir /opt/ # mount /dev/mmcblk0p2 /opt # mkdir /floppy/ # mount -t jffs2 /dev/mtdblock4 /floppy
本体メモリのファイルシステムを /floppy に、メモリカードの ext2 の方を /opt にマウントする。
コピーには tar を使うんだが、デフォルトの tar はちとまずいらしく(パスの長さ制限あり)、下記の通りテンポラリに tar コマンド用意してそれを使う。apt-get に -d をつけることでインストールせず、パッケージのダウンロードのみするので、そこからテンポラリのフォルダに展開する。
# apt-get -d install tar # cd /var/cache/apt/archives/ # mkdir /tar-temp/ # dpkg -x tar*.deb /tar-temp/ # /tar-temp/bin/tar cf - -C /floppy . | /tar-temp/bin/tar xvf - -C /opt
終わったら、下記コマンドを実行してリブートする。
# umount /opt # umount /floppy # chroot /mnt/initfs cal-tool --set-root-device ask:mmc2 # shutdown -r now
起動時に
BOOT MENU
Internal flash
MMC card
MMC card, partition 2, ext2
USB hard drive
Power off (when not on charger)
ってなメニューが出てきて、ハードウェアキーの上下で選択できる。3番目がデフォルト状態になっていたので、とりあえず上下ボタンを押してカーソルが移動すること確認してデフォルトの3番目を選択して十字カーソルの真ん中ボタンを押して確定した。mmc2 からの起動に失敗したって...orz とりあえず本体メモリ(flash)から起動した。
Internet tablet talk のスレッドでも、最初起動できなかったけどメモリカードを変えたら出来たとかいうのもあってちと不安になったが、その後細かい設定を変えたりして何度かトライしてるうちに起動出来たり出来なかったり。ちと時間切れでなぜそうなるのかは今のところ分かってない。単に不安定なのか、起動時に前回の終了時の状態がなんたらかんたらのときは大丈夫だけど、そうじゃないと起動できないとかなのか?もうちょっと調べてみる必要がありそう。
一応メモリカードからブートできたときのスクリーンキャプチャを貼っておいた。ルートパーティションの詳細を表示してあるんだが、Storage memory available が 1.20GB になってるのがわかると思う。今まで使用率で 70% 近かったのが 7% になった。入れたい放題じゃ ^^;
速度に関しては、起動時間を比べると分かりやすいんだが、今のところ確実に切り替えて起動できるわけではなさそうなので詳しくは調査してない。が、大して変わってないような気がしないでもない。
以下余談。今回メモリカードの整理をしてて気がついたんだが、買ったまんま再フォーマットせず使っていたがどうやらセクタサイズが 32KB になっていた。maemo mapper の地図画像のキャッシュを /media/mmc2 (つまりインターナルメモリ)に保存してたんだが、1つの画像ファイルは元々数KB しかないが、1枚あたり 32KB 使用されることになる。今回 mkdosfs コマンドでフォーマットしたときセクタサイズが 4KB になって、元々800~900MB 近く占有してた地図画像が 200MB 程になった。エクスターナルの方は今まで通りセクタサイズ 32KB のままにして主に音楽や動画ファイルなど大きなファイルを置くことにした。
poker, backgammon, tramadol, casino, insurance, loans