VirtualBox の vdi(VDI; virtual desktop infrastructure もしくは virtual desktop interface) は単純コピーだめらしい。HDD交換する際に、そのHDDはただのデータファイル置き場だったので、イメージコピーとかでなく、robocopyを使って、旧HDDと新HDDを同期化して使おうとした。すると、Virtualboxで起動しようとした時にエラーとなってしまった。
その時、ググればよかったのだが、軽率にも VirtualboxのGUIからエラーとなったOSを削除して、再度 vdiを読み込んで起動させた。しかし、アクティベーションでエラーとなってしまった。
もう手遅れと思いながら、正しい手順である VBoxManage clonevdiを試してみることにした。
E:ドライブが古いHDD、D:が新しいHDD。
まず、普通にコマンドプロンプトを起動して、以下を実行。
E:\VirtualBOX>cd /d "C:\Program Files\Oracle\VirtualBox"
C:\Program Files\Oracle\VirtualBox>>VBoxManage clonevdi E:\VirtualBOX\copy.vid D:\VirtualBOX
アクセスが拒否されました。
C:\Program Files\Oracle\VirtualBox>
管理者権限で実行しないと無理なので、管理者権限でコマンドプロンプトを起動。
管理者権限
Microsoft Windows [Version 6.3.9600]
(c) 2013 Microsoft Corporation. All rights reserved.
C:\WINDOWS\system32>cd /d "C:\Program Files\Oracle\VirtualBox"
C:\Program Files\Oracle\VirtualBox>
C:\Program Files\Oracle\VirtualBox>VBoxManage clonevdi E:\VirtualBOX\copy.vid D:\VirtualBOX
VBoxManage.exe: error: Cannot register the hard disk 'E:\VirtualBOX\copy.vid' {b46183d5-c723-465a-b112-4bc292d7a1d8} because a hard disk 'D:\VirtualBOX\copy.vid' with UUID {b46183d5-c723-465a-b112-4bc292d7a1d8} already exists
VBoxManage.exe: error: Details: code E_INVALIDARG (0x80070057), component VirtualBox, interface IVirtualBox, callee IUnknown
VBoxManage.exe: error: Context: "OpenMedium(Bstr(pszFilenameOrUuid).raw(), enmDevType, enmAccessMode, fForceNewUuidOnOpen, pMedium.asOutParam())" at line 178 of file VBoxManageDisk.cpp
%USERPROFILE%\.VirtualBox配下にある設定ファイルを削除して、再度実行。
C:\Program Files\Oracle\VirtualBox>VBoxManage clonevdi E:\VirtualBOX\J3206
.vdi D:\VirtualBOX
0%...
Progress state: VBOX_E_FILE_ERROR
VBoxManage.exe: error: Failed to clone hard disk
VBoxManage.exe: error: Could not create the clone medium 'D:\VirtualBOX'.
VBoxManage.exe: error: VDI: cannot create image 'D:\VirtualBOX' (VERR_ACCESS_DENIED)
VBoxManage.exe: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Medium, interface IMedium
VBoxManage.exe: error: Context: "int __cdecl handleCloneHardDisk(struct HandlerArg *)" at line 743 of file VBoxManageDisk.cpp
一瞬、なんで?と思ったら、コピー先がフォルダになっていたからだった。
C:\Program Files\Oracle\VirtualBox>VBoxManage clonevdi E:\VirtualBOX\copy.vid D:\VirtualBOX
0%...
Progress state: VBOX_E_FILE_ERROR
VBoxManage.exe: error: Failed to clone hard disk
VBoxManage.exe: error: Could not create the clone medium 'D:\VirtualBOX'.
VBoxManage.exe: error: VDI: cannot create image 'D:\VirtualBOX' (VERR_ACCESS_DENIED)
VBoxManage.exe: error: Details: code VBOX_E_FILE_ERROR (0x80bb0004), component Medium, interface IMedium
VBoxManage.exe: error: Context: "int __cdecl handleCloneHardDisk(struct HandlerArg *)" at line 743 of file VBoxManageDisk.cpp
C:\Program Files\Oracle\VirtualBox>VBoxManage clonevdi "E:\VirtualBOX\copy.vid" "D:\VirtualBOX\copy.vid"
0%...10%...20%...30%...40%...50%...60%...70%...80%...90%...100%
Clone hard disk created in format 'VDI'. UUID: 47f888d7-8c7f-42f9-9bac-29325bd69
507
C:\Program Files\Oracle\VirtualBox>
ってなことで成功した。とは言え、すでにアークティベーションエラーを起こしてしまったので、再度、認証しなければいけないことは変わらなかったが・・・次回からは BoxManage clonevdiを使ってコピーするように気をつけよう。