63
53
Using Virtual Box, how can I install an OS to a secondary, physical disk, and boot it in both (at separate times) Virtual Box, and as a typical secondary OS install?
63
53
Using Virtual Box, how can I install an OS to a secondary, physical disk, and boot it in both (at separate times) Virtual Box, and as a typical secondary OS install?
95
I made a smug comment ("Straight forward") when this question was originally posted and found myself at this page some months later looking for the same answer
Today, I managed to boot from physical drives. This achievement required;
20 min trying different options in VirtualBox
Dear reader, your attention is directed at the fact that it is equally straight forward to kill your data when the disc is accessed in this manner. The procedure on how to accomplish this is left as an exercise...
To create an image that represents an entire physical hard disk (which will not contain any actual data, as this will all be stored on the physical disk), on a Linux host, use the command
VBoxManage internalcommands createrawvmdk \
-filename /path/to/file.vmdk \
-rawdisk /dev/sda
You must have read access to the physical disk device file /dev/sda
. To accomplish this you can either change the owner and access rights of the device file or run VBoxManage internalcommands createrawvmdk
… as root (put sudo
before the command).
On a Windows host, instead of the above device specification, use e.g. \\.\PhysicalDrive0. On a Mac OS X host, use e.g. /dev/disk1 (and unmount all partitions on disk1).
(all on one line)
C:\VirtualBoxDrives>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe"
internalcommands createrawvmdk
-filename C:\VirtualBoxDrives\raw-0.vmdk
-rawdisk \\.\PHYSICALDRIVE0
(output)
RAW host disk access VMDK file C:\VirtualBoxDrives\raw-0.vmdk created successf..
VM -> Settings -> Storage -> add ide / sata -> Choose existing disk -> browse
File -> Virtual Media Manager -> e.g raw-0.vmdk -> [modify] -> (o) Writethrough
VM -> Settings -> System -> Boot order
[./] Hard Disk
[./] CD/DVD
[ ] Floppy
[ ] Network
VM -> Settings -> Storage -> Controller: SATA -> e.g. raw-5.vmdk -> Hard Disk: Sata Port 0
Chapter 9. Advanced topics
Chapter 5. Virtual storage
Enumerating physical drives in Windows:
C:\Users\win7>wmic diskdrive list brief
Caption DeviceID Model Partitions Size
Samsung SSD 840 EVO 250GB ATA Device \\.\PHYSICALDRIVE3 Samsung SSD 840 EVO 250GB ATA Device 6 250057228288
ST1000DM003-1CH162 ATA Device \\.\PHYSICALDRIVE1 ST1000DM003-1CH162 ATA Device 5 1000202273280
ST1000DM003-1CH162 ATA Device \\.\PHYSICALDRIVE2 ST1000DM003-1CH162 ATA Device 5 1000202273280
ST1000DM003-1CH162 ATA Device \\.\PHYSICALDRIVE0 ST1000DM003-1CH162 ATA Device 5 1000202273280
WDC WD1000DHTZ-04N21V0 ATA Device \\.\PHYSICALDRIVE5 WDC WD1000DHTZ-04N21V0 ATA Device 6 1000202273280
WDC WD1000DHTZ-04N21V0 ATA Device \\.\PHYSICALDRIVE4 WDC WD1000DHTZ-04N21V0 ATA Device 5 1000202273280
ST1000DM 003-1CH162 SCSI Disk Device \\.\PHYSICALDRIVE6 ST1000DM 003-1CH162 SCSI Disk Device 5 1000202273280
You can also get the drive numbers with PowerShell:
PS C:\ Get-Disk
7Thanks very much for the clear step by step instructions. One problem I have had however is that the virtual .vmdk file can be owned by me as a user but when I start VirtualBox and it tries to access it an error is generated. This appears to be because the physical /dev/sda is owned by root. I tried changing ownership but no joy - still same error. Starting VirtualBox as root does work (though I'm always cautious about running any application as root, and one such as this with the potential for so much to go wrong scares me silly). – None – 2014-06-28T17:44:25.147
1Most distros have a special group such as "disk" or "block". Bock devices in /dev/sd? should be writable by users belonging to one of those groups. Check the docs for your distro. – Ярослав Рахматуллин – 2014-06-28T20:44:47.700
Here's a link to similar instructions: http://www.sysprobs.com/access-physical-disk-virtualbox-desktop-virtualization-software
– Meetai.com – 2014-06-29T09:54:39.3972Anybody got this working on Windows 10? I'm getting this error: The I/O cache encountered an error while updating data in medium "ahci-0-0" (rc=VERR_ACCESS_DENIED).
, even when running VirtualBox as admin. – szx – 2017-02-04T15:37:14.003
2
@szx I managed to get around the VERR_ACCESS_DENIED problem following these steps
– Epigene – 2017-02-11T19:23:11.147On a Windows host, I additionally had to set the disk to offline
via diskpart (offline disk
) – ens – 2018-01-03T18:11:24.940
@Epigene it could be that you missed the writethrough
part – Display Name – 2018-06-14T14:24:30.043
2How would one accidentally kill their data via raw disk access? I figure knowing what not to do would help avoid problems. The instructions look so straightforward... – Wowfunhappy – 2018-08-24T14:17:32.133
I got this working with linux(guest) and windows host but unfortunately a windows host and W10 guest throws a boot error. – William – 2018-09-18T20:33:11.077
Instead of running Virtualbox as root to access the block device you can create a udev rule: https://wiki.archlinux.org/index.php/VirtualBox/Tips_and_tricks#Run_a_Windows_partition_in_VirtualBox
– noraj – 2019-03-07T10:14:14.167And what about other formats except VMDK? https://serverfault.com/questions/991179/other-virtual-drive-formats-for-linking-to-physical-disk-device-except-vmdk
– user1742529 – 2019-11-23T06:51:25.217For users getting this error: The I/O cache encountered an error while updating data in medium "ahci-0-0" (rc=VERR_ACCESS_DENIED)
, typically when using a partition of in-use disk, it is required to enable "Host I/O Cache" on storage controller: https://www.virtualbox.org/manual/ch05.html#iocaching
Thanks for the crystal clear instructions. One suggestion would be that you should NOT use /dev/sdx
in step-1, you should use /dev/disk/by-id/...
instead (your disks serial number or wwn-
here, check by ls -l /dev/disk/by-id | grep "/sd.$" | awk '{print $11" -> "$9}' | sort
). This way your .vmdk
files will be consistent between reboots while you keep your disks swapping around. – ceremcem – 2020-01-01T07:21:35.880
This is a brilliant guide! I followed it to boot a drive on my PC and later the Mac I use daily! Please could you update your guide to include the disabling of SIP on MacOS, changing the owner of the unmounted drive chown
and unmounting the external drive? – Daniel – 2020-01-24T08:55:04.860
7
The VirtualBox documentation refers to accessing a raw hard disk:
http://www.virtualbox.org/manual/ch09.html#rawdisk
To create an image that represents an entire physical hard disk (which will not contain any actual data, as this will all be stored on the physical disk), on a Linux host, use the command
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda
This creates the image /path/to/file.vmdk (must be absolute), and all data will be read and written from /dev/sda.
To create a special image for raw partition support (which will contain a small >amount of data, as already mentioned), on a Linux host, use the command
VBoxManage internalcommands createrawvmdk -filename /path/to/file.vmdk -rawdisk /dev/sda -partitions 1,5
VirtualBox uses the same partition numbering as your Linux host. As a result, the numbers given in the above example would refer to the first primary partition and the first logical drive in the extended partition, respectively.
See the documentation for caveats and Windows-specific instructions.
8Link only answers are less than optimal and are definitely not deserving of acceptance when a better answer is available. *wink wink* – Ярослав Рахматуллин – 2014-05-20T20:58:57.613
1
I found that to add the raw vmdk file to a vbox guest (Running ubuntu as host) one needs to change the permissions of the /dev/sdx file to 777 before building the vmdk file.
0
MacOS 10.14:
Create a virtual disk file corresponding to the real disk:
# First, find the device you want to use inside Virtual Box:
diskutil list
# Create the virtual disk
sudo VBoxManage internalcommands createrawvmdk \
-filename ~/realdisk.vmdk \
-rawdisk /dev/disk2
Launch VirtualBox as a super user:
sudo VirtualBox
Add ~/realdisk.vmdk
in Storage --> Controller: Sata
.
0
I was unable to get this working in Windows 10 for the longest time; I kept getting a VERR_ACCESS_DENIED
error when attempting to attach the VMDK.
However, I was (finally) able to get this working with a few tricks:
Open PowerShell as an administrator (I'm not sure why, but I couldn't get some of the commands to work in an administrator command prompt)
Run the following command to create the VMDK:
VBoxManage.exe internalcommands createrawvmdk \
-filename "path\to\physical\disk\file.vmdk" \
-rawdisk \\.\PhysicalDrive[n]
...where path\to\physical\disk\file.vmdk
is the file that will be created to represent the disk and [n]
is the disk number (use Disk Management to obtain this number)
Run the following command to attach the VMDK:
VBoxManage.exe storageattach [VM NAME] \
--storagectl [CONTROLLER] \
--device 0 \
--port 0 \
--type hdd \
--medium "path\to\physical\disk\file.vmdk"
...where [CONTROLLER]
is the name of the disk controller you are attaching to - "IDE" in my case
Run the following command to start the VM:
VBoxManage.exe startvm [VM NAME]
0
I was attempting to boot a Linux VM (specifically Ubuntu 19.10) on macOS where Ubuntu is installed on a physical ext4 formatted partition. Many of the answers I found, including that from @ЯрославРахматуллин got me most of the way there, but I kept getting the following error message:
FATAL: No bootable medium found! System halted.
One answer referred to booting into a LiveCD and then altering the GRUB configuration to address this. However, I don't even have GRUB installed on my Mac. Eventually, I found the key for my situation was to ensure the VM had access to the EFI partition on my physical disk, and to enable EFI support in the VM settings.
Below is the output of diskutil list
from my host Mac machine:
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *251.0 GB disk0
1: EFI NO NAME 536.9 MB disk0s1
2: Apple_HFS Macintosh HD 161.1 GB disk0s2
3: Microsoft Basic Data Development 9.1 GB disk0s3
4: Apple_HFS Recovery HD 650.0 MB disk0s4
5: Linux Filesystem 79.2 GB disk0s5
From this, I generated the VMDK file as follows, giving the guest VM read-only access to the EFI partition and full write access to the NTFS (3) and Ext4 (5) partitions.
sudo VBoxManage internalcommands createrawvmdk -filename disk0.vmdk -rawdisk -partitions 1r,3,5
Now I can dual-boot MacOS or Ubuntu, and when already in MacOS, I can boot Ubuntu as a VM if needed. Happy days!
Related: How to use a real partition with Windows 7 installed, in Virtual Box?
– kenorb – 2018-12-10T22:59:13.617