virtualbox-rawdisk
update 2020-03-05

概要

VirtualBox Guestマシンから仮想ディスクファイル(vmdk)を経由してHostマシンのHDD(またはUSBメモリなど)にアクセスする。(rawdiskアクセスという)
※vmdkファイルは 1KB程度の小さいファイルである。
ここではHostマシンはWindowsとしている。

Hostマシンの Disk 0 をGuestマシンの hdd0.vmdk として割り当て、 Guestマシンで hdd0.vmdk にアクセスすれば Disk 0 にアクセスすることになる。
Hostマシンの Disk 1 をGuestマシンの usb1.vmdk として割り当て、 Guestマシンで usb1.vmdk にアクセスすれば Disk 1 にアクセスすることになる。
rawdisk-gaiyou.jpg
 
仮想ディスクファイル(vmdk)を作る

(1) コマンドプロンプトを「管理者として実行」する。
VBoxManage.exeコマンドのあるフォルダに移って作業する。
cd %programfiles%\Oracle\VirtualBox
 
(2) VBoxManage コマンドでHDD情報(物理ディスク番号)を確認する。
実行するとpartition情報が表示される。
ディスク0 (\\.\PhysicalDrive0)の場合は
VBoxManage internalcommands listpartitions -rawdisk \\.\PhysicalDrive0
ディスク1 は \\.\PhysicalDrive1 のように指定する。

Windowsの場合は物理ディスク番号は次のようにして解る。
「ディスクの管理」で表示されている「Disk 0」「Disk 1」などの番号である。

Powershell(管理者)で下記のコマンドを実行すれば物理ディスク番号が解る。
Get-WmiObject Win32_DiskDrive | Select-Object -Property BytesPerSector, DeviceID, Model, Partitions, Size | Sort-Object DeviceID

コマンドプロンプト「管理者として実行」で物理ディスク番号を調べるには、
wmic diskdrive list brief を実行する。
接続しているデバイスの物理ディスク番号が \\.\PHYSICALDRIVE0のように末尾に番号が付いて表示される。
USBデバイスの場合はデバイス名が「USB DISK USB Device」として表示される。

Linuxの場合は次のようにデバイスを指定する。( fdisk -l コマンドでデバイスを確認できる)
VBoxManage internalcommands listpartitions -rawdisk /dev/sda

(3) rawdiskイメージファイル(vmdk)を作成する。(例: F:\hdd0.vmdk を作成する)

HostマシンのDisk 0 (\\.\PhysicalDrive0)を rawdiskとして vmdkファイル(hdd0.vmdk)に割り当てる。
VBoxManage internalcommands createrawvmdk -filename f:\hdd0.vmdk -rawdisk \\.\PhysicalDrive0
これでf:\hdd0.vmdkファイルが作成されている。

Linuxの場合は次のように指定する。
VBoxManage internalcommands createrawvmdk -filename /VirtualBox/hdd0.vmdk -rawdisk /dev/sda

(4) 以上で 仮想ディスクファイル が作成できた。
作成した vmdkファイルを経由してHostマシンのDisk 0 にアクセスすることになる。

仮想ディスクファイルを使う

(1) VirtualBoxを「管理者として実行」で起動する。

(2) 新規にGuesマシンを作成する際に「ハードディスクの選択」では、すでに作成してある f:\hdd0.vmdkファイルを使うので、
「すでにある仮想ディスクファイルを使用する」を選択し「参照」ボタンで「f:\hdd0.vmdk」を選択する。

(3) 作成した仮想マシンのストレージには hdd0.vmdk が割り当てられている。
この状態でGuestマシンを起動するとhdd0.vmdk(つまり HostマシンのDisk 0)が起動することになる。



USBメモリから起動する

USBメモリを仮想ディスクファイル(例: usb1.vmdk )として作成すればUSBメモリから起動できる。

作業手順は「仮想ディスクファイル(vmdk)を作る」と同じ要領である。
(1)ブート可能なUSBメモリを作成して、USBポートに挿しておく。
※Windowsの「ディスクの管理」でUSBメモリに割り付けられたディスク番号を確認するためである。

(2)Windowsの「ディスクの管理」でUSBメモリに割り付けられたディスク番号を確認する。
ここではディスク番号 1 (disk 1)であるものとする。

(3) コマンドプロンプトを「管理者として実行」する。
VBoxManage.exeコマンドのあるフォルダに移って作業する。
cd %programfiles%\Oracle\VirtualBox

