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 が便利だ。

アメリカでも夏時間が終った2017年11月06日 12時50分56秒

今回の週末でアメリカの夏時間が終った。日曜日から一時間時計を戻す。日の出の時間が遅くなるが、日の入りの時刻が早くなる。五時には既に真っ暗になる。

自宅で使っている FreeBSD は Windows とのディアルブートになっていて、Windows が管理するローカル時刻になる。そのため、一度 Windows を起動して、時刻を合わせる。

仕事場は今回、時刻合わせの点検の担当になったので、各々の機械の時間を点検し、問題なく動いているのを確認した。

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 がマウスを取り込んだら、右のコントロールキーでマウスをホスト側に解放できる。

次回

ffmpeg で mkv ファイルを avi ファイルに変換2017年07月19日 12時06分15秒

Windows では mkv ファイルの再生がそのままでは出来ないようなので、avi ファイルに変換。
% ffmpeg -i input.mkv output.avi
このオプションだと、画質が随分と落ちているように見える…

壊れたのは Windows と外付けのハードディスク2017年03月05日 16時29分40秒

Windows を壊して外付けのハードディスクも壊した。今回壊れたのは結局ハードディスク二つの MBR だった。

Windows の方は起動不可能だが、CD から起動した FreeBSD で見るとパーティションは壊れていない。そこで、このディスクの MBR のバックアップは古かったので、パーティション構成が違っていたはず。そのため、MBR を修復する前に、FreeBSD で第三と第四パーティションのデータを複製。

その後、古い MBR のバックアップで、元に戻す。FreeBSD の dd で 512 バイトのみ。

$ dd if=rv515-ada0.mbr of=/dev/ada0 bs=512 count=1
この後、案の定、第三と第四パーティションは見えなくなったが、取り敢えず Windows は起動するようになり、第二パーティションのデータは無事だった。

外付けのディスクは、バックアップはとても古いものしか無かった。こちらは、比較的最近 FreeBSD を起動できる様に再構成したものだった。どうもこちらは、パーティションテーブルも壊したようで、後部のパーティションの復帰は無理そう。古いバックアップの MBR を戻しても、第一パーティションのあったデータは無事見えるようになったが、それ以降のパーティションは無理だった。システムの複製が入っていただけなので、被害は軽微。

前回

壊れた外付け USB ディスクの様子を FreeBSD で見る2017年03月02日 14時09分18秒

取り敢えず、前回破壊した外付け USB ディスクを FreeBSD に繋げると、こうなる。
da2 at umass-sim2 bus 2 scbus5 target 0 lun 0
da2: <I-O DATA HDPS-U > Fixed Direct Access SCSI-2 device
da2: Serial Number 000902A1541C
da2: 40.000MB/s transfers
da2: 305245MB (625142448 512 byte sectors)
da2: quirks=0x2<NO_6_BYTE>
GEOM_PART: integrity check failed (da2, MBR)
GEOM_PART: integrity check failed (ufsid/4cff0efe10087de1, MBR)
GEOM_PART: integrity check failed (diskid/DISK-000902A1541C, MBR)
ディスクの先頭領域が壊れているようだ。
% ls /dev/da2*
/dev/da2
ls でもパーティションは表示されていない。

FreeBSD には、この整合性の点検を無効にする方法がある。MBR 等を破壊してしまったディスクからの復旧に、役に立つ。root ユーザで。

$ sysctl kern.geom.part.check_integrity=0
% ls /dev/da2*
/dev/da2        /dev/da2s1      /dev/da2s2      /dev/da2s3      /dev/da2s4
これで、mount やら ntfs-3g などで、ディスクの中のファイルを見られる様になる。

なお、このディスクを繋いでも、起動画面が出ることも無い。

前回次回

Windows が壊れた要因は良く分からない2017年03月01日 15時39分40秒

Windows が起動しなくなったが、実は再現環境が今でも分からない。Windows 7 が入っているのは、この Samsung の機種一機のみ。Windows Vista や Windows XP、それ以前の Windows が入っていた機種なら、HP や Toshiba などが複数台ずつあったが、間違ったボタンを押してもキーキーキーと不快音がなる程度で、起動しなくなった事は無い。

Windows 7 の問題なのか、Windows 7 から変わった LBA 等の起動機構に寄るものなのか、FreeBSD のブートローダが Windows 7 とは相容れないのか、はたまた Samsung 機種だからかなのかは分からない。

取り敢えず、この機械に、外付けのハードディスクを繋いで FreeBSD を起動するときには一段と気を付けなければいけないようだ。特に F5。

この機種に、FreeBSD のブートローダの入った USB ディスクで、F5 を押すと壊れるのは USB ディスクと内蔵ディスクの二台。MBR や LBA の情報が入っている、先頭 512 バイトが破壊される様だ。

