URAMIRAIKAN

1020のなれの果て (since 2005.6.19)

vSphereでVMのUUIDを変更する

 vSphereでは、仮想マシンを作成したときに一意のUUIDが割り振られます。
 仮想マシンをクローンした際には新たなUUIDが割り当てられますが、何かの原因でUUIDが重複してしまう場合があります(メッセージが表示されて「移動しました」を選択した場合とか)。

 とある環境を調査した際にUUIDの重複が原因で不具合が出ていたので、それを修正したときのメモです。

 確認した環境はvSphere 5.5 (vCenter Server + ESXi)です。

 基本的には以下の通り、VMXファイルのパラメータを直接書き換えるだけです。

  1. 対象の仮想マシンをパワーオフ状態にします。
  2. 対象仮想マシンが配置されているESXiにSSH等でログインします。
  3. データストア内にある対象仮想マシンのVMXファイルをviエディタで開き、"uuid.bios"の値を書き換えます。ESXi上でのVMXファイルのパスは、後から仮想マシン名を変更していなければ"/vmfs/volumes/<データストア名>/<仮想マシン名>/<仮想マシン名>.vmx"です。
  4. "vim-cmd vmsvc/getallvms | grep <仮想マシン名>"コマンドを実行して、対象仮想マシンのESXi上でのVMID(コマンド結果の第1カラム)を確認します。
  5. "vim-cmd vmsvc/reload "コマンドを実行してVMXファイルの更新を読み込ませます。

 手作業でやるとこんな感じですが、そのうちスクリプト化しようとは思っています。

 あと、VMXファイル中で"uuid.bios"のフォーマットは

uuid.bios = "00 11 22 33 44 55 66 77-88 99 aa bb cc dd ee ff"

のようになっています。
 適当に書き換えてもいいのですが、作業時にはLinuxの"uuidgen"コマンドを使用して作成していました。

$ uuidgen | perl -pe 's/-//g; s/([a-z0-9]{2})/\1 /g; substr($_,23,1,"-")'
a7 ff ed 03 7a 77 41 4c-bf 75 76 01 83 b4 e1 d9

 一応、PowerShellでもそれらしいものを…

> [guid]::NewGuid() | % { $_ -replace "-",""} | % { $_ -replace '([a-z0-9]{2})','$1 '} | % {$_ -replace '^(.{23}) ','$1-'}
0e e8 76 1b 69 95 4e b1-98 cc 81 11 93 a5 83 a9

 そもそもUUIDが重複する状況がおかしいはずなので、そっちを解決する方が重要なんでしょうけどね。

 参考になったのはこのあたり