日記帳

日記です。

ゼロスピンドル 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 での設定の手順は以下の通りです.

  1. flashybrid の設定
  2. /ram ディレクトリの作成
  3. /etc/default/flashybrid で flashybrid を有効化
  4. リブート
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

まぁ期待通りの動作ですね.

*1:以前に /etc/fstab に設定した /tmp や /var/log はコメントアウトしておきます.