<!doctype linuxdoctr system>
<article>
<title>TOWNS で Linux と WINDOWS でスワップファイルを共有する方法</title>
<author>萩尾（ＶＩＣ） &lt;GAA00714@niftyserve.or.jp&gt;</author>
<date>1994年10月30日</date>
<trans>播口  陽一 &lt;hriguti@lsidiv.kawasaki-steel.co.jp&gt;</trans>
<tdate>1994年10月30日</tdate>

<abstract>
TOWNS 上で、Linux と Windows とで swap file を共有する方法。
</abstract>
<!--
ＴＯＷＮＳでＬinuxとＷＩＮＤＯＷＳでスワップファイルを共用する方法
                                                      (1994.10.30)
-->

<p><bf>JF より：この文書は、1994年10月以来、更新されていません。
現在と事情が異なる場合があるので、ご注意ください。
</bf></p>

<sect>はじめに
<p>
『ＭＳ−ＷＩＮＤＯＷＳとＬinuxで swap space を共用する方法』
(Peter Anvin &lt;hpa@nmu.edu&gt; 氏作)
(播口  陽一 &lt;hriguti@lsidiv.kawasaki-steel.co.jp&gt; 氏訳)
より。

有用な情報をくださった両氏に感謝します。
</sect>

<sect>設定方法
<p>
作業は ＤＯＳ５ または ６ で作業を行ってください。Ｔ−ＯＳ では、うまく
いきません。
ＤＯＳ３ では確認していませんが、Ｔ−ＯＳ がだめなのでたぶんだめでしょう。
なお、動作環境は  Ｌinux version 1.1.12 for ＦＭＴＯＷＮＳ release 1.2 です。

方法は、

<enum>

<item><p>
ＳＥＴＵＰ２ でスワップファイル用の区画を ＭＳ−ＤＯＳ または、ＭＳ−ＤＯＳ
５１２ の区画として作成し、ドライブを追加します。
<p></item>

<item><p>
そのドライブを ＦＯＲＭＡＴ します。
このときボリュームラベル名は "<tt>SWAP SPACE</tt>" にしてください。
<p></item>

<item><p>
ＷＩＮＤＯＷＳ を起動して、そのドライブに最大容量で永久スワップファイルを作
成します（別のファイルを間違って書き込むことがないように）。また、このドライブ
はスワップファイル以外には使用しないで下さい。スワップファイル以外のファイルは
Ｌinux 動作後に破壊されてる可能性があります（たぶん壊れているでしょう）。
<p></item>

<item><p>
Ｌinux を起動後、login して次のコマンドを実行して、スワップファイルの
区画をリンクしてください。

<tscreen><verb>
  ln -s /dev/sd?? /dev/winswap
</verb></tscreen>

  <tt>sd??</tt> の <tt>??</tt> の部分は、<tt>fdisk -l</tt> で確認できます。

おまけ：スワップファイルのあるドライブに誤って、重要なデータを書き込んでしまわ
ないようにドライブの未使用領域をいっぱいにするには以下のコマンドを実行してくだ
さい。

<tscreen><verb>
  mount -t msdos /dev/winswap /mnt
  dd if=/dev/zero of=/mnt/dummy.fil
  umount /mnt  
</verb></tscreen>
<p></item>

<item><p>
<ref id="file-1" name="図１">のシェルスクリプトを <tt>msinfo</tt> という名前
で作成し、実行してください。

<tscreen><verb>
  # sh msinfo /dev/winswap
</verb></tscreen>

　このとき出力される "<tt>Sector size</tt>" と "<tt>Total special sectors
</tt>" の数字をメモっておいてください。
<p></item>

<item><p>
以下のコマンドを実行してください。

<tscreen><verb>
  dd if=/dev/winswap bs=XXX count=YYY | gzip -9 &gt; /etc/winswap.gz
</verb></tscreen>

<tt>XXX</tt> の部分には、"<tt>Sector size</tt>"、<tt>YYY</tt> の部分には "
<tt>Total special sectors</tt>" の数値（さっきメモった値）を代入してください。
<p></item>

<item><p>
<tt>/etc/rc.d/rc.S</tt> をエディタで以下のように修正してください。

<itemize>
<item>swapon -a をコメントアウトする。
<item>その直後に図２コードを追加する。
</itemize>

<ref id="file-2" name="図２">コードの中の <tt>XXXXX</tt> の部分には <tt>
fdisk</tt> で確認したスワップファイルボリューム（swap space）のブロック数を
代入してください。
<p></item>

<item><p>
<tt>/etc/rc.d/rc.0</tt> をエディタで以下のように修正してください。

