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