
WindowsとLinuxをデュアル・ブートしているとき、スワップ領域をそれぞれに持つのは無駄ですよね。 これらを共用する方法を示します。
Windowsの仮想メモリはディスク上のファイルに取られています。 Windows 2000, XP, Vista では、システム・ドライブのルート・ディレクトリの pagefiles.sys というのがそれです。 Linuxのスワップ領域は独立のスワップ・パーティションを使うのが一般的ですが、ファイルを用いることもできます。
ハードディスクをFAT32でフォーマットし、 Windows 2000 をインストールした上に Puppy Linux をFrugalインストールしました。 この場合、次のような内容のスクリプトを適当な名前で実行属性を付けて /etc/init.d ディレクトリに入れておきます。 ファイル・システムはFATではなくてはなりません。残念ながらNTFSは使えないようです。
#!/bin/bash # for furugal installed Puppy Linux ... /etc/init.d/winswap SWAPFILE=/mnt/home/pagefile.sys [ "$1" = "stop" ] && exit [ -f $SWAPFILE ] && mkswap $SWAPFILE && swapon $SWAPFILE
Puppy Linuxは立ち上がると pup_save.2fs のあるパーティションを/mnt/homeにマウントします (実際には /initrd/mnt/pup_save へのリンク)。 その後 /etc/init.d ディレクトリにある実行可能なプログラムを 'start' というパラメータを付けて実行します。 シャットダウンのときには同じプログラムを 'stop'というパラメータを付けて実行するので、 上記スクリプトでは 'stop'のときは何もしないようにしています。
次のスクリプトは、Linuxにマウントされている FATファイル・システムの中から Windowsのスワップ・ファイル pagefile.sys を見付けて、Linuxのスワップ領域として利用するものです。 さきの簡単なスクリプトと置き換えて使えます。 パラメータに 'stop'を付けて呼ばれると、利用していたスワップ・ファイルを開放します。
#!/bin/sh # # winswap Enable swap space at Windows swap file # # chkconfig: 345 90 90 # # description: Find Windows swap files on mounted vfat partitions # and enble them for Linux system # SWAPFILENAME=pagefile.sys PATH=/sbin/:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin # See how we were called. case "$1" in stop) SWAPS=$(cat /proc/swaps | grep ^/ | grep /$SWAPFILENAME | cut -d' ' -f1) [ "$SWAPS" = "" ] && exit swapoff $SWAPS ;; status) cat /proc/swaps ;; *) #mount -a ;# Some time this command needed DEVICES=$(df -t vfat |grep ^/dev | cut -d' ' -f1) || exit for DEVICE in $DEVICES do MOUNTPOINT=$(grep ^$DEVICE /etc/mtab | cut -d' ' -f2) || break SWAPFILE=$MOUNTPOINT/$SWAPFILENAME [ -f $SWAPFILE ] && mkswap $SWAPFILE && swapon $SWAPFILE done ;; esac
上記内容のファイル(名前を winswapとしておきます)に実行属性を付けて、/etc/init.d あるいは /etc/rc.d/init.d に入れておきます。 Puppy Linux ではそれだけで良いですが、他の多くのLinuxではchkconfigなどで起動設定が必要です。 root権限で
/sbin/chkconfig winswap on
上のスクリプトは、すでにマウントされているドライブまたはパーティションの中だけを探すので、 このスクリプト実行の前に該当ドライブがマウントされていなければなりません。 Puppy Linuxの場合 pup_save.2fsのあるドライブは起動時にマウントされますが、 スワップ・ファイルが他のドライブにある場合は、それも起動時にマウントされるようにしておかねばなりません。 /etc/fstabにそれを記述しておきます。
/dev/sda1 がそのドライブだとすると、ディレクトリ /mnt/sda1 を作っておいてから、次のような行を /etc/fstabに追記します。
/dev/sda1 /mnt/sda1 vfat iocharset=utf8 0 0
たいていのLinuxは起動時に mount -a が実行されて、この記述にもとづきマウントされますが、 Puppy Linuxではそうなっていないようです。 この場合はさきのスクリプトで該当行の先頭の'#'を取り除いて mount -a を実行させてください。
Windows(2000,XP,Vista)のスワップ・ファイル(仮想メモリ)はデフォルトでシステムがインストールされているドライブに取られます。 このファイル・システムが FATならばそのままでかまいません。
システム・ドライブが NTFSでフォーマットされており、 別にFATでフォーマットされているドライブまたはパーティションがある場合、 このFATのドライブ上に仮想メモリを設定することで、ここで紹介するLinuxとの共用が使えます。
Windows XP でページング ファイルを移動する方法(マイクロソフト サポート オンライン) や Windows 2000 ではこちら などを参考に、設定してください。