MS-Windows と Linux でスワップ領域を共有する方法 (v.1.2 13 Nov 1994) Peter Anvin, 翻訳バージョン v1.2, 1995年 2月 5日 播口陽一, 多くの人が Linux と MS-Windows の両方を使っています。そのようにする能 力は「Linux 革命」にとって重要なことです。例えば他の人に、その人が良く 使うソフトウェアを使えるようにしたままで Linux を実験してもらう(そして Linux を大好きになってもらう)ことができるからです。Linux と MS-Windows は両者ともディスクへのスワップを伴う仮想記憶を使いますから、ディスクを 節約するためにスワップ領域を共有する方法についての質問が comp.os.linux.help に頻繁に現れます。スワップ領域を共有する方法はいく つかあります。ここで述べるのは多分最も複雑な方法ですが、ディスクパー ティションを破壊する危険なしに両方の環境に対して最大の性能を引き出す、 私が経験した中で唯一の方法です。【注:もしこの文書の以前のバージョンを 使って、Windows のスワップ領域が適切に回復されない(Windows がスワップ ファイルが壊れていると文句を言う)という問題が発生した場合はこのバー ジョンの shutdown スクリプトを試して下さい。以前のバージョンから少し変 更が加えられています。】 注意: この文書はかなり以前に書かれたものなので、いまどきの Linux 環境 にはあてはまらない箇所があります。 (JF Project) 1. 何が必要か この手順には以下の物が必要です。古いバージョンの物にはいくらか問題があ りますので下記の条件にあう物を揃えることを強くお勧めします。 o MS-DOS 5.0 あるいはそれ以降のバージョン(テストは 6.2 で行いました) o MS-Windows 3.1 あるいはそれ以降のバージョン o シャットダウン中にファイルを実行できる shutdown および init。(例え ば SysVinit-2.50 パッケージにはこの機能があります。 SysVinit-2.50 は sunsite.unc.edu の /pub/Linux/system/Daemons から入手できます) 2. 手順 o DOS を boot します。FDISK を使って必要なスワップ領域の大きさを持つ DOS パーティションを作ります。 このパーティションにドライブ文字(番 号)を割り当てます。以下の説明では、例えば ``LABEL X:'' や ``COPY FOO X:DUMMY.DAT'' という命令では X をあなたが割り当てたドライブ文字 に読み換えてください。 o DOS の FORMAT コマンドでこのパーティションをフォーマットします。 FORMAT X: o このパーティションのボリュームラベルを DOS の LABEL コマンドを用い て ``SWAP SPACE'' に設定します。DIR コマンドを用いてボリュームラベ ルを確認してください。パーティションのフォーマットとボリュームラベ ルの設定は別々に行ってください。というのは FORMAT コマンドのいくつ かのバージョンはボリュームラベルを本来置くべきブートセクタに置かな いらしいからです。【注: 数人の方からボリュームラベルはルートディレ クトリに書かれるとの指摘を受けました。確かにその通りですが、少なく とも DOS 5.0 からはブートセクタにも書き込まれます。】 LABEL X: DIR X: o Windows を起動してください。コントロールパネルを開いて ``386 Enhanced'' を選んでください。 ``Virtural Memory'' を選んでドライブ X: に最大容量の Windows 永久スワップファイル(Windows Permanent swap file)を作ってください(Windows が最大容量を教えてくれるでしょう)。 Windows はそんなに大きなスワップファイルは使えないと文句をしれませ んが、無視してスワップファイルをとにかく作ってください。 o Windows を終了してください。 o Linux を boot して root で login してください。 o fdisk コマンドを用いてパーティションの名前とブロック数を見つけま す。/dev/winswap からこのパーティションにシンボリックリンクを張りま す。パーティションの名前が hda7 なら ln -s /dev/hda7 /dev/winswap と打ち込んでください。 純正主義者への注: シンボリックリンクを使ってください。このパーティショ ンの名前はいくつかの初期設定(configuration)ファイルに置かれるので、名 前の不一致は致命的になる可能性があります。 o 下記はパーティションを分析していくつかの特別な情報を引き出すバイナ リファイルを uuencode したものです。uudecode した後 gunzip で解凍 し、 msinfo /dev/winswap と実行してください。 ______________________________________________________________________ begin 755 msinfo.gz M'XL(`$$YNRT"`Y557TQ;51@_MW]HZ0AM'"$U-.28W([..>84%1%D2QH>',9* M2S&VC);V=FV]T*;WWBD+1I)K'YH;DOJF#YH80GPR^J""D"R8-K('MS2;#Q*S M%Y,E-P&592A$V:[?.;?M"FP/?DG/G^_[?7_Z_3G7PL313TT(?8P0]_PX\M<3@!`'ZZ26[`-I7A.F!%$;JK.;21`!#.\-,5A/CK)\=B3FL:3F8PH M<#$QDSO91Q%^>L%"Z@KW*"-NR3;""5SN,A?'NI[0=P0Q=#[P&&$5@3UNZ3VW M=-(V`NYQ/)6CX)DC2F`KD!&C/!:R7"Q%]L-6`8'D+=]8T*^$V8@RR\;5\P9( M^;\&T:F]E`Q`EI,_6YHCZBT#BJ09M0VV9!:XVKLF]0NX%'Z4R];\W](3A-%J MI:`_&12!>@33QC0S'V8]?O5+0`;3UC23K)!"?@97N8R#:29MF/>R)PI>UJF) MK%/-4QR39OSJE8,8MHZ)UC#`?1ZX'N!ZU`L'X;@.?X["C<1DUT%,9QW32C'' M"<98PQR#8#=(L'>96NQWR/4W1@>H3\'!OC3,MMN_"[,=A1OVK^XEH($[$S^H MY@28=MB78-$/`=8)(L=\P*$5*I_LS@)_G7!=\Z9V@F"``Y$XQM[T!T>(WHNU M/T9CH)YIZI("&9ZK32AR=DTN/QNZ."&7?27H_<(=_^=Q"U1N3Y.>!-E`$BY( M;(4ZG)/[\_0F_54HY7\5[8F^@IV9( M,6!G2;BU+YN)@X2,9^)QG%\!IZ@5`SSJ>EWN!SN>HCK MLJ%F08R*J5B4YV=T0-R&J#UYJW>4#"7/#D,0/GG`0ZI@__`;6->]K!>C[:!B]D?DT,*<;Y6=9Y]3:P][^W`?+>8F(1!*ZY7B1:BN=@D_XY9?0I M'?ZT0=V@BBWIIV$47#Y@7-,9Q>0<*=7;NMW-NS2>9#_X3V)8()?A$;!`ALRW M#&\%RO_^@9F6TP<]'M8J@'AFA"[JM]0(WCQ!`[.826!F&A@HG4JWU5R_KKL& M9GNQF$;J[?NZ\YUZ?B].C,OEWI*\94J`:6LB?U,RK^2.([0QRQK(W!D2[K5M M,G>&0B7A'K03F"'17*&L#9XU@+U2L9K4-GCIG(K(NE:SM,>SM,?;X,T:&U6, MT./E%NAUTNE_$,^E(A0M!B7K[D'>X6'\FC25Q3W=+V3YLR^CXJW.S0>#54*# M#ZE^AI+N-35^_>![U4!?@VQ%ETMC5"\GH->"T6'4/2NS>((N0,DT>_ 9K6^!S%65KRS`,`,UVB43\!]-BKG]B`<``#5" ` end ______________________________________________________________________ ``Total special sectors'' の数字を書き留めておいてください。また、ボ リュームラベルが ``SWAP SPACE'' になっていることを確かめてください。も しそうなっていなければ DOS を reboot してもう一度 LABEL コマンドでボ リュームラベルを設定してください。それでもまだうまくいかないときは使用 した DOS のバージョンを私に知らせてください。手助けします。 o 【オプションの手順】Windows はしばしばたとえそうしないようにと指示 されても、パーティション上にいくらかの領域を残します。この領域は使 用しないで下さい。Linux を走らせた時に必ず消去されます。このような 領域を偶然使用して(データを失って)しまうことを避けたい場合は以下に 示す命令を用いて埋め草ファイルを作り、その領域を埋めて下さい: mkdir /mnt mount -t msdos /dev/winswap /mnt dd if=/dev/zero of=/mnt/dummy.fil umount /mnt dd コマンドは ``No space left on device'' と言って来ますが、これは正に 望み通りの結果です。 o シャットダウンファイルの名前を確認してください。SysVinit では /etc/inittab で以下のように記述されています。/etc/inittab に以下の 記述が無い場合は付け加えてください。 # Runlevel 0 means shut down the system l0:0:wait:/etc/brc この HOWTO ファイルの残りの部分では、シャットダウンファイルのファイル 名は /etc/brc であると仮定します。 o 以下のように打ち込んでください dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz ^^^ 「置き換え」 ここで XXX を ``Total special sectors'' の数に置き換えてください。 o 下記の記述を /etc/rc ファイル(あるいはあなたの init が呼び出すファ イル)の ``swapon -a'' コマンドの前に加えてください(もしそのようなコ マンドがなければ、/etc/rc ファイルにあるどんな mount コマンドよりも 前に加えてください)。 (Slackware 2.x のように) /etc/rc.d ディレクトリが存在する場合、下記 の記述を加えるファイルは ``/etc/rc.d/rc.S'' です。 もしあなたの swapon が /etc にある場合は、下記の記述の中の /sbin/swapon を /etc/swapon に置き換えてください。もし /bin にある 場合は、/bin/swapon に置き換えてください。mkswap についても同じ操作 を行ってください。 XXXXX を fdisk コマンドで与えられるパーティションの実際のブロック数 で置き換えてください。 ___________________________________________________________________ ---[BEGIN CODE SEGMENT]--- # # Verify and initialize swap space # echo -n 'Verifying swap space... ' if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \ = 'SWAP-SPACE' ]; then echo 'Linux signature found' /sbin/swapon /dev/winswap elif [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=11 skip=43`" \ = 'SWAP SPACE ' ]; then echo 'DOS signature found' /sbin/mkswap /dev/winswap XXXXX /sbin/swapon /dev/winswap else echo 'No signature found' echo 'ERROR: Will not swap' fi ---[END CODE SEGMENT]--- ___________________________________________________________________ o 下記の記述を /etc/brc ファイル(あるいはそれと同様のことを行っている ファイル)の、スワップが必要となる可能性のある、あらゆるコマンドの後 に加えてください。/etc/rc.d ディレクトリが存在する場合 は、/etc/rc.d/rc.0 ファイルが /etc/brc ファイルに相当します。 ___________________________________________________________________ ---[BEGIN CODE SEGMENT]--- # # Terminate swapping and restore DOS/Windows swap info # /sbin/swapoff /dev/winswap if [ "`/bin/dd 2>/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \ = 'SWAP-SPACE' ]; then echo 'Restoring DOS/Windows swap info' /bin/zcat /etc/winswap.gz > /dev/winswap else echo 'ERROR: /dev/winswap lacks swap signature, skipping restore' fi ---[END CODE SEGMENT]--- ___________________________________________________________________ o Linux を reboot します。この時新しいスワップデバイスが有効になって いるはずです。 3. 2,3 の注意 o /dev/winswap を /etc/fstab ファイルに加える必要はありません。実 際、(おそらくコメントとして加える以外は)そうしないほうが賢明です。 o Linux セッションがクラッシュしたりあるいは /etc/brc を実行せずに Linux を終了した場合には、Windows のスワッピングが働く前に Linux を reboot して終了しないといけません。FORMAT X: した後 Windows のス ワップファイルを作り直すという手段も可能です。これに関する唯一の方 法は /etc/brc に記述されたコマンドと同等のものを DOS の AUTOEXEC.BAT ファイルに入れておくことでしょう。が、不幸なことに私は DOS での手段を知らないのです! 4. 翻訳者の放棄声明 o 私はこの翻訳が正確である事を一切保証しません。 o 私はこの翻訳の内容および、この翻訳からから生じたことについて、いか なる責任も否認します。