有馬総一郎のブログ

(彼氏の事情)

2014年11月09日 13:10:00 JST - 2 minute read - VirtualBox

vdiファイルをコピーするときは、BoxManage clonevdiを使おう

VirtualBoxvdi(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を使ってコピーするように気をつけよう。