2006年1月30日月曜日

(VMware) FreeBSDにディスクを増設

VMware PlayerでFreeBSDをインストールした話のつづき。



今回、ports用に、ディスクを増設してみました。



なぜ、そんなことをするかというと・・・



portsは、やたらとディスク容量を食うんです。



  1. たとえば、うちのFreeBSDな自宅サーバで、/usr/portsの容量をみると・・・456MB使ってます。てゆーか、今調べてみて、自分でびっくりしました。


  2. portsで使うソースファイル類が、/usr/ports/distfilesにおかれていますが、調べてみたら・・・1.7G使っていました。ハァ・・・


  3. これ以外に、portsをコンパイルするとき、コンパイル作業用にディスク容量を食います。xorgとかは、たくさん使います。openofficeに至っては、普通の人はコンパイルしてはいけない、相当なもの好きだけかも


  4. portsnapを使うと、/usr/portsへ展開される元ファイルが、/var/db/portsnap以下に置かれています。調べてみたところ、55MB使っていました。


環境により程度の差はあるでしょうが、少なくとも500MBほどの領域が、ports関係に費やされています。こういうディスクの消費量ってのは、FreeBSDでバイナリpackageを使っていたり、Fedoraとかdebianとか使っている場合には、もともと、消費されるはずのないディスク容量です。



というわけで、portsに関するmy結論。



  • ディスク容量は気にしない、メモリたくさんのってる、CPUパワーもそこそこある、


  • もしくは、ぼけーっと長時間待てるだけの忍耐力がある、


  • すべてのソフトウェアは、俺用にカスタマイズしてコンパイルしないと、気がすまない


  • ソフトウェアの使い方を調べるために、マニュアルを読んだり、googleで情報を探すよりは、ソースコードを読んだほうがてっとりばやい


  • そういう人たちだけ、FreeBSDをインストールして、そしてportsを使ってください


ということではないかと(半分まじめな話)。



あと、VMwareでの仮想ディスクイメージのサイズも、個人的に気にしています。仮想ディスクファイルを、USBメモリにコピーしたり、WebDAVの共有フォルダにコピーして、、あちこちに持っていって使えたら便利かも?と考えているのです(実際にはやってませんけど)。そういう場合、ports関連のファイルまで持ち歩く必要はないので、通常OSを動かすのに必要なファイルだけを集めたファイルシステムと、portsのようにたまにしか使わないファイルをいれておくファイルシステムと、ディスクを分けておくといいんじゃないかな?



ちなみに、LinuxをインストールしてVMware toolsが入っていると、shrinkという操作を行うと、仮想ディスクイメージファイルの中、使われていない領域(ゲストOSでファイルを削除した場合などにできるんだと思う)をけずって、*.vmdkファイルのサイズを小さくできます。



■VMwareなFreeBSDに、仮想ディスクを増設する方法



手順は、



  1. 仮想ディスクイメージファイルの作成


  2. vmxファイルの書き換え


  3. FreeBSDで、ディスクの初期化&設定


というような流れになります。



■仮想ディスクイメージファイルの作成



いつもと同じように、QEMUの、qemu-imgコマンドで作成します。



たとえば、容量8GBの仮想ディスクを、disk-1.vmdkというファイル名で作成する場合。



qemu-img create -f vmdk disk-1.vmdk 8G



詳しくは、以下などを参照。





■vmxファイルの編集



ディスクを増やすには、「ideX:X」というのを書き足していきます。



ide0:0が、IDEのprimary master、ide0:1がprimary slave、ide1:0がsecondary master、ide1:1がsecondary slaveということのようです。



たとえば、以下は、HDDが3台、CDドライブが1台の設定です。

ide0:0.present = "TRUE"
ide0:0.fileName = "FreeBSD-Disk.vmdk"



ide0:1.autodetect = "FALSE"
ide0:1.present = "TRUE"
ide0:1.fileName = "disk-1.vmdk"



ide1:0.autodetect = "FALSE"
ide1:0.present = "TRUE"
ide1:0.deviceType = "atapi-cdrom"
ide1:0.fileName = "Q:"
ide1:0.startConnected = "TRUE"



ide1:1.autodetect = "FALSE"
ide1:1.present = "TRUE"
ide1:1.fileName = "disk-2.vmdk"

VMwareのBIOSメニューでは、こんな風に表示されます。



Freebsddisk09



ゲストOSのFreeBSDでは、dmesgでは、こんな風に表示されます。



freebsd# dmesg | grep '^ad.*VMware'
ad0: 4096MB <VMware Virtual IDE Hard Drive/00000001> [8322/16/63] at ata0-master
UDMA33
ad1: 8192MB <VMware Virtual IDE Hard Drive/00000001> [17753/15/63] at ata0-slave
UDMA33
ad3: 8192MB <VMware Virtual IDE Hard Drive/00000001> [17753/15/63] at ata1-slave
UDMA33



