[Error] VirtualBox  Cannot register the hard disk… Syntax error: Invalid parameter etc..

# Error

```
Runtime error opening 'C:\Users\your_name\VirtualBox VMs\Metasploitable2\Metasploitable2.vbox' for reading: -103 (Path not found.).
F:\tinderbox\win-6.1\src\VBox\Main\src-server\MachineImpl.cpp[754] (long __cdecl Machine::i_registeredInit(void)).
終了コード : 
E_FAIL (0x80004005)
コンポーネント: 
MachineWrap
インターフェース: 
IMachine {85632c68-b5bb-4316-a900-5eb28d3413df}
```

```
Could not open the medium 'C:\Users\your_name\Downloads\metasploitable-linux-2.0.0\Metasploitable2-Linux\Metasploitable.vmdk'.
VD: error VERR_PATH_NOT_FOUND opening image file 'C:\Users\your_name\Downloads\metasploitable-linux-2.0.0\Metasploitable2-Linux\Metasploitable.vmdk' (VERR_PATH_NOT_FOUND).


終了コード : 
E_FAIL (0x80004005)
コンポーネント: 
MediumWrap
インターフェース: 
IMedium {ad47ad09-787b-44ab-b343-a082a3f2dfb1}
```

```
仮想マシン"metasploitable2"のセッションを開きませんでした
```

# 原因

など、仮想マシンのファイル(.dvi,.vbox)を移動した際にこのようなエラーが出る

# 解決方法

## 登録済み VM の削除

VM VirtualBox から登録済みの VM を削除してから、仮想メディアマネージャーで移動前のディスクを削除します。

もし、手動で移動した VM が「VM VirutualBox マネージャー」の左側のリストに載っているなら、まずはそれを削除します。「除去のみ」今回はこちらで治った。

## 登録済みメディアの削除

今回のエラーの原因は、「VM VirutualBox マネージャー」からは削除されているのに、メディアの情報が残っていることが原因です。メディアの登録情報は「仮想メディアマネージャー」で確認・操作できます。

メニューで「ファイル」→「仮想メディアマネージャー」をクリックして、「仮想メディアマネージャー」を開きます。

タブ「ハードドライブ」で移動済みのドライブに黄色の警告マークがついていると思います。それを削除してください。

# vboxmanage コマンドの確認

vboxmanage コマンド (Windows の場合は VBoxManage.exe) にパスが通っていない場合、絶対パスで実行できるよう、コマンドの場所を確認しておきます。

Windows の場合、C:\Program Files\Oracle\VirtualBox\VBoxManage.exe あたりにあると思います。

# UUID 変更

下記コマンドを実行します。(管理者　コマンドプロンプト)

```
cd <メディア(.dvi)がある場所>

(Windows、VirtualBox 4.3.30 の場合)
(変更前の UUID 確認)
> "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showhdinfo <メディアファイル.dvi>
(変更実行)
> "C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid <メディアファイル.dvi>

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showhdinfo "C:\Users\yourneme\VirtualBox VMs\Kali-Linux-2021.1-vbox-amd64\kali-linux-2021.1-vbox-amd64-disk001.vdi"

"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid "C:\Users\yourname\VirtualBox VMs\Kali-Linux-2021.1-vbox-amd64\kali-linux-2021.1-vbox-amd64-disk001.vdi"

```

```
C:\WINDOWS\system32>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" showhdinfo "C:\Users\yourname\VirtualBox VMs\Kali-Linux-2021.1-vbox-amd64\kali-linux-2021.1-vbox-amd64-disk001.vdi"                                                    
UUID:           265b5550-36fe-4747-beb5-e3cad1396d86                                                                    
Parent UUID:    base                                                                                                    
State:          inaccessible                                                                                            
Access Error:   UUID {146e7d15-376e-4454-ad03-11b45edf4517} of the medium 'C:\Users\yourname\VirtualBox VMs\Kali-Linux-2021.1-vbox-amd64\kali-linux-2021.1-vbox-amd64-disk001.vdi' does not match the value {265b5550-36fe-4747-beb5-e3cad1396d86} stored in the media registry ('C:\Users\rudycandy\.VirtualBox\VirtualBox.xml')                                      
Type:           normal (base)     
Location:       C:\Users\yourname\VirtualBox VMs\Kali-Linux-2021.1-vbox-amd64\kali-linux-2021.1-vbox-amd64-disk001.vdi Storage format: VDI 
Format variant: dynamic default
Capacity:       81920 MBytes 
Size on disk:   27159 MBytes  
Encryption:     disabled      
Property:       AllocationBlockSize=1048576
C:\WINDOWS\system32>"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" internalcommands sethduuid "C:\Users\yourname\VirtualBox VMs\Kali-Linux-2021.1-vbox-amd64\kali-linux-2021.1-vbox-amd64-disk001.vdi"                                    
UUID changed to: 146e7d15-376e-4454-ad03-11b45edf4517
```

## 注意
internalcommands sethduuid　で変更した後確認でshowhdinfoのコマンドを実行するとuuidが変更する前の値になるので、internalcommands sethduuidの後はshowhdinfoを入力しない。（確認しない）

# 構成ファイル (.vboxファイル) 編集

手動で仮想メディアの UUID を変更したため、構成ファイル (.vboxファイル) も編集する必要があります。また、VM 自体の UUID も重複が許されませんので、あわせて編集する必要があるでしょう。

関係ないタグ、属性を省略して、修正箇所のみ記載します。「uuid」でファイル内を検索して、編集漏れがないか確認してください。

VirtualBox > Machine[uuid]
　　コピー元の値を +1 するなど、他のすべての VM と重複しないように。
VirtualBox > Machine[name]
　　「VM VirtualBox マネージャー」上で、コピー元と区別できるように。特に変更がなければ変えなくてよい。
VirtualBox > Machine > MediaRegistry > HardDisks > HardDisk[uuid]
　　vboxmanage コマンドで変更後の UUID に。
VirtualBox > Machine > MediaRegistry > HardDisks > HardDisk[location]
　　ディスクのファイル名も変更した場合に。/user/yournameあたりが変更する箇所の可能性がある。
VirtualBox > Machine > StorageControllers > StorageController > AttachedDevice > Image[uuid]
　　vboxmanage コマンドで変更後の UUID に。

```
<VirtualBox>
  <Machine uuid="{07d03d86-30b5-4863-94f6-8ec9c9affd83}" name="CentOS6-devel">
    <MediaRegistry>
      <HardDisks>
        <HardDisk uuid="{50842340-e454-4ed6-ae7e-8d8579cae72a}" location="CentOS6-devel.vdi"/>
      </HardDisks>
    </MediaRegistry>
    <StorageControllers>
      <StorageController>
        <AttachedDevice>
          <Image uuid="{50842340-e454-4ed6-ae7e-8d8579cae72a}"/>
        </AttachedDevice>
      </StorageController>
    </StorageControllers>
  </Machine>
</VirtualBox>
```

# 解決

何とか解決することができた。

この方法は仮想イメージの移植と似ているので今後移植予定なら役立つ方法だろう。