(4) VBoxManage コマンドでHDD情報を確認する。
次のように実行するとpartition情報が表示される。
PhysicalDriveX の「X」はディスク番号である。
ディスク番号はWindowsの「ディスクの管理」(diskmgmt.msc)で確認できる。
今回のUSBスティックはディスク1なので \\.\PhysicalDrive1 のように指定する。
VBoxManage internalcommands listpartitions -rawdisk \\.\PhysicalDrive1

(5) rawdiskイメージファイル(vmdk)を任意のフォルダに作成する。
HostマシンのUSBスティックを (\\.\PhysicalDrive1) rawdiskとして vmdkファイルに割り当てる。
VBoxManage internalcommands createrawvmdk -filename f:\usb1.vmdk -rawdisk \\.\PhysicalDrive1

(6) 以上で 仮想ディスクファイル が作成できた。
作成した vmdkファイルを経由してHostマシンのDisk 1にアクセスすることになる。

(7) VirtualBoxを「管理者として実行」で起動する。(管理者として実行しないと 作成した xxx.vmdk を追加できなくて、エラーになる)
VirtualBoxを新規に名前を付けて作成する
1_name.jpg

「すでにある仮想ディスクファイルを使用する」選択して「フォルダ参照」アイコンをクリックする
2_harddisk.jpg

追加アイコンをクリックする
3_add.jpg

vmdkを選択する
4_select_vmdk.jpg

追加されたvmdkをダブルクリックして割り当てる
5_add_vmdk.jpg

vmdkが設定された
6_harddisk.jpg

仮想PCのストレージに、すでに作成済みの usb1.vmdk が割り当てられた。( xxx.vdi  を割り当てるのではない)
属性の「ホストの I/O キャッシュを使う」を「ON」にする。
7_strage.jpg

(8) 「設定」/「USB」で「USBコントローラーを有効化」をON にして「USB2.0コントローラー」または「USB3.0コントローラー」にチェックを付ける。
    USBデバイスフィルターには何も指定しない。(指定しているとbootエラー発生。FATAL: Could not read from the boot medium! Sysytem Halted. )
    ※理由は、HOST側に存るUSBデバイスからbootするわけなので、GUEST側に起動デバイスを指定してはいけないからである。

(9)VirtualBoxを「管理者として実行」で起動する。(「管理者として実行」しないとエラーになる)
作成した仮想PCを起動するとUSBスティックからブートする。
※VirtualBox/設定/システム の拡張機能の「EFIを有効化」をオンにするとEFIブートで起動する。
※「EFIを有効化」をオフにすればレガシーブート(MBR)で起動する。



Hostマシンのpartitionにアクセスする
※ partitionを指定して仮想ディスクファイル(vmdk)を作成する。

例えば partition1、partition2を使用したい場合は次のようになる。
VBoxManage internalcommands createrawvmdk -filename f:\part-12.vmdk -rawdisk \\.\PhysicalDrive0 -partitions 1,2

※ -partitions パラメータを指定すると part-12.vmdk および part-12-pt.vmdk のように「pt」付きのファイルも自動的に作成される。



HostマシンのMBRにアクセスする
※GuestマシンをHostマシンとは異なるブートローダで起動したい場合に利用できる。

例えばWin10(partition1)、fedora(partition2) をインストールしたWin10ブートマネージャ起動のデュアルブートPCがあるとする。
Guestマシンでfedoraを起動したい場合は、fedora起動時のMBRを反映した仮想ディスクファイル(vmdk)を作成すればいい。

(1) fedora(Grub2)ブートマネージャでPCを起動する状態にして、MBRを fedora.mbr のようにファイル化する。
dd if=/dev/sda of=fedora.mbr bs=512 count=1

(2) fedora.mbr を反映した仮想ディスクファイル(vmdk)を作成する。
※ fedora.mbr ファイルはVBoxManager.exe のあるフォルダに置いておく。
VBoxManage internalcommands createrawvmdk -filename f:\part-12.vmdk -rawdisk \\.\PhysicalDrive0 -partitions 1,2 -mbr fedora.mbr

(3)  作成した仮想ディスクファイルでGuestマシンを起動すれば fedora(Grub2)ブートマネージャが起動する。



VBoxManage.exe のヘルプ表示

VboxManage  または VBoxManage internalcommands だけを入力して実行すればヘルプを表示できる。 
画面に表示できない場合は VboxManage | more コマンドでページ表示して参照する。
more コマンドのヘルプは more /? で参照。



マニュアル


Oracle VM VirtualBox User Manual (ユーザーマニュアル)
http://www.virtualbox.org/manual/UserManual.html

Using a raw host hard disk from a guest (GuestマシンからHostマシンのHDDを使う)
http://www.virtualbox.org/manual/ch09.html#rawdisk

end of list