りなざうのメモリ量はかなり乏しいので、すぐメモリ不足になる。SD/CF/HDD に swap を切ると、いくらか改善される。swap を作成する方法は2つある。どちらがいいかはよくわからない。HDD モデルは swap ファイルを作る方が楽だと思うけどね。
- swap ファイルを作る
- swap パーティションを作る
swap パーティションを切る
私は C1000(ハードディスクのないモデル)なので、SD に swap を切ることにした。sduty(study じゃなくて sduty だよ)とかいうツールもあるらしいが、別に fdisk と mkswap で何とかなる。最初に fdisk でパーティションを切る。
補足:1GB over の SD カードはモデルによって別途ドライバが必要なので注意。
- cf. http://tetsu.homelinux.org/zaurus/kernel/ (zaurus_sd_driver_update_cxxxx_1.0+tetsu_arm.zip)
# umount /dev/mmcda1
# fdisk /dev/mmcda
The number of cylinders for this disk is set to 16384.
There is nothing wrong with that, but this is larger than 1024,
and could in certain setups cause problems with:
1) software that runs at boot time (e.g., old versions of LILO)
2) booting and partitioning software from other OSs
(e.g., DOS FDISK, OS/2 FDISK)
Command (m for help): d
Selected partition 1
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-16384, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-16384, default 16384): +1900M
Command (m for help): n
Command action
e extended
p primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (15464-16384, default 15464):
Using default value 15464
Last cylinder or +size or +sizeM or +sizeK (15464-16384, default 16384):
Using default value 16384
Command (m for help): t
Partition number (1-4): 1
Hex code (type L to list codes): b
Command (m for help): p
Disk /dev/mmcda: 2013 MB, 2013265920 bytes
16 heads, 15 sectors/track, 16384 cylinders
Units = cylinders of 240 * 512 = 122880 bytes
Device Boot Start End Blocks Id System
/dev/mmcda1 1 15463 1855552+ b Win95 FAT32
/dev/mmcda2 15464 16384 110520 83 Linux
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
#
パーティションをフォーマットしたり、mkswap したりする。
# mkfs.vfat -n Zaurus /dev/mmcda1
mkfs.vfat 2.8 (28 Feb 2001)
# mkswap /dev/mmcda2
Setting up swapspace version 0, size = 113168384 bytes
起動時に自動でマウントする
swap パーティションの情報を、/etc/fstab に書く。
/dev/mmcda2 swap swap defaults 0 0
オプションが足らないのかも知れないけど再起動しても swapon -a しないとマウントしてくれない。しょうがないから /etc/rc.d/init.d/swap を作る。
#!/bin/sh
case "$1" in
'start')
echo "starting swap"
/sbin/swapon -a
;;
'stop')
echo "stop swap"
/sbin/swapoff -a
;;
*)
echo "usage: $0 {start|stop}"
;;
esac
そしてランレベル5(GUI)でこれが実行されるように
chmod 755 /etc/rc.d/init.d/swap
cd /etc/rc.d/rc5.d
ln -s ../init.d/swap S50swap
とかする。S50 はスクリプトを起動する順番なので、同じ番号から始まるスクリプトがなければ多分問題ない。これはランレベルの概念のある Linux に共通する話だと思うので、詳しいことは他のサイトで。
別に /etc/rc.d/rc.local に /sbin/swapon -a って書くだけでもいいかも知れない。再起動がめんどくさいので試していない。
ちゃんと swap が使えてればこんな感じになる。
# free
total used free shared buffers
Mem: 62028 60672 1356 0 252
Swap: 110516 1300 109216
Total: 172544 61972 110572
注意
当然だけど、swapoff しない状態で SD カードを抜くと何が起こるかわからないので注意。本当はタスクトレイの「SD-カード取り外し」に連動して swapoff すると賢いけど、そこまで考えていない。だから抜くな!
(2008.06.29)