ということで, 何とかディスクを広げることを考える。 ここで真っ先に考えついたのが, すでに linux でやっている
FreeBSD には vnode device という変わった疑似デバイスが存在する。 これはあるファイルシステム上にある 「ファイル」をデバイスとして扱うというものである (CD 焼く時の最終段階でのチェックなどに便利であろう)。
この仕組みを使って, DOS のファイルシステム上に適当なファイルを作り, そのファイルをスワップパーティションとしてマウントする。 また DOS で立ち上げた時は, そのファイルを消すようにする。こうすれば, DOS で立ち上げた時もディスクが狭くなるということはない。
などと書くと非常にすごいことをしているようだが, 例によって徹底入門の 4.4.3 に書かれている方法を真似して, 応用しただけである。 具体的な方法は下に記す。
まずは準備である。 いうまでもないがこの方法を使うには, カーネルが vnode デバイスを扱えないといけない。 ということで, そうでない場合は psuedo-device vn… という項目を 有効にして(アンコメントアウトして)カーネルを再構築する (もっとも私のカーネル PAO98Ne3は偶然にも vnode サポートありで構築されていたので, 再構築しなくて済んだ)。 でもって, vnode device をアクセスするのに使うスペシャルファイルを /dev に MAKEDEV する。
# cd /dev ; sh ./MAKEDEV vn0これで準備は終了である。
つづいて, dos パーティション(スライス)をマウントする。起動時に自動的に マウントされないといけないので, /etc/fstab を書き換え,
/dev/wd0a /dos msdos rw 0 0というふうな行を付け加える(デバイスファイル名, マウントポインタは人によって違うので各自書き変えてください。以下同じ)。 この後マウントポインタを作り, (実験のため)手動でマウントする。
# mkdir /dos ; mount /dosで, スワップファイルを作る。これは本に書いてあるのをほとんど そっくりそのまま実行。
# dd if=/dev/zero of=/dos/tmp/swap bs=1024k count=32で, できたファイルをスワップ領域としてマウント。/etc/vntab に,
/dev/vn0c /dos/tmp/swap swapという記述をして,
# vnconfig -aeとやればおしまい。一応確認する。
# swapinfo
これでとりあえずうまくいくはずである。新しいスワップ領域が使えていることが 確認できたら, 次の起動からは自動的にマウントされるように, 起動スクリプトの /etc/rc.local を書き換える。
if [ -f /etc/vntab ]; then vnconfig -ae fi
しかしこれだけでは dos で立ち上げた時, a:\tmp\swap などという馬鹿でかい (32メガバイト!)ファイルが残ってしまう。linux だと, 終了スクリプト (reboot をかけた時などに init から呼ばれるスクリプト)でこのファイルの 後始末をしていたのだが, FreeBSD にはこの終了スクリプトに相当するものが 見つからない。ということで, dos 側でこれは対処する。 dos の autoexec.bat の先頭に,
del a:\tmp\*という一行を書き加える。
と, 今度は FreeBSD で立ち上げた時 /dos/tmp/swap というファイルがないといって おこられてしまう。そこで, /etc/rc.local に先ほど書き加えた部分を さらに書き換える。
if [ -f /etc/vntab ]; then if [ ! -f /dos/tmp/swap ]; then echo 'making swap file...' dd if=/dev/zero of=/dos/tmp/swap bs=1024k count=32 fi vnconfig -ae fiなお, このファイルの作成にはかなり時間がかかってちょっと不安になるので, コンソールにメッセージを出すようにしている。
と, ここまでできたら再起動して, dos でも FreeBSD でもうまくいっていることを確認する。 これで, 今まで使っていた swap パーティションはお払い箱なので, ディスクラベルエディタを使って swap を ufs に書き換える。 これで新たに 16 M の領域が手にはいったことになる。 将来, サーバとして使うことを考え, このパーティションは /var にマウントすることにする。
まず /etc/fstab に
/dev/wd0b2 /var ufs rw 1 1という記述を書き足し, 念のためシングルユーザーモードにして
# mv /var /var.bak # mkdir /var # mount /var # cp -p /var.bak/* /varとすればおしまいである。再起動して, 問題ないようであれば
# rm -rf /var.bakする。これでかなりディスク容量が増えたうえ, スワップ領域も広がった。 いやぁめでたい。めでたい。
NAT パッチを当てる
X まで動いてしまった