I05 voyageMPD0.9.1をRAMディスクで運用

室長:voyageMPD0.9.1をオンメモリで動くように修正してみよう。voyageMPDはバージョンアップが早くて情報の賞味期間が短いので手早くいくぞ。

助手:オンメモリで動かすには多量のメモリが必要ですよ。

室長:voyageMPDは小さいのでそのままコピーしてもルートシステム用に300Mくらい確保できれば大丈夫だ。squashfsをメモリにコピーしてそれをマウントした方が少ないメモリで動きそうだが面倒なのでそのままコピーしよう。

助手:では方法をググって….

室長:経過は省略じゃ。手っ取り早く結果を示すぞ。作業はLinuxをインストールしたパソコンで行う。今回もubuntuで試してみたぞ。当然今回も無保証だ。起動しなくなったりデータが消えても責任は持てないので注意してやってくれ。

まずvoyageMPDの/boot/initrd.img-3.8.13-voyageを適当な作業用ディレクトリにコピーする。そしてtorampatch.txtをダウンロードして同じ場所に保存する。

torampatch.txt

--- local       2013-06-22 12:18:39.513358354 +0900
+++ init/scripts/local  2013-06-23 08:42:42.709901603 +0900
@@ -100,10 +100,23 @@

        # FIXME This has no error checking
        # Mount root
-       if [ "${FSTYPE}" != "unknown" ]; then
-               mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
+
+       if [ "${toram}" = "yes" ]; then
+               mkdir -m 0700 /preroot
+               mount -t tmpfs -o size=${rootsize:-512m} tmpfs ${rootmnt}
+               if [ "${FSTYPE}" != "unknown" ]; then
+                       mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} /preroot
+               else
+                       mount ${roflag} ${ROOTFLAGS} ${ROOT} /preroot
+               fi
+               cp -rfa /preroot/* ${rootmnt}/
+               umount /preroot
        else
-               mount ${roflag} ${ROOTFLAGS} ${ROOT} ${rootmnt}
+                if [ "${FSTYPE}" != "unknown" ]; then
+                        mount ${roflag} -t ${FSTYPE} ${ROOTFLAGS} ${ROOT} ${rootmnt}
+                else
+                        mount ${roflag} ${ROOTFLAGS} ${ROOT} ${rootmnt}
+                fi
        fi

        [ "$quiet" != "y" ] && log_begin_msg "Running /scripts/local-bottom"

これで準備完了だ。
あとは作業用ディレクトリのなかで以下のように実行する。


mkdir init
cd init
zcat ../initrd.img-3.8.13-voyage | cpio -idm --quiet
patch scripts/local < ../torampatch.txt
find | cpio --quiet -o -H newc | gzip -9 > ../initrd.img-toram
cd ..

これで新しいイメージがinitrd.img-toramという名前でできている。これをvoyageMPDの/boot/initrd.img-3.8.13-voyageに上書きコピーする。オリジナルは作業ディレクトリに残っているのでうまくいかなかったら戻してくれ。あとはgrubの設定を書き換える。
voyageMPDの/boot/grub/menu.lstを編集して以下のようにする。

/boot/grub/menu.lst

timeout 5
default 0

title Voyage Linux 0.9 (Build Date 20130617) TORAM 350m
root (hd0,0)
kernel /vmlinuz root=LABEL=VOYAGE_FS toram=yes rootsize=350m
initrd /initrd.img

title Voyage Linux 0.9 (Build Date 20130617)
root (hd0,0)
kernel /vmlinuz root=LABEL=VOYAGE_FS
initrd /initrd.img

これでオンメモリで起動できるはずだ。あと自動でUSBメモリをマウントしてしまうのでvoyageMPDの/etc/rc.localを編集してexit 0の前に

/etc/rc.local


umount /media/usb0
umount /media/usb1

と書いておこう。これで起動後にUSBメモリを引っこ抜いても大丈夫だ。

助手:なにをしているのかよく分からないので解説よろ。

室長:ルートシステムをマウントしている場所はinitrdのなかの/scripts/localというファイルの中にあるのでイメージを分解してtmpfsにルートシステムをまるごとコピーするように修正している。再度イメージに固めてオリジナルと交換する。grubで指定した起動オプションは環境変数に入るのでtoramという変数が”yes”ならメモリにコピーし、それ以外なら通常の起動をする。rootsizeで確保するtmpfsの最大サイズを指定している。省略時は512mにしてみた。使われなかった分のメモリは消費されないので積んでいるメモリに合わせて多めに指定しても構わない。オンメモリで起動した場合にはremountrwで書き込んでも電源を切ればすべて消えてしまうので注意してくれ。

2013年6月23日

目次へ