VMware Fusion で仮想マシンを複製することによって、解放されていないディスクスペースを取り戻す2018年03月22日 11時30分08秒

最近、MacBook にて、VMware Fusion を使っている。幾つかの仮想マシンがあるが、その一つに FreeBSD を入れて、ZFS 等で遊んでいた。

400GB 程あるはずの、ハードドライブの容量が圧迫されたと言われて VMware が動作を中断して、プロンプト待ちを起こすことが出てきた。Mac 上のファイルを消しても消しても、すぐにディスクの容量が足りないと警告される。

さて、VMware の動作に問題がありそうなので、じっくりと見はじめた。最初に気が付いたのが、VMBoundle ファイルが異常に大きいこと。25 GB の仮想ハードドライブを二つに、50 GB の仮想ハードドライブを一つ作っていて、FreeBSD 上で見ると半分以下しか使われていない。VMBoundle ファイルが、170 GB もあるのだ。スナップショットを取ったり消したり、ディスクを作成したり、削除したりを繰り返したりもした。

今回の容量の異常に関し、全てのスナップショットを消してみた。それでも 170GB も物理ディスクを占有していたのである。ディスクのクリーンナップ等を行っても一向に改善しない。

一つ気が付いたのは既存のディスクの追加を選ぶと、見覚えの無いディクスが沢山出てくるのである。そこで、VMware のファイル管理に問題があると結論に達した。恐らく、電源が落ちてしまったり、MacOS がクラッシュしたときに、VMware のファイル管理に不整合が出来てしまったのだと。

仕方がないので、VMware の「Create Full Clone」を使って、複製し古いコピーを捨てることにした。「Create Full Clone」を実行すると、170 GB のディスク占有量の仮想マシンから、50GB のディスク占有量の仮想マシンが出来た。割り当てている仮想ディスクの総量は 100GB で利用率は半分以下。複製の結果は妥当に見えた。

その後、数回の起動点検と確認を行って、問題なく複製できているのを確信した後に、余分な 170GB のファイルを消して、VMware のディスク圧迫バグから回避することが出来た。

vm-bhyve はカーネルのテストには向かない2018年02月10日 13時16分20秒

最近、bhyve を使って、カーネルの変更のテストをしている。sys/vm を変更しているので、カーネルモジュールは使えない。そうなると、カーネルをリンクし直して、インストールし再起動になる。bhyve を使うと、再起動が簡単になり、nfs を多用出来るので fsck を軽くできるので重宝している。

残念だが vm-bhyve は sys/vm などの低レベルを触る変更には向かないようだ。vm-bhyve は複数の仮想環境を管理するために使われる。そのため、各仮想環境をコンソールを使ってバックグラウンドで起動し、直接接続したい場合には cu デバイスを使って、接続する形を取る。そのため、vm-bhyve は ssh や http 等のリモートを主にした使い方には使い勝手が良い。

起動できなくなるような変更のテストは、そのままターミナルで始動する素の bhyve が良いようだ。なにせ、ブートローダでカーネルを古いカーネルの読み直しを繰り返さないと起動できない事も多い。 vm list で見ても起動してもいないし、vm connect を用いても繋がりもしない。

仮想化により OS が OS でなくなる利点2018年01月15日 13時00分35秒

システムの仮想化が持て囃されてしばらく経つ。ハードウェアの都合で、遅れ馳せながら、byhve によるハイパーバイザ型の仮想化を試して改めて、仮想化の恩恵を感じた。

OS は長らく、一つのハードウェアに一つだけ動かせる物だったが、仮想化によって、複数の OS を一つのシステム上に動かせるようになった。bhyve は 軽量で、複数の仮想環境を動かしても、負荷が少ない。

OS が他のアプリケーションと同じように、好きなだけ起動できる様になった。一つしか動かせなかった OS も他のアプリケーションと同じように複数起動できる様になった。

