りなざう/swap を切る

りなざうのメモリ量はかなり乏しいので、すぐメモリ不足になる。SD/CF/HDD に swap を切ると、いくらか改善される。swap を作成する方法は2つある。どちらがいいかはよくわからない。HDD モデルは swap ファイルを作る方が楽だと思うけどね。

  • swap ファイルを作る
  • swap パーティションを作る

swap パーティションを切る

私は C1000(ハードディスクのないモデル)なので、SD に swap を切ることにした。sduty(study じゃなくて sduty だよ)とかいうツールもあるらしいが、別に fdisk と mkswap で何とかなる。最初に fdisk でパーティションを切る。

補足:1GB over の SD カードはモデルによって別途ドライバが必要なので注意。

# 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)