1. PC関係‎ > ‎

りなざう/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)

Comments