複数の OS を一つの機械上で動かせる利点は幾つかあるか、bhyve と FreeBSD では特に、カーネルのテストがしやすい。カーネルモジュールのテストは、kldload と kldunload で繰り返すことは以前からできた。しかし、プロセス管理やメモリ管理などのカーネルに組み込まれなければいけないものは、再起動が必須。そして、変更すると、大量のカーネルクラッシュに見舞われるのも日常茶飯事。仮想化を使って、テスト環境のファイルシステムを最小限にしぼり、カーネルクラッシュや大量の再起動に備えやすい。

bhyve に必要なデバイス2018年01月11日 13時38分51秒

GENERIC カーネルでは既に有効になっているが、カーネルを作り直している場合には、virtio や vtnet 等のデバイスが有効になっていないとブートローダが第三ステージに移行できなかったり、ネットワークが使えなくなる。

仮想デバイスに以下の物がある。

device          virtio          # Generic VirtIO bus (required)
device          virtio_pci      # VirtIO PCI Interface
device          vtnet           # VirtIO Ethernet device
device          virtio_blk      # VirtIO Block device
device          virtio_scsi     # VirtIO SCSI device
device          virtio_balloon  # VirtIO Memory Balloon device
device          virtio_random   # VirtIO Entropy device
device          virtio_console  # VirtIO Console device
手元では、virtio と cirtio_pci と virtio_blk を有効にして起動でき、vtnet を追加して、ネットワークが使えるようになった。

FreeBSD で仮想化ホストをする VirtualBox と bhyve の比較2018年01月10日 19時56分39秒

VirtualBox を使ってみて分かったお互いの長所と短所。

現在実験に使っている機械は、ほぼ五年前に購入した Sansung RV515 で、 CPU は AMD E-450 APU with Radeon(tm) HD Graphics (1646.53-MHz K8-class CPU) となっている。メモリは 4GB 程入っている。購入した当時の Windows 7 も入っているが、Windows を使うと、全部の動作が遅く、ゆっくり待ちながらの作業になる機械。FreeBSD では日常で使うのには問題ない。buildworld を行うと clang をコンパイルするのに数時間は要するが、STABLE を追うくらいなら問題ない。

仮想化はハードウェアに依る部分も多いので、使っている機種の様子から始めた。VirtualBox はすぐに使い始められたのが、bhybe はamd64 環境を作るのに手間が掛かった。また、FreeBSD で仮想環境のホストとして Xen も使えるが、こちらの方の CPU は手軽ではないので、試せていない。

bhyve の短所。

  1. 特定の CPU のサポートが必要。
  2. FreeBSD amd64 環境が必要。
まずは、ハードウェアを利用するので、AMD だと、Features2 に POPCNT が、Intel のだと Vt-x に EPT と UG が dmesg に出ている必要がある。ハードウェアが動作可能であれば利用可能だが、i386 では動かないので、amd64 が必要になる。今回は、これの準備に時間が掛かった。

VirtualBox の長所。

  1. pkg や ports で簡単にインストール。
  2. UI 操作が楽。
VirtaulBox は i386 でも amd64 でも動くのと、ports や pkg で一発で入るので、準備には楽だった。起動してからも、GUI なので初めて動かすのは、とても視覚的で分かりやすい。また、ネットワークなども、自動で NAT 等を動かし良きに計らってくれるので、とっつき易い。

bhyve の長所。

  1. amd64 では既に入っている。
  2. 少ないリソースで動く。
ここまでは、後塵に配しているように見えるが、一度使い出すと bhyve の方が使い勝手がいい。特に大きな違いがリソースの消費量。bhyve はアイドル状態だとホスト側の CPU を 2% ぐらいしか使わない。そして、CUI で動くので、X を起動する必要がなく、メモリの浪費も押えられる。

VirtualBox の短所。

  1. 利用リソースが多い。
  2. X が必要。
  3. ファイル形式が独自。
