[VirtualBox] 在 VM 中掛載 USB disk

[VirtualBox] 在 VM 中掛載 USB disk

這一篇其實是接續著 在 Mac 上建立 Ubutu 的安裝 USB disk 這篇而來的,

當我製作好 USB 安裝碟後,想先在自己的 VM 上測試一下,

看看這個 USB 碟是不是真的能拿來用,

結果發現,VirtualBox 似乎不能直接選擇 USB disk 來當作開機媒體,

得有一些手動操作才行… 

真希望 VirtualBox 這一部分可以改善呀…

 

參考資料:

VirtualBox Mac OS X 10.9: Boot From an USB Drive

Directly mount disk in virtualbox vm

 

1. 建立一個連接到 USB 的 VMDK 硬碟檔

首先執行 diskutil list,看一下 USB disk 是被掛載在哪一個設備上面,

以下例來說,是在 /dev/disk2:

testuser@localhost ~ $ diskutil list
/dev/disk0
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:      GUID_partition_scheme                        *750.2 GB   disk0
1:                        EFI EFI                     209.7 MB   disk0s1
2:          Apple_CoreStorage                         749.3 GB   disk0s2
3:                 Apple_Boot Recovery HD             650.0 MB   disk0s3
/dev/disk1
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:                  Apple_HFS Macintosh HD           *748.9 GB   disk1
Logical Volume on disk0s2
3253F173-1E9F-4890-B6F5-13E06D335810
Unencrypted
/dev/disk2
#:                       TYPE NAME                    SIZE       IDENTIFIER
0:     FDisk_partition_scheme                        *4.1 GB     disk2
1:                 DOS_FAT_32 MULTIBOOT               4.1 GB     disk2s1

 

接著要把掛載的分割區都卸載~這邊要注意並不是要彈出 (eject) 整個 USB 碟,

而只是卸載 USB 碟上的分割區,

因此要用 diskutil unmountDisk 這個指令,而不是 diskutil unmount 喔~

在卸載的過程中有可能會遇到錯誤,多執行幾次,

確定執行成功,才能往下一步囉~

testuser@localhost ~ $ diskutil unmountDisk /dev/disk2
Unmount of disk2 failed: at least one volume could not be unmounted
testuser@localhost ~ $ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

 

Mac 上的 USB 碟設備通常 owner 是 root,導致接下來的某些動作會因為沒有權限而失敗,

因此要先用 chown 把 USB 碟相關的所有設備,都改成目前使用者~

像我現在的使用者是 testuser,那就用 chown 將 /dev/disk2* 的 owner 都改成自己:

testuser@localhost ~ $ sudo chown testuser /dev/disk2*
testuser@localhost ~ $ ll /dev/disk2*
brw-r-----  1 testuser  operator    1,   5 Sep 19 00:53 /dev/disk2
brw-r-----  1 testuser  operator    1,   6 Sep 19 00:51 /dev/disk2s1

 

這時就可以執行 VirtualBox 的命令,建立一個名叫 usb.vmdk 的 raw VMDK,

讓它連結到 /dev/disk2 這個 USB 設備~

testuser@localhost ~ $ VBoxManage internalcommands createrawvmdk -filename usb.vmdk -rawdisk /dev/disk2
RAW host disk access VMDK file usb.vmdk created successfully.

 

 2. 將這個新建的 raw VMDK 掛載到 VM 中

在 VirtualBox 中,選擇 VM > Settings > Storage,

在 Controller: IDe 的部分,選擇新增一個硬碟:

Screen Shot 2015-09-19 at 12.11.08 AM

 

選擇 Choose existing disk 來加入剛剛建立好的 raw vmdk:

Screen Shot 2015-09-19 at 12.11.13 AM  

 

假設出現了 “Failed to open the disk image file….” 類的訊息,

非常有可能是因為 Mac 又去自動掛載了 USB 碟上的分割區,

但事實上同時是只能有一個人來存取 USB 碟,

因此會出現 VERR_RESOURCE_BUSY 的訊息:

Screen Shot 2015-09-19 at 1.10.35 AM

 

當發生上述錯誤時,把 步驟 1 裡提到的 diskutil unmountDisk 和 chown 等指令都再執行 一下,

再試一次看看,通常是會成功的,掛載好的 usb.vmdk 就會出現了~ 

Screen Shot 2015-09-19 at 1.11.31 AM

 

3. 將 VM 以連接到 USB 碟的硬碟 VMDK 重開機

在步驟 2 中,我們新增了一個 usb.vmdk 的硬碟,

因此在 VM 開機時,在讀取這個硬碟時,事實上就會去讀取 USB 碟~

跟步驟 2 類似,如果又看到了 VERR_RESOURCE_BUSY 的錯誤訊息的話,

極有可能又是 Mac 去掛載了 USB disk 的分割區,

解決方法一樣是去執行 diskutil unmountDisk 和 chown後,再立刻將 VM 重開機囉~

只要搶在 Mac 去掛載分割區之前,讓 VM 開機開起來,就不會有問題了:

Screen Shot 2015-09-19 at 1.11.47 AM  

 

如果開機成功的話,就會用這 USB 碟的內容,開始安裝 Ubuntu 囉~

Screen Shot 2015-09-19 at 1.32.40 AM   

(本頁面已被瀏覽過 1,389 次)

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

這個網站採用 Akismet 服務減少垃圾留言。進一步了解 Akismet 如何處理網站訪客的留言資料