彷徨えるフジワラ

年がら年中さまよってます

VirtualBox で光学ドライブの抜き差し

VirtualBox の 3.0.x 系のユーザマニュアルには、VBoxManage 経由で光学ドライブの抜き差しに相当する機能を実現する方法が載ってなかった(探し方が悪かった? > 自分)ので、headless 運用だと ISO イメージのマウントは使い勝手が宜しくなかったのだけれど、3.2.x 系のマニュアルを見たら storageattach コマンドが使えるようになっていた。

ISO イメージをマウントするには、まずはデバイスコントローラを特定する必要がある。

$ VBoxManage showvminfo 仮想マシン | \
  grep 'Storage Controller Name'
Storage Controller Name (0):            IDE Controller
Storage Controller Name (1):            Floppy Controller
$ VBoxManage showvminfo 仮想マシン | \
  grep 'IDE Controller'
IDE Controller (0, 0): VDIファイルパス (UUID: UUID)
IDE Controller (1, 0): Empty
$

"IDE Controller" のポート 1/デバイス 0 が空いていることがわかったので、ここに ISO イメージをマウントするにはこんな感じ。

$ VBoxManage storageattach 仮想マシン \
      --storagectl 'IDE Controller' \
      --port 1 \
      --device 0 \
      --type dvddrive \
      --medium  ISOイメージパス
Sun VirtualBox Command Line Management Interface Version 3.1.8
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

$

この状態でゲスト OS 側の光学ドライブから ISO イメージの内容が見える。

メディア取り出しに相当する操作は:

$ VBoxManage storageattach 仮想マシン \
      --storagectl 'IDE Controller' \
      --port 1 \
      --device 0 \
      --type dvddrive \
      --medium none
Sun VirtualBox Command Line Management Interface Version 3.1.8
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

error: Drives cannot be removed while the VM is running

$

間違い。どうやら、"none" はデバイスの取り外しに相当するっぽいので、ゲスト稼動中は駄目らしい。

光学メディア取り出しに相当するのは "emptydevice" の模様。

$ VBoxManage storageattach 仮想マシン \
      --storagectl 'IDE Controller' \
      --port 1 \
      --device 0 \
      --type dvddrive \
      --medium emptydrive
Sun VirtualBox Command Line Management Interface Version 3.1.8
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

$ 

この段階では、ゲスト側からは光学ドライブの内容を参照できない。よし、期待通りだ。

ちなみに、ISO ファイルを一旦デバイスとして認識させると、emptydrive との差し替えによってゲストから見えなくしても、どうやらそのまま仮想 DVD 一覧に居座り続ける模様。

$ VBoxManage list dvds
Sun VirtualBox Command Line Management Interface Version 3.1.8
(C) 2005-2010 Sun Microsystems, Inc.
All rights reserved.

UUID:       仮想ドライブ-UUID
Path:       ISOイメージパス
Accessible: yes

$

まぁ、実害があるわけでは無いのだけど、登録一覧から除外するには、closemedium コマンドを使用すれば良い。

$ VBoxManage closemedium dvd 仮想ドライブ-UUID

なお、ゲストOSから参照中の場合は以下のような表示になるので、その場合は登録除外は出来ないので注意。

UUID:       仮想ドライブ-UUID
Path:       ISOイメージパス
Accessible: yes
Usage:      仮想マシン (UUID: 仮想マシン-UUID)