目次


導入

Q:メモリが足りません。swapファイルは作れますか?
A:作れます。
 qswapが簡単です。

 swapファイルの作り方。SD に 32MBのswapを作る場合、ターミナルから
$ dd if=/dev/zero of=/mnt/card/.swapfile bs=512 count=65536
$ su
$ mkswap /mnt/card/.swapfile
$ swapon /mnt/card/.swapfile

 でオッケー。確認は free コマンドで。
http://www.linux.or.jp/JM/html/procps/man1/free.1.html


 サイズを変更するには、bsの値を変更しましょう。
 ※元記事は、"swapfile"でしたが、".swapfile"の方がよいので
 .swapfileに変更してあります。

 Part13) 65さん
 bs、countどっちの値を変更してもよいんだけど。意味がわかってればね。
 それに、32MBにしたいんだったら、bs=1M count=32
 のほうがわかりやすいと思うんだが。

SDカードパーテーション分割

廃屋
SDカードを2区画に切りなおし、最初の1区画目を通常
通りFAT16で、2区画目をSWAP形式でフォーマットすれば今まで
のようにWindows機でも読み込め、かつSWAPを利用しても安定して
運用できるようになります。(SWAPファイルよりも専用の区画の
方が速度面でも有利なはずです。)

転送速度比較

使うコマンドは「time」。後に続く引数のコマンドを実行すると同時に、その実行時間を取得する
組み込みタイプ。得られる値は①real②user③sysで、それぞれ①実行にかかった実際の時間
②ユーザーCPU時間(内部計算時間)③システムCPU時間を意味する。(標準出力時間)

ちなみに、コマンドの実行時はカーネルの働きによって一旦メモリ領域に実行結果が格納されるので、今回のようにデバイスの物理的アクセス速度を測定する場合は、syncコマンドでメモリに
バッファされたデータを全てデバイスに書き込んでやる必要がある。

SDのext2が一番早い。

swap設定

USBストレージとして使う場合には。Winのvfatとかの絡みで動作が不安定になるので、
ファイルシステムはext3にはしないこと。特にSDはswapとしての動作も不安定になる
ので、ext2フォーマットにしておくこと。

パーティーションをVfatとext2に分ける

# fdisk /dev/mmcda1 ・・・1GBのSD利用する場合ね
>n      *新規パーティション作成
>p      *primaryを作成(取り合えずVfat用)
>1       *1つめのパーティション
>      *ブランクでリターン(default値のまま)
+700M    *SWAPを256M確保するので、ストレージとして700Mを確保

続けて2つ目のパーティションを作成する。
手順としては、primaryの次を2つ目のパーティションだから「2」で指定し、
後はデフォルト値で進める。最後に「w」で書き込みfdiskは終了し、フォーマットへ移行。
# mkfs.msdos /dev/mmcda1        *Vfatで最初のパーティションをフォーマット
# mkfs.ext2 /dev/mmcda2         *ext2で次のパーティションをフォーマット
(2つ目にはlost+foundディレクトリが自動的に出来ているので一応存在を確認)

SDの場合のswap領域の作成&確保

確保した領域をマウントする。mmcda1は自動的にcardにマウント
されるはずなので、mmcda2を分かりやすいようにext2としてマウントする。  
# mkdir /mnt/ext2              *ext2というフォルダをマウント用に作成する
# mount /dev/mmcda2 /mnt/ext2   *mmcda2を/mnt/ext2 にマウントする

確保した領域にswapファイル領域を確保&有効化(256M)
# dd if=/dev/zero of=/mnt/ext2/.swapfile count=524288
# mkswap /mnt/ext2/.swapfile
# swapon /mnt/ext2/.swapfile
取り合えず、これで手動でのswap作成は完了

SDのマウント&解除とswap設定&解除の自動化

SDに関しては、ノートPCでデータ連携用に使う以外には取り合えず使う予定もないので、用途をFIXしてしまうことに。巷ではよりフレキシブルにSDのアンマウントとswap解除を別々に設定する人も多いみたいだが、運用がめんどそうなので、タップで全領域の開放を一度に実施する方向で設定することにしました。もちろんinit.dに起動スクリプトを書いたりswapon -aなんてものは使わないです。

挿入の自動化

やり方としては、まずmount&swaponの自動化のために明示的にコマンドを実行します。
#vi /etc/sd_mem_ctrl
(中略)
case "$ACTION" in
'insert')
sdctrl insert $SOCKET
mount /dev/mmcda2 /mnt/ext2    *追記
swapon /mnt/ext2/.swapfile       *追記

これでmmcda2のマウントとスワップ設定は自動化され、
SDを挿した時点で、2つのパーティーションがマウント&swapが有効な状態に。

取り出し時の自動化

#vi /etc/sdcontrol
(中略)
case "$ACTION" in
'eject'|'compeject')
swapoff /mnt/ext2/.swapfile        *追記
umount /mnt/ext2             *追記
umount /dev/mmcda2           *追記
sdctrl eject $SOCKET
count=0 

これで、タスクバーの「SDカードの取り出し」をタップすればswapが解除された上でvfatとext2が
両方アンマウントされ、SDカードが1発で取り出せるようになります。

=end

タグ:

zaurus
最終更新:2007年02月04日 11:54