NetBSD/pc98(based on NetBSD 1.2) and later vpd疑似デバイス使用ガイド 最終更新 1998年 3月 19日 このドキュメントでは、NetBSD/pc98で新設された、vpd疑似デバイス の概要と使用方法について解説しています。パーティーション不足を 感じる場合は、是非参考にして下さい。 1. vpd 疑似デバイスとは? 従来、DOS/Windows領域とNetBSD/pc98の領域を共存させる場合には、 通常以下のように扱っていました。 (とあるマシンでの構成) [wd0]---+---[wd0a] /(root) パーティション | +---[wd0b] swap | +---[wd0c] BSD領域全体 | +---[wd0d] ディスク全体 | +---[wd0e] /usr パーティション等 | --+ +---[wd0f] DOS領域その1 | | | BSD 領域として割り当て +---[wd0g] DOS領域その2 +-- られていないデバイスに | | 順に設定される。(注1) +---[wd0h] DOS領域その3 | --+ (注1) これらのDOS領域はdisklabelに書かれているパーティションに 空きがある場合には自動的にシリンダの先頭より順に割り当てられる。 disklabelコマンドを使用すれば、その仮想的に割り当てられた内容を 見る事が可能。実際に書かれているdisklabelを見る場合は"-r"を指定 すると、DOS領域は(通常は)disklabelには書かれていない事が確認で きる。 ところが、この方式だとBSDパーティションを細かく分けるとDOS領域とし て割り当てられるデバイスがなくなってしまいます。 (とあるマシンでの構成) [wd0]---+---[wd0a] /(root) パーティション | +---[wd0b] swap | +---[wd0c] BSD領域全体 | +---[wd0d] ディスク全体 | +---[wd0e] /usr パーティション | +---[wd0f] /var パーティション | +---[wd0g] /home パーティション | +---[wd0h] DOS領域その1 この場合、従来はmountできていた DOS領域その2/DOS領域その3がmount できなくなってしまいます。明示的にdisklabelにwd0hに割り当てるべき DOS領域のシリンダ位置を指定すれば、その2/その3の領域をmountする 事も可能ですが、mount対象の領域を変更する前にはdisklabelを書き直す 必要があります。また、同時に複数の領域をmountする事も不可能です。 FreeBSDの場合はスライスの概念が導入された為、上記のような場合でも 以下のようにして扱う事ができます。 (とあるマシンでの構成) [wd0]---+---+---[wd0s1a] /(root) パーティション (=wd0a) | | | +---[wd0s1b] swap | | | +---[wd0s1c] BSD領域全体 | | | +---[wd0s1d] 歴史的経緯の関係で使用されない | | | +---[wd0s1e] /usr パーティション | | | +---[wd0s1f] /var パーティション | | | +---[wd0s1g] /home パーティション | +---[wd0s2] DOS領域その1 | +---[wd0s3] DOS領域その2 | +---[wd0s4] DOS領域その3 NetBSDの場合、スライスの概念は導入されていません。今後採用されるか どうかも未定です。しかしながら最近のハードディスクの大容量化に伴い、 パーティション不足の状態になることが多くなっています。 そこでNetBSD/pc98では次のような拡張を行って、この問題に対応しました。 (とあるマシンでの構成) [wd0]---+---+---[wd0a] /(root) パーティション (=wd0a) | | | +---[wd0b] swap | | | +---[wd0c] BSD領域全体 | | | +---[wd0d] ディスク全体 (=wd0) | | | +---[wd0e] /usr パーティション | | | +---[wd0f] /var パーティション | | | +---[wd0g] /home パーティション | | | +---[wd0h] DOS領域その1 (←従来通り、fakeラベルも現れる) : : wd0のDOSパーティションを仮想的なデバイスvpd0に割り当てる事が可能。 : この割り当てを行うと下の様に割り当てられ、vpd0a等を指定してmount : する事も可能となる。 : +---+---[vpd0a] DOS領域その1 | +---[vpd0b] DOS領域その2 | +---[vpd0c] BSD領域全体 READ ONLY | +---[vpd0d] ディスク全体 (=wd0) READ ONLY | +---[vpd0e] DOS領域その3 | +---[vpd0f] DOS領域その4 またBSDパーティションが全く存在しない場合でも、vpdデバイスの使用は可能で、 その場合は次のようになります。 (とあるマシンでの構成) [wd0]---+---+---[wd0a] DOS領域その1 | | | +---[wd0b] DOS領域その2 | | | +---[wd0c] BSD領域全体 | | | +---[wd0d] ディスク全体 (=wd0) | | | +---[wd0e] DOS領域その3 | | | +---[wd0f] DOS領域その4 : : BSDパーティションが存在しない場合、wd0にもfake labelとしてデバイスが : 割り当てられる。この場合、disklabel -r wd0 では見る事ができない。 : +---+---[vpd0a] DOS領域その1 | +---[vpd0b] DOS領域その2 | +---[vpd0c] BSD領域全体 READ ONLY | +---[vpd0d] ディスク全体 (=wd0) READ ONLY | +---[vpd0e] DOS領域その3 | +---[vpd0f] DOS領域その4 この機能を実現する為には、以下の準備が必要です。 1.) NetBSD/pc98(based on NetBSD 1.2)をインストールしている 方は、patch-level 080 以上まで上げる(出来れば最新まで 上げた方がいいでしょう)。NetBSD/pc98(based on NetBSD 1.3.1) をインストールしている場合は、既に対応しています。 2.) kernelをmakeする際に、次のような記述を行ってカーネルを 作り直す。 pseudo-device vpd 4 ↑これは使用するvpdの最大数 3.) vpdconfigをmake/installする。union マウント後、/usr/src で、make includes;make depend;make;make installでOK。 4.) /dev/vpd[0-3][a-h]を作る。1.でパッチを当てると、 /usr/src/etc/etc.i386/MAKEDEV が更新されるので、これを /dev/MAKEDEV とする。 cd /dev; ./MAKEDEV vpd0 vpd1 vpd2 vpd3 と実行すると、上記デバイスファイルが作られる。 5.) 新しいカーネルで起動する。 6.) rootで以下のように実行する。 vpdconfig vpd0 wd0 | | | +-- 実デバイス +--- 仮想デバイス 7.) 後は普通のデバイスと同様に、以下のような作業が出来ます。 mount_msdos /dev/vpd0a /msdos/a NetBSD/pc98 core team 連絡先 E-Mail:netbsd-98@njk.co.jp