<hpa@nwu.edu>
<hariguti@lsidiv.kawasaki-steel.co.jp>
comp.os.linux.help
に頻繁に現れます。
スワップ領域を共有する方法はいくつかあります。ここで述べるのは多分最も
複雑な方法ですが、ディスクパーティションを破壊する危険なしに両方の環境
に対して最大の性能を引き出す、私が経験した中で唯一の方法です。
【注:もしこの文書の以前のバージョンを使って、Windows のスワップ領
域が適切に回復されない(Windows がスワップファイルが壊れていると文句を
言う)という問題が発生した場合はこのバージョンの shutdown
スクリプ
トを試して下さい。以前のバージョンから少し変更が加えられています。】
注意: この文書はかなり以前に書かれたものなので、 いまどきの Linux 環境にはあてはまらない箇所があります。 (JF Project)
この手順には以下の物が必要です。古いバージョンの物にはいくらか問題があ りますので下記の条件にあう物を揃えることを強くお勧めします。
shutdown
および
init
。(例えば SysVinit-2.50 パッケージにはこの機能があります。
SysVinit-2.50 は sunsite.unc.edu
の /pub/Linux/system/Daemons
から入手できます)
FDISK
を使って必要なスワップ領域の大き
さを持つ DOS パーティションを作ります。 このパーティションにドライブ文
字(番号)を割り当てます。以下の説明では、例えば ``LABEL X:
'' や
``COPY FOO X:DUMMY.DAT
'' という命令では X
をあなたが割り当て
たドライブ文字に読み換えてください。FORMAT
コマンドでこのパーティションをフォーマットします。
FORMAT X:
LABEL
コマン
ドを用いて ``SWAP SPACE
'' に設定します。DIR
コマンドを用いて
ボリュームラベルを確認してください。パーティションのフォーマットとボリュー
ムラベルの設定は別々に行ってください。というのは FORMAT
コマンド
のいくつかのバージョンはボリュームラベルを本来置くべきブートセクタに置
かないらしいからです。【注
: 数人の方からボリュームラベルはルートディ
レクトリに書かれるとの指摘を受けました。確かにその通りですが、少なくと
も DOS 5.0 からはブートセクタにも書き込まれます。】
LABEL X: DIR X:
386 Enhanced
'' を選んでください。 ``Virtural Memory
'' を選
んでドライブ X:
に最大容量の Windows 永久スワップファイル(Windows
Permanent swap file)を作ってください(Windows が最大容量を教えてくれる
でしょう)。 Windows はそんなに大きなスワップファイルは使えないと文句を
しれませんが、無視してスワップファイルをとにかく作ってください。fdisk
コマンドを用いてパーティションの名前とブロック数を見
つけます。/dev/winswap
からこのパーティションにシンボリックリ
ンクを張ります。パーティションの名前が hda7
なら
ln -s /dev/hda7 /dev/winswapと打ち込んでください。
純正主義者への注
: シンボリックリンクを使ってください。このパーティ
ションの名前はいくつかの初期設定(configuration)ファイルに置かれるので、
名前の不一致は致命的になる可能性があります。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 のバージョンを私に知らせてください。手助けします。mkdir /mnt mount -t msdos /dev/winswap /mnt dd if=/dev/zero of=/mnt/dummy.fil umount /mnt
dd
コマンドは ``No space left on device
'' と言って来ますが、
これは正に望み通りの結果です。/etc/inittab
で以下のように記述されています。/etc/inittab
に以下の記述が無い場合は付け加えてください。
# Runlevel 0 means shut down the system l0:0:wait:/etc/brcこの HOWTO ファイルの残りの部分では、シャットダウンファイルのファイル 名は
/etc/brc
であると仮定します。dd if=/dev/winswap bs=512 count=XXX | gzip -9 > /etc/winswap.gz ^^^ 「置き換え」ここで
XXX
を ``Total special sectors
'' の数に置き換えて
ください。/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]---
/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]---
/dev/winswap
を /etc/fstab
ファイルに加える必
要はありません。実際、(おそらくコメントとして加える以外は)そうしないほ
うが賢明です。/etc/brc
を
実行せずに Linux を終了した場合には、Windows のスワッピングが働く前に
Linux を reboot して終了しないといけません。FORMAT X:
した後
Windows のスワップファイルを作り直すという手段も可能です。これに関する
唯一の方法は /etc/brc
に記述されたコマンドと同等のものを DOS
の AUTOEXEC.BAT
ファイルに入れておくことでしょう。が、不幸なこと
に私は DOS での手段を知らないのです!