  MS-Windows と Linux でスワップ領域を共有する方法 (v.1.2 13
  Nov 1994)
  Peter Anvin, <hpa@nwu.edu>
  翻訳バージョン v1.2, 1995年 2月 5日
  播口陽一, <hariguti@lsidiv.kawasaki-steel.co.jp>

  多くの人が 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<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&&$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[<!33)\2M%:Y(.THX_N%K?%2L9&(O=4>8F^@IV9(
  M,<HEDU:17T'23M)GA#ANW-<F'J5-]>6!G2;BU+YN)@<RL.JBIFD4[:<###UG
  MO3Z77WO?L?O+@@G\+(-<"X&QT"&#_N7@_\2;JGAEF&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&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#&\%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%ET<L!BC>MC5"\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  私はこの翻訳の内容および、この翻訳からから生じたことについて、いか
     なる責任も否認します。