VirtualBox はリソースの消費が激しい。クライアント側が何もしていなくても、ホスト側の CPU が 20% から 25% 持っていかれてしまった。複数起動すると何もしていなくても、ホスト側が高負荷になってしまう。また、X が必要なので、それを起動するだけでもメモリなどのリソースが余計に取られてしまう。ファイル形式が特有なので、bhyve の様に、単純に mdconfig を使えない。

そんなわけで、手慣れた FreeBSD ユーザには bhyve がお勧め。amd64 だったら、そのまま使えてリソースの消費も少ない。GUI が必須なクライアントや、御手軽に試してみたいときには VirtualBox が便利だ。

FreeBSD の bhyve の環境で新規環境を四つのコマンドで最短起動2018年01月09日 11時57分31秒

bhyve は FreeBSD のハイパーバイザ型の仮想環境。FreeBSD のサイトの FreeBSD as a Host with bhyve や他にも新規の試し方などは載っている。

実は、bhyve はディスクイメージそのままを使っているので、配布されている VM イメージがそのまま利用できる。vmm カーネルモジュールを読み込み、fetch でイメージを取って、xz -d で展開し、そのまま起動できる。

bhyve-host$ kldload vmm
bhyve-host# fetch https://download.freebsd.org/ftp/releases/VM-IMAGES/11.1-RELEASE/i386/Latest/FreeBSD-11.1-RELEASE-i386.raw.xz
FreeBSD-11.1-RELEASE-i386.raw.xz              100% of  212 MB 1826 kBps 02m00s
bhyve-host# xz -d FreeBSD-11.1-RELEASE-i386.raw.xz
bhyve-host# sh /usr/share/examples/bhyve/vmrun.sh -d FreeBSD-11.1-RELEASE-i386.raw FreeBSD-11.1
Launching virtual machine "FreeBSD-11.1" ...
Consoles: userboot

FreeBSD/amd64 User boot, Revision 1.1
(Tue Jan 16 20:53:23 EST 2018 hiro@rv515.advok.com)
Loading /boot/defaults/loader.conf
...
/boot/kernel/kernel text=0x127d5b5 data=0xe42bc+0x284034 syms=[0x4+0xe6250+0x4+0x173393]
Booting...
Copyright (c) 1992-2017 The FreeBSD Project.
Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
        The Regents of the University of California. All rights reserved.
FreeBSD is a registered trademark of The FreeBSD Foundation.
FreeBSD 11.1-RELEASE #0 r321309: Fri Jul 21 04:10:47 UTC 2017
    root@releng2.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC i386
FreeBSD clang version 4.0.0 (tags/RELEASE_400/final 297347) (based on LLVM 4.0.0)
VT(vga): text 80x25
CPU: AMD E-450 APU with Radeon(tm) HD Graphics (1646.25-MHz 686-class CPU)
  Origin="AuthenticAMD"  Id=0x500f20  Family=0x14  Model=0x2  Stepping=0
  Features=0x1783fbff
  Features2=0x80802201
  AMD Features=0x26500800
  AMD Features2=0x31fb
  TSC: P-state invariant
Hypervisor: Origin = "bhyve bhyve "
...



Starting background file system checks in 60 seconds.

Sat Jan 20 00:05:52 UTC 2018

FreeBSD/i386 (Amnesiac) (ttyu0)

login: root
Jan 07 16:05:58  login: ROOT LOGIN (root) ON ttyu0
FreeBSD 11.1-RELEASE (GENERIC) #0 r321309: Fri Jul 21 04:10:47 UTC 2017

Welcome to FreeBSD!

...
Edit /etc/motd to change this login announcement.
root@:~ # uname -s -r -m
FreeBSD 11.1-RELEASE i386
起動してログインも完了。

今回は、amd64 機で i386 システムを動かしてみた。ネットワークを使ったりするには tap を設定したりする必要もあるが、今回はそれこそ起動して簡単に使って感触を得るのが目的。