BIOS で CD-ROM から起動するようにしたり、他の外付けの USB ディスクを繋ぎ直して、FreeBSD を起動することは出来る。ディスクも起動情報を直せばデータは無くならない。

次回

Reboot and Select proper Boot device or Insert Boot Media in Selected Boot device and press a key2017年02月28日 14時37分12秒

Samsung RV515 に入っていた Windows 7 の機械を壊してしまった。電源を入れると「Reboot and Select proper Boot device or Insert Boot Media in Selected Boot device and press a key」と出てきて何も起動しない。

実は、この機械は一度同じように壊したことがあった。当時は日記に書く余裕が無かったが、確か 2013 年の冬の事。それ以来この機種では気つけていたのだが。

取り敢えず落胆中ではあるが、今回は再発防止を含めてのメモ。

まずは、再現方法。

  1. FreeBSD の boot ローダの入った USB デバイスを繋ぎ、BIOS で USB を優先する
  2. F1 などの起動パーティションを指定するところで、内蔵ディスクを指す F5 を押す
といたって簡単に破壊できる。

復旧にはデータを失わないように時間をかけるのだが、修復方法はいたって簡単。 MBR のあるディスクの先頭 512 バイトをバックアップから書き戻す。この部分のバックアップをしていなければ、各種 Windows でのもっと複雑な復旧作業が必要になるだろう。

FreeBSD の ndis で Windows のドライバを使う2016年09月03日 12時37分14秒

NDIS 自体はかなり昔から実装されていた機能。Windows のドライバを利用し、コンパイルして作成するので FreeBSD のリリースバージョンに依存する。ドライバを無くさないようにするのが、大切だ。

eMachines eM250-1915 の bwn ドライバが不安定で、ndis を試したら、こちらの方が安定していた。今回 11.0-RELEASE に向けて準備をしようとしたら、ドライバが見付からなくて、手間取った。折角なので、手順も記録。

$ tar xvf Broadcom_BCM43xx_5.100.235.19_win5x.exe
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/SilentInstall_Driver_Only_XP.bat
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/Notes.txt
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcm43xx.cat
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcm43xx64.cat
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwl5.inf
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/setup.iss
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/setup.exe
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwlcoi.dll
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwlcoi64.dll
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwl5.sys
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/bcmwl564.sys
x [wikidrivers.com] Broadcom_BCM43xx_5.100.235.19_win5x/
$ cd \[wikidrivers.com]\ Broadcom_BCM43xx_5.100.235.19_win5x
ドライバを展開して .inf と .sys ファイルを見付ける。
$ ndisgen bcmwl5.inf bcmwl5.sys
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        INF file validation

        This .INF file appears to be Unicode.
        Trying to convert to ASCII...
        Done.

        Press return to continue...



        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        Driver file validation

        This .SYS file appears to be in Windows(r) PE format.

        Press return to continue...
リターンキーを押すと次の画面になる。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        Driver file conversion

        The script will now try to convert the .INF and .SYS files
        using the ndiscvt(1) utility. This utility can handle most
        .INF files; however, occasionally it can fail to parse some files
        due to subtle syntax issues: the .INF syntax is very complex,
        and the Windows(r) parser will sometimes allow files with small
        syntax errors to be processed correctly which ndiscvt(1) will
        not. If the conversion fails, you may have to edit the .INF
        file by hand to remove the offending lines.

        Press enter to try converting the files now: 

        Conversion was successful.

        Press enter to continue... 
更にリターンキーを押す。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        Firmware file conversion

        If your driver uses additional firmware files, please list them
        below. When you're finished, just press enter to continue. (If your
        driver doesn't need any extra firmware files, just press enter
        to move to the next step.)

        > 
他のドライバは要らないので、そのままリターンキー。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================


        List of files converted firmware files:


        Press enter to continue... 
次が最後のステージ。コンパイルが始まるので FreeBSD のソースが必要。
        ==================================================================
        ------------------ Windows(r) driver converter -------------------
        ==================================================================

                        Kernel module generation


        The script will now try to generate the kernel driver module.
        This is the last step. Once this module is generated, you should
        be able to load it just like any other FreeBSD driver module.

        Press enter to compile the stub module and generate the driver
        module now:



        Cleaning up... done.

        The file bcmwl5_sys.ko has been successfully generated.
        You can kldload this module to get started.

        Press return to exit.
コンパイルが終ってカーネルモジュールが作成されている。
$ ls *ko
bcmwl5_sys.ko
$ cp bcmwl5_sys.ko /boot/modules
カーネルを再構築しても、なくならない /boot/modules に移動する。