atacontrol listコマンドでも見ることができます。



freebsd# atacontrol list
ATA channel 0:
    Master:  ad0 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad1 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4
ATA channel 1:
    Master: acd0 <VMware Virtual IDE CDROM Drive/00000001> ATA/ATAPI revision 4
    Slave:   ad3 <VMware Virtual IDE Hard Drive/00000001> ATA/ATAPI revision 4





■FreeBSDで、ディスクの初期化&設定



ディスクの初期化方法は、VMwareに限った方法ではなくて、本物のFreeBSDマシンに本物のディスクを増設する場合も、同じです。



要するに、fdiskでスライスを作成し、disklabelでパーティションを作成すればOKなんですが・・・簡単な方法は、sysinstallコマンドを使う方法です。sysinstallは、FreeBSDをインストールするときに使う、あのツールです。



rootでログインして、sysintallを実行します。大昔のFreeBSDでは、sysinstallは、/stand/sysintallにありましたが、今では、/usr/sbin/sysinstallになっています。



sysinstall Main Menuで、Configureを選択します。



Freebsddisk11



Fdiskを選択します。



Freebsddisk12



初期化するディスクを選択します。間違えて、今使っているディスクを選ばないように(もしかすると、間違えて使用中のディスクを選んでしまっても、書き込み時に失敗するような気がしますが、保障はしません)。



Freebsddisk13



Cキーを押して、Create Sliceします。



Freebsddisk14



そのままOKを選び、ディスクの全容量をFreeBSDに割り当てます。



Freebsddisk15



165のままでOKです。



Freebsddisk16



こんなかんじになります。



Freebsddisk17





Qキーを押します。ここでWキーを押すと、書き込むんじゃねー、と警告メッセージが表示されます。LabelのところでWキーを押しなさい、とのことです。そうだったのか・・・知らなかった。



Freebsddisk18



boot managerはいらないので、standard MBRにしときます。



Freebsddisk19



「Select Drive(s)」に戻ってきたら、Cancelを選びます。





「FreeBSD Configuration Menu」で、今度はLabelを選びます。



Freebsddisk20



Cキーを押して、Create



パーティションの容量を指定



Freebsddisk21



partition typeには、当然FSを選びます。



Freebsddisk22





マウント先を選びます。たとえば/disk2



Freebsddisk23



こんなかんじになります。



Freebsddisk24



Wキーを押して、書き込みます。



警告メッセージがでます。Yesを選びます。



Freebsddisk25



これで、ディスクが初期化されて、すでにマウントまでされています。



CancelとかExitを選んで、sysintallを終了し、dfで見てみると、こんなかんじになります。



freebsd# df /disk2
Filesystem  1K-blocks Used   Avail Capacity  Mounted on
/dev/ad3s1d   8121778    4 7472032     0%    /disk2



● 自動的にマウントされるようにする



このままでは、FreeBSDを再起動すると/disk2はマウントされません。/etc/fstabに書き足して、/disk2が自動的にマウントされるようにします。



ちょっとマニアックな?方法。mount -pで、/etc/fstabの形式で表示されるので、こういうふうにすると・・・



freebsd# mount -p | grep /disk2 >> /etc/fstab



/etc/fstabを見てみると、/disk2の行が追加されました。



freebsd# cat /etc/fstab
# Device                Mountpoint      FStype  Options         Dump    Pass#
/dev/ad0s1b             none            swap    sw              0       0
/dev/ad0s1a             /               ufs     rw              1       1
/dev/acd0               /cdrom          cd9660  ro,noauto       0       0
/dev/ad3s1d     /disk2  ufs rw  2 2



以上で、ディスクの増設作業はおしまい。



あと、必要なら、/usr/portsとか/var/db/portsnapを、増設したディスクへ移動し、シンボリックリンクを張っておけばよいでしょう。





たとえば、/var/db/portsnap/を、/disk2/以下へ移動させるには、こんなかんじでできます。



freebsd# cd /var/db/
freebsd# tar cf - portsnap | tar xf - -C /disk2/
freebsd# rm -rf portsnap
freebsd# ln -s /disk2/portsnap .
freebsd# ls -l portsnap
lrwxr-xr-x  1 root  wheel  15 Jan 29 23:21 portsnap -> /disk2/portsnap



/usr/portsをtarで移動させるのは、ファイル数も多く大仕事なので、いっそのこと、すべて削除して、portsnap extractしてしまったほうがてっとりばやいかもしれません。





1 件のコメント:

  1. きょう、コンパイルがコンパイルっぽい話した。
    もしくはここでコンパイルの初期に失敗しなかった?

    返信削除