bhyve は特殊なインストラクションを使うので、実機で使えるかを調べる必要がある。AMD だと、Features2 に POPCNT が、Intel のだと Vt-x に EPT と UG が dmesg で確認する必要がある。安くなっていたから四年前に買ったラップトップにもついていたので、ここ数年で購入したコンピュータなら動くと思われる。

VirtualBox が サポートしているファイルフォーマット2017年10月24日 12時59分20秒

VirtualBox がサポートしているファイル形式が分かりづらかったので調べてみた。

  1. VHD - マイクロソフトが制定したフォーマット。FreeBSD で配布されているのがこれ。
  2. VDI - VirtualBox の固有のフォーマット。VirtualBox で新しい仮想マシンを作るとこの形式で作成される。ただ、他では使われていないフォーマットの様で、VirtualBox 以外でファイルを扱わなければいけなくなったら大変そう。
  3. VMDK - VMware のフォーマット。FreeBSD でも配布されている。VMWare と共有するのであれば、便利かも。
  4. HDD - Apple Parallels のフォーマット。仕様が公開されていないので、サポートされているのは バージョン 2 まで。
FreeBSD でホストとして使うのなら、VHD か VMDK が良さそう。

前回次回

VirtualBox が FreeBSD を試す一番簡単な方法2017年10月16日 13時31分36秒

VirtualBox に vhd ファイルを読み込んだ後
FreeBSD 上で、別の FreeBSD を試すのには、VirtualBox が一番良い。FreeBSD が 仮想化のホストとしてサポートされているのが少ないのも一因だが、既に、ディスクイメージとして入手可能なのが一番の利点だ。インストールを飛ばして、いきなり起動できる。

VM-IMAGE にもあるように、VirtuallBox は既にディスクイメージがある。

FreeBSD virtual machine disk images are available in various formats
for several hypervisors.

Disk image formats and the supported hypervisors are:

vhd: VirtualPC, Hyper-V, Xen, VirtualBox
vmdk: VMWare
qcow2: Qemu, KVM
raw: bhyve, other hypervisors that support unformatted raw disk image
Windows で使われる VirtualPC も同じ形式の様だ。同じようにディスクイメージが用意されているのであれば、他の OS でもすぐに試せる。

以下が、FreeBSD を起動するまでの最低のコマンド郡。

% fetch https://download.freebsd.org/ftp/snapshots/VM-IMAGES/11.1-STABLE/amd64/20171012/FreeBSD-11.1-STABLE-amd64-20171012-r324546.vhd.xz
FreeBSD-11.1-STABLE-amd64-20171012-r324546.vhd100% of  271 MB 1384 kBps 03m21s
% xz -d FreeBSD-11.1-STABLE-amd64-20171012-r324546.vhd.xz
ディスクイメージを取ってきて伸張する。

ここからは管理者権限で virtualbox-ose パッケージをインストールし、カーネルモジュールを読み込む。その後、VirtualBox を起動。一般ユーザが継続的に利用するには追加の設定があると便利だがm今回は省略。

% su -l
Password:
$ pkg install virtualbox-ose
$ kldload vboxdrv
$ VirtualBox

各種ネットワークを使うのにはもう少し設定が必要だが、今回はそちらも省略。VirtualBox を起動したので、新しい仮想環境を追加する。

  1. 「Machine」メニューから、「New」 か「New」ボタンで、新規仮想環境の作成。
  2. 「Name」は任意で。
  3. 「Type」は「BSD」。これで、「Version」に各種 BSD の 32bit 版と 64bit 版が出てくる。
  4. 「Version」 で 「FreeBSD 64bit」。
  5. 割り当てるメモリを指定する。
  6. 「Hard disk」で、「Use an existing virtual hard disk file」を選び、上で指定したファイルを設定する。
これで、FreeBSD が起動してくる。なお、ログインは root で、パスワードは無し。

VirtualBox がマウスを取り込んだら、右のコントロールキーでマウスをホスト側に解放できる。

次回