<itemize>
<item><tt>umount</tt> の前に<ref id="file-3" name="図３">のコードを追加する。
</itemize>
</item>

</enum>

これで、Ｌinuxと Ｗindows でスワップファイルが共用できるようになります。

なお、<tt>/dev/winswap</tt> を <tt>/etc/fstab</tt> に登録する必要はありません。
また、操作を誤るとドライブの内容を破壊する可能性があるため、バックアップを
とるなどして、十分に注意して作業してください。もし、破壊してしまった場合、
私は責任を取れませんので。

<verb>
このドキュメントに対してのご意見は、GAA00714 萩尾（ＶＩＣ）
　　　　　　　　　　　　　　　    （GAA00714@niftyserve.or.jp）まで。
</verb>

</sect>

<sect>参考ファイル
<p>
<sect1>図１：<tt>msinfo</tt> のリスト<label id="file-1">
<p>
<tscreen><verb>
#!/bin/sh
#
# Extract special sector information from an MS-DOS partition
#
PATH=/bin:/usr/bin:/usr/local/bin
if &lsqb; "$#" != "1" &rsqb;; then
  echo "Usage: $0 &lt;partition-name&gt;"
  exit 1
fi
if &lsqb; ! -r $1 &rsqb;; then
  echo "$1: Permission denied"
  exit 1
fi
DOSVER="`dd 2&gt;/dev/null if=$1 bs=1 count=8 skip=3`"
SECSIZE=`dd 2&gt;/dev/null if=$1 bs=1 count=2 skip=11 | hexdump -e '1/2 "%u\n"'`
RESERV=`dd 2&gt;/dev/null if=$1 bs=1 count=2 skip=14 | hexdump -e '1/2 "%u\n"'`
FATS=`dd 2&gt;/dev/null if=$1 bs=1 count=1 skip=16 | hexdump -e '1/1 "%u\n"'`
ROOTDIR=`dd 2&gt;/dev/null if=$1 bs=1 count=2 skip=17 | hexdump -e '1/2 "%u\n"'`
FATSIZE=`dd 2&gt;/dev/null if=$1 bs=1 count=2 skip=22 | hexdump -e '1/2 "%u\n"'`
LABEL="`dd 2&gt;/dev/null if=$1 bs=1 count=11 skip=43`"
FILESYS="`dd 2&gt;/dev/null if=$1 bs=1 count=8 skip=54`"
let FATSEC=$FATSIZE*$FATS
let ENTPERSEC=$SECSIZE/32
let ROOTSEC=$ROOTDIR/$ENTPERSEC
let EXTRA=$ROOTDIR%$ENTPERSEC
if &lsqb; $EXTRA != 0 &rsqb;; then let ROOTSEC=$ROOTSEC+1; fi
let SPECIAL=$RESERV+$FATSEC+$ROOTSEC
echo "Formatting DOS version:      $DOSVER"
echo "Filesystem:                  $FILESYS"
echo "Volume label:                $LABEL"
echo "Sector size:                 $SECSIZE"
echo "Reserved sectors:            $RESERV"
echo "FAT sectors:                 $FATSEC (${FATS}x${FATSIZE})"
echo "Root directory sectors:      $ROOTSEC"
echo "Total special sectors:       $SPECIAL"
</verb></tscreen>
</sect1>

<sect1>図２：<tt>/etc/rc.d/rc.S</tt> に追加する部分<label id="file-2">
<p>
<tscreen><verb>
#
# Verify and initialize swap space
#
echo -n 'Verifying swap space... '
if &lsqb; "`/bin/dd 2&gt;/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \
   = 'SWAP-SPACE' &rsqb;; then
  echo 'Linux signature found'
  /sbin/swapon /dev/winswap
elif &lsqb; "`/bin/dd 2&gt;/dev/null if=/dev/winswap bs=1 count=11 skip=43`" \
   = 'SWAP SPACE ' &rsqb;; 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
</verb></tscreen>
</sect1>

<sect1>図３：<tt>/etc/rc.d/rc.0</tt> に追加する部分<label id="file-3">
<p>
<tscreen><verb>
#
# Terminate swapping and restore DOS/Windows swap info
#
/sbin/swapoff /dev/winswap
if &lsqb; "`/bin/dd 2&gt;/dev/null if=/dev/winswap bs=1 count=10 skip=4086`" \
   = 'SWAP-SPACE' &rsqb;; then
  echo 'Restoring DOS/Windows swap info'
  /bin/zcat /etc/winswap.gz | /bin/dd of=/dev/winswap 2&gt;/dev/null
else
  echo 'ERROR: /dev/winswap lacks swap signature, skipping restore'
fi
</verb></tscreen>
</sect1>

</sect>
</article>
