[VirtualBox] clonemedium 時遇到 hard disk already exists 的錯誤
今天想照之前的做法,將 VM 的 VMDK 轉成 VDI 後,調大硬碟的空間,
不過 VBoxManage clonemedium 的指令卻意外的出錯了,
說無法註冊 disk1.vmdk:
testuser@localhost ~/VirtualBox VMs/win32 build $ VBoxManage clonemedium disk disk1.vmdk disk1.vdi --format VDI VBoxManage: error: Cannot register the hard disk '/Users/testuser/VirtualBox VMs/win32 build/disk1.vmdk' {60e62059-416a-4a58-a7c4-16a21e746112} because a hard disk '/Users/testuser/VirtualBox VMs/win32 build/-disk1.vmdk' with UUID {60e62059-416a-4a58-a7c4-16a21e746112} already exists VBoxManage: error: Details: code NS_ERROR_INVALID_ARG (0x80070057), component VirtualBoxWrap, interface IVirtualBox, callee nsISupports VBoxManage: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 178 of file VBoxManageDisk.cpp
有一點奇怪,這個 disk1.vmdk 本來就是 win32 build 這台 VM 的硬碟檔,
為什麼 clonemedium 還要去註冊 (register) 這個 vmdk 呢?
上面的大哉問就留給 VirtualBox 的工程師去想…
要解決這個問題,是不是只要先讓這個 vmdk 脫離 VirtualBox 的掌控,就不會出現這個錯誤呢?
抱持著這個想法來試試看~
先到 VirtualBox > File > Virtual Media Manager,
找到想要被複製的 .vmdk (本例中是 disk1.vmdk),按下 Remove 按鈕:
VirtualBox 會詢問你是否確定要移除,按下 Remove 確認:
VirtualBox 會再次確認是否要連檔案也移除,還是只是從 VirtualBox 的登錄中移除~
這邊我們可以選 Keep 保留檔案,但將 disk1.vmdk 從 VirtualBox 的登錄中移除:
做完這個動作,disk1.vmdk 就脫離 VirtualBox 的掌控了,
因此 VirtualBox 還會問你是否要將這個 vmdk 從 VM 中也移除掉…
是可以移除掉的,因為之後我們會建出新的硬碟檔~
再重新執行一次 clonemedium,這一次就順利成功了,
(clonemedium 完之後,原始的 vmdk 和轉出來的 vdi 看來都會被註冊到 VirtualBox 上)
只要再將轉出來的 disk1.vdi 加到 VM 裡成為一顆新的硬碟就行了:
testuser@localhost ~/VirtualBox VMs/win32 build $ VBoxManage clonemedium disk disk1.vmdk disk1.vdi --format VDI 0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100% Clone medium created in format 'VDI'. UUID: 7f6a9ffc-f355-4812-a32a-a2d5a95bb4ce
比較奇怪的是,之前我並沒有遇過這種 .vmdk 問題…
而在 disk1.vmdk 和 disk1.vdi 都被註冊回 VirtualBox 之後,
我又試著執行一次 clonemedium disk1.vmdk disk2.vdi,卻也沒辦法重現問題…
猜想這應該也是 VirtualBox 的一個 bug 吧~