ゼロスピンドル Let's note W2 で Debian 4.0 Etch
http://d.hatena.ne.jp/sa-y/20070701 の続き.
W2 の設定なんて1週間くらいで全部終ってるはずだったのにちっとも進みませんねぇ…
flashybrid
どうも Debian にはフラッシュメモリ + tmpfs によるシステムを構築するためのソフトウェアとして flashybrid というパッケージがあるらしいことが判明.ちょっと試してみました.
% apt-get install flashybrid
flashybrid についてのドキュメントが /usr/share/doc/flashybrid にインストールされるので読みます. Debian での設定の手順は以下の通りです.
- flashybrid の設定
- /ram ディレクトリの作成
- /etc/default/flashybrid で flashybrid を有効化
- リブート
flashybrid の設定
設定ファイルは以下の3つです.
-
- /etc/flashybrid/config
- /etc/flashybrid/ramstore
- /etc/flashybrid/ramtmp
config で全体の設定.設定内容はフラッシュメモリがマウントされるディレクトリや tmpfs をマウントするディレクトリ,作成する tmpfs の上限サイズなどです.
ramstore と ramtmp は両方とも書き込み可能にするディレクトリを羅列するファイルです.この2つのファイルに書かれたディレクトリは起動時に tmpfs がマウントされ元のディレクトリの内容がすべてコピーされることにまります. 2つのファイルの違いはシャットダウンやリブートした時に内容をフラッシュメモリに書き戻すかどうかのようです.つまり ramtmp の方に書かれたディレクトリへの変更内容は破棄されて, ramstore の方に書かれたディレクトリの方は変更内容が書き戻されます.あとこの2つのどちらにも書かれなかったディレクトリは書き込み不可になるようです.
とりあえずテストなので config はデフォルトのままで, ramstore に /root ディレクトリだけを, ramtmp に /tmp だけを指定してみます. *1
% cat /etc/flashybrid/ramstore /root % cat /etc/flashybrid/ramtmp /tmp
/ram ディレクトリの作成
% mkdir /ram
/etc/default/flashybrid で flashybrid を有効化
% cd /etc/default % vi flashybrid
以下のように変更します.
ENABLED=no
↓
ENABLED=yes
リブート
% shutdown -r now
結果
で起動したときの状態が以下です.
% df -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/hda1 ext3 7835176 697028 6740140 10% / tmpfs tmpfs 383704 0 383704 0% /lib/init/rw udev tmpfs 10240 44 10196 1% /dev tmpfs tmpfs 383704 0 383704 0% /dev/shm tmpfs tmpfs 94208 488 93720 1% /ram % df -a -T Filesystem Type 1K-blocks Used Available Use% Mounted on /dev/hda1 ext3 7835176 697028 6740140 10% / tmpfs tmpfs 383704 0 383704 0% /lib/init/rw proc proc 0 0 0 - /proc sysfs sysfs 0 0 0 - /sys procbususb usbfs 0 0 0 - /proc/bus/usb udev tmpfs 10240 44 10196 1% /dev tmpfs tmpfs 383704 0 383704 0% /dev/shm devpts devpts 0 0 0 - /dev/pts tmpfs tmpfs 94208 492 93716 1% /ram /ram/tmp none 94208 492 93716 1% /tmp /root none 7835176 697028 6740140 10% /ram/root.flash /ram/root none 94208 492 93716 1% /root
df の結果から適当にflashybrid の処理内容を推測してみる.
ramtmp に設定した /tmp ディレクトリの方は以下のようになってるっぽい.
- /ram に tmpfs をマウント
- /ram/tmp を作成
- /tmp の中身を /ram/tmp にコピー
- /ram/tmp を /tmp にバインドマウント
ramstore に設定した /root ディレクトリの方はちょっとだけ違ってる.
- /ram に tmpfs をマウント
- /ram/root を作成
- /root の中身を /ram/root にコピー
- /root を /ram/root.flash にバインドマウント
- /ram/root を /root にバインドマウント
元となるフラッシュメモリの領域が見えなくならないように /ram/root.flash にマウントしている.おそらくシャットダウン時に /root の内容を /ram/root.flash に書き戻してやるためにこんな形にマウントしてるんじゃないかしらん? バインドマウント使いまくってて意外と複雑になっていますね.
tmpfs 化されたディレクトリに変更を加えてリブートしてみる.
% echo "/root" > /root/hello.txt % echo "/tmp" > /tmp/hello.txt % cat /root/hello.txt /root % cat /tmp/hello.txt /tmp % shutdown -r now
起動したらファイルの中身を確認.
% cat /root/hello.txt /root % cat /tmp/hello.txt cat: t/mp/hello.txt: No such file or directory
まぁ期待通りの動作ですね.