Shino's Bar Linux Stuff

走れパピーPuppy Linux core logo

Go to お家で使うリナックス ... 走れパピー 目次
31 Mar 2009 マウント・オプション iocharset=utf8 、puppyのときの mount -a を追記。(初出:23 Mar 2009)

WindowsとLinuxで仮想メモリを共用

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側の設定

Windows(2000,XP,Vista)のスワップ・ファイル(仮想メモリ)はデフォルトでシステムがインストールされているドライブに取られます。 このファイル・システムが FATならばそのままでかまいません。

システム・ドライブが NTFSでフォーマットされており、 別にFATでフォーマットされているドライブまたはパーティションがある場合、 このFATのドライブ上に仮想メモリを設定することで、ここで紹介するLinuxとの共用が使えます。

Windows XP でページング ファイルを移動する方法(マイクロソフト サポート オンライン) や Windows 2000 ではこちら などを参考に、設定してください。