気の向くままに辿るIT/ICT/IoT
システム開発

仮想マシンの移動・コピー

ホーム前へ次へ
仮想マシンの移動・コピー

仮想マシンで動くOS

仮想マシンの移動・コピー

 仮想マシンは、仮想化のための各種仮想化ソフトウェアで作成可能な擬似的なコンピュータ・PC環境であり、その内、ホスト型でオープンソース、または、無償で利用できるものにVirtualBoxVMware PlayerVirtual PCやエミュレーション方法が若干異なるQEMUなどがあります。

 その仮想マシンにOSをインストール、そこにアプリケーションもインストールでき、物理、または、仮想CD/DVD/USBなどとの接続、物理マシン上のOS(ホストOS)と仮想マシン上のOS(ゲストOS)間で仮想ネットワークを介してWebサーバ含むクライアントサーバ構成にすることなどもできますし、条件に合致すれば、共有フォルダやドラッグ&ドロップなども可能となります。

仮想マシンはバックアップも簡単

 仮想マシンは、物理的なPCから見ると1つの大きなファイルで構成ファイルを含め、1つのフォルダ(ディレクトリ)にまとめられます。

 基本的には、このフォルダをコピーすれば、バックアップが簡単にでき、移動することも容易にできてしまいます。

 ただ、バックアップではなく、テンプレートとなるディスクからクローンを作成するなどして同一ネットワーク上に配置するといった場合には、プロダクトキーを要求されるOSやソフトウェアでは、OSの場合、クローン作成中に、ソフトウェアの場合は、クローン作成後に別途保持している異なるプロダクトキーを使ってインストールする必要があるでしょうし、UUIDやEthernetのMACアドレスなどそれなりの設定変更も必要となるでしょう。

 また、UUIDという識別子に関してVirtualBoxやVMware Playerでは、ちょっとした注意が必要です。

VirtualBoxの仮想マシンフォルダの移動・コピー

 VirtualBoxでは、仮想マシンをUUIDという識別子を使って管理していますが、仮想マシンフォルダ(や仮想マシンファイル)を移動やコピー(やクローンを作成)するとコピー元とコピー先でこのUUIDが重複し、仮想マシンの起動ができなくなります。

VirtualBoxの仮想マシンフォルダの移動

 既存の仮想マシンを移動する場合、UUIDは、パスが通る場所にさえあれば、保存場所が変更となっても識別できるようになっているのでUUIDや仮想マシン名さえ変えなければ、特に何もする必要はありません。

 ただ、移動するにあたり、安全のため、コピーした場合には、UUIDが重複するのでそのままでは、起動できません。

 その場合には、VirtualBox Managerで[ファイル(F)]から[仮想メディアマネージャ(V)]を選び、ポップアップされた画面上にあるリストで元の仮想マシンを選び、[解放(L)]、不要なら、その後、[除去(E)]し、ポップアップ画面を閉じます。

 その後、VirtualBox Managerで[仮想マシン(M)]から[追加(A)]を選び、移動する目的でコピーした先の仮想マシンを指定し、追加できたら、起動します。

 何れにしても、この方法では、コピー元かコピー後のどちらか一方しか利用できません。

VirtualBoxの仮想マシンフォルダのコピー

 一方、VirtualBoxで既存の仮想マシンをコピーして別途仮想マシンを追加したい場合には、vboxmanage clonevmvboxmanage clonehdを使う方法があります。

 また、これらを手作業でやるという方法もなくもありません。

 仮想マシンマネージャから[新規]を選び、任意の仮想マシン名を付け、[仮想マシンを作成しない]とし、カラで作成しておきます。

 この時、その名称のフォルダが作成され、新たなUUIDで[*.vbox]ファイル及び[*.vbox-prev]ファイルが作成されますから、以下のようにこれを利用すれば、UUIDが重複することはなくなります。

 次にコピー元となる既存の仮想マシンから[*.vdi]ファイルを新規に作成したカラの仮想マシンフォルダにコピーし、名称を『当該仮想マシン名(デフォルトではフォルダ名).vdi』に変更します。

 その名称は、そこにある[*.vbox]ファイル及び[*.vbox-prev]ファイルのドットより前の部分の名称と同じになります。

 当該フォルダにある[*.vbox]ファイル及び[*.vbox-prev]ファイルをテキストエディタなどで開き、<Machine>タグ内の[name]属性の設定値[*.vdi]の[*]部分を先程付けた適切な名称に変更します。

 これでUUIDの異なる仮想マシンができたのでコピー元も新たに作成した仮想マシンも利用できるようになります。

 先にカラの状態で新規作成した仮想マシンの[設定]、[ストレージ]で当該*.vdiファイルを指定して起動すれば、使えるはずです。

 尚、HDDを指定する際、SCSI/IDEの別で迷った場合には、[*.vbox]ファイルや[*.vbox-prev]ファイルに書いてあります。

 当時、メインマシンのOSがWindowsだったのでWindows用に書き、「フォルダ」といった表現を使っていたりしますが、その後、Fedora(Linux)をメイン、サブマシンでは、NetBSDなどを使うようになり、今回、Fedoraで確認しているのでLinux上にVirtualBoxをインストールしている場合も同様です。

 これまで閲覧してくださった方々すみません。。。随分経ってからやってみたら、この枠内のVirtualBoxで作成した仮想マシンの移動/コピーに関する以下の内容は、移動とコピーがごっちゃまぜになり、間違っていたというか、適切でない部分が多々あり、上記のように修正させて頂きました。

 以下、いろんな状況が入り混じって若干込み入って見えますが、要は、再発行したUUIDを.vbox、.vbox-prevファイルでそれぞれ2か所上書きし、仮想マシン名(.vdi等)を一致させればよく、場合によって仮想マシンの設定を適切に変更する必要があるという話です。

 まず、(internalcommandsってまだ使えるんだっけ?と思いつつ、)下記のコマンドで新たにUUIDを振り直します。(実際には、[UUID changed to:]のコロンの後に新規作成されたUUID値が表示されます。)

 Windowsのコマンドプロンプトの例(拡張子.exeはなくても可)

c:\Program Files\Oracle\VirtualBox >VBoxManage.exe internalcommands sethduuid "パス\仮想マシン.vdi"

UUID changed to:

c:\Program Files\Oracle\VirtualBox >

 [UUID changed to:]に続くUUIDを控えておくか、コピーできる状態にしておきます。(例えば、コマンドプロンプトで左上隅のアイコンから[編集(E)] > [範囲指定(K)]を選択、コマンドプロンプト上でコピー部分を範囲選択した後、再度、左上隅のアイコンから[編集(E)] > [コピー(Y)]とすればクリップボードにコピーできます。)

 次にVirtualBoxマネージャ上から[ファイル(F)] > [仮想メディアマネージャ(V)]を選択し、対象となる仮想マシン用で不要となった仮想ハードディスクを全てそのリスト上から[除去(E)]し、[閉じる(L)]で終了します。

 (この時、もし、移動・コピー後に使用する仮想ハードディスク(と同名のディスクファイル)がある場合、[解放(L)]しておきます。)

 そして使用するフォルダ内にある.vbox、.vbox-prevという2つのファイルをテキストエディタで開くなどして<HardDisks>タグ内の<HardDisk>タグにある[uuid]値と[location]値(必要ならパス付で.vdiファイル名)及び<StorageController>タグ内の<AttachedDevice type="HardDisk">タグの更に内側の<Image>タグにある[uuid]値を変更、[uuid]値は、何れも先に控えた(コピーできる状態にある)UUIDにします。

 (.vbox-prevの方は、既存の2つの[uuid]値が異なっていても控えておいた同一のUUIDに変更します。)

 その上で対象となる仮想マシンに対し、VirtualBoxマネージャの[設定]から[ストレージ]タブを選択、『ストレージツリー』内の仮想マシンファイル(例.vdi)を選択、『属性』『ハードディスク(D):』横にあるディスクアイコンをクリック、[仮想ハードディスクファイルの選択]から新たなに使用する仮想ディスクファイル(例.vdi)を指定すれば、OKです。

[注意]

 尚、これらの手順で正しくない部分があると「移動前のフォルダ」を削除したり、「コピー前のフォルダ」を移動したりした時に「(それら変更以前の)パスが見つからない」とのエラーと[最新の情報に更新]ボタンが表示されてしまい、どうしろって言うのさ状態になることがあります。

 その場合には、VirtualBoxマネージャ上の当該仮想マシンを[除去(R)]し、新たに仮想マシンを作成します。

 その際、既存のフォルダ名(既定では同名となる仮想マシン名)と同名の仮想マシン名では、仮想マシンの作成ができない為、同名にしたい場合には、既存のフォルダ名を必要に応じて改名してから仮想マシンを作成します。

 作成する仮想マシンでは、[仮想ハードドライブを追加しない(D)]オプションを選択(、出てくるポップアップのメッセージを無視して[続ける]をクリック)しておけばOKで、それでも.vboxと.vbox-prevファイルはできてしまいますが、それは使わないので削除するなり、上書きするなりします。

 新たに仮想マシンを作成できたら、以前のフォルダから.vdi、.vbox、.vbox-prevファイルを移動やコピーさせる等して同一フォルダ内の.vdiと.vbox、.vbox-prevの内容(.vdiのUUIDやファイル名)を一致させておきます。

 尚、仮想マシンの設定内容を事細かに把握している場合は別ですが、数が多いなど、個々の仮想マシンの詳細を把握していない場合、主要な点は、予め控えておいた方がよいかもしれません。

 というのも当サイト検証では、例えば、Puppy Linuxは、何事もありませんでしたが、FreeBSDでは、仮想ハードディスク部分にIDEコントローラしかなかったので何も考えずにSCSIコントローラを追加、そこに仮想ハードディスクを割り当てたところ妙なエラーが出て見たこともないプロンプトが出現し、うまく起動できず、少し経ってハッとして、もしやIDEか?と思い、仮想ハードディスクをIDEコントローラに割り当てたところ、正常に起動できたということがありました。

 これは比較的単純な設定ミスだった為、判明しましたし、良く見れば、.vbox、.vbox-prevファイル内の<StorageController>タグのname属性に[name="IDE"]とありました。

 また、VirtualBoxにおけるOpenBSD(BSD系が続くのは単なる偶然)では、エラーポップアップが表示されたら、[続ける]で[boot]プロンプトが出るので[Enter]キーを押して起動しますが、デフォルトでは起動せず、OpenBSDの仮想マシン設定の[システム]タブ内の[チップセット(C)]と[ストレージ]タブ内の[属性]部分の[タイプ(T)]に[ICH9]を設定(してみたら[APIC]を有効にしないと機能しないというメッセージが画面下部に表示されたので[システム]タブ内の[拡張機能]部で[IO APICを有効化(I)]をチェック)したら起動できました(が、.vboxや.vbox-prevの<StorageController>タグを見るとname属性が"IDE"、type属性が"PIIX3"となっているので未確認ではありますが、両方をPIIX3とすることでも起動できるのかもしれません)。

 どうしてもうまくできない場合には、コピーする分、時間はかかりますが、クローン作成用の[VBoxManage clonehd]コマンドを使う方法もあります。

 尚、VirtualBoxの場合、スナップショットの保存先を設定することができるようになっているのでスナップショットを使っていなくても念のため、保存先を再設定しておくとよいでしょう。

・初期起動画面[VirtualBoxマネージャー]で当該仮想マシンを選択

・[設定(S)]をクリックするなどして設定画面を開く

・[一般]タブの[高度(A)]タブを確認

・『スナップショットの保存先(N):』の選択欄で『リセット』、『その他』で再選択

 念のため、仮想ディスクイメージに重複がないか確認の上、あれば、次のように対処します。

 初期起動画面[VirtualBoxマネージャー]で

・[ファイル(F)] > [仮想メディアマネージャ(V)]をクリック

・[ハードドライブ(H)]タブで仮想ハードディスクが重複していないかを確認

・接続済みとして重複していたら不要な方を[解放(L)]ボタンで解放

・常時利用する仮想マシンファイルとして不要なら続いて[除去(E)]ボタンで除去

 これでVirtualBoxにおける仮想マシンフォルダ・ファイルの移動、コピー、仮想マシンのクローン作成などが正常に完了するでしょう。

VMware Playerの仮想マシンフォルダの移動・コピー

 VMware Player(やVMware Workstationなど)については、何の前準備もなく、ホストOS上で単純にフォルダを移動したり、コピーしたりしてしまうと以下のようなポップアップ画面が表示され、何れを選択しても、その後、その仮想マシンを起動できなくなる場合があります。

...

この仮想マシンはコピーまたは移動された可能性があります。

...
移動しました。
コピーしました。
...

 VMware Playerでこのような状況に遭遇した場合、開けなくなった.vmdkディスクイメージを復元する方法には、.vmx(構成ファイル)の編集で対処可能な場合とそうでない場合の大きく2通りの対策があります。

.vmx(構成ファイル)の編集

 このような場合、VMware Playerでも構成ファイルである[.vmx]ファイルの編集をすれば、実は簡単に対処できます。

 具体的には、.vmxファイルに下記の内、何れかの対応をとりますが、コピーや移動した時にUUIDを保持する[uuid.action = "keep"]、または、コピー(や移動)した時に常に新しいUUIDを設定する[uuid.action = "create"]行を追加するのが簡単でしょう。

 コピーする場合、前者だとUUIDが重複して無理ですが、後者なら元の仮想マシンとコピー後の仮想マシンを同時に起動するといったこともできるでしょう。

  • [uuid.action = "keep"]を追加
  • [uuid.action = "create"]を追加
  • 既存の[uuid.bios]の右辺に新たなUUID値を設定

 たいていは、これで先のポップアップメッセージも表示されず、通常通り、起動できるようになるはずですが、そうでない場合は、後述の方法で対処するとよいでしょう。

 尚、UUID/Universally Unique Identifierとは、Open Software Foundation/OSFが標準化したソフトウェアを一意に識別するための識別子でVMwareでは、このUUIDが、初回の仮想マシン実行時に割り振られ、内部保持されると共に以後、そのUUID値との一致が管理されることになっていますが、仮想マシンファイルを移動したり、コピーしたりすると新しい仮想ハードディスクとしてUUID値が割り振られつつ、内部保持したUUID値が更新されない為、不整合が起こることから、これを回避する為に先のような対応が必要となるということのようです。

 ちなみに一度起動しさえすれば[uuid.action = "keep"]行を削除しても何の影響もありませんでしたが、また移動やコピーする可能性もあるかもしれませんから、追加したままでよいでしょう。

 VMware製品全般で共通化が図られて(一連の連携ソフトウェア群が開発されて)おり、VMware Playerは、バージョン2までは、VMware Workstationで作成した仮想マシンの実行のみができるソフトウェア、バージョン3から仮想マシン作成機能も追加され、実質、VMware Workstation機能の一部を無償で利用できるソフトウェアとなったこともあり、基本的にドキュメントの内容も共通する部分が多く、仮にVMware Playerのドキュメントが見当たらなくてもVMware Workstationのドキュメントが参考になったり、それがまさに解となることが多々あります。

 今回、参考にしたVMware Workstationのドキュメント仮想マシンの移動、より直接的には、仮想マシン UUID の使用を見つける前に一部のものは、以下のような強引な技で対処してしまいましたが、まだ対処していなかった仮想マシンで[uuid.action = "keep"]を追加したところ、あっさり起動することができました。

.vmx(構成ファイル)で対処できない場合

 こうした方法に比べれば、手間と時間は、かかるものの状況によっては、次のような方法でないと復旧できない場合もあるでしょう。

 例えば、Windows 2000/XP含む以降のNT系WindowsとWindows MEまでのWindows、もしくは、Linux/PC-UNIX/BSD/Mac OS/Mac OS X/OS Xなどとデータ共有の必要性からFAT32フォーマットした外付けハードディスクに仮想マシンフォルダを作成、移動、コピーした場合などです。

 FAT32には、1つのファイルサイズにおいて4GBの限界、実質3GBちょっとの限界があり、これを越えるとファイルが壊れる、仮想マシンファイルの場合だと起動も移動もコピーも削除もできないといった状態になる可能性があるからです。

 一般に仮想マシンは、新規作成時に「固定」と「可変」サイズの仮想ハードディスクを作成できますが、「固定で4GB以上」、「可変で最大サイズ4GB以上」の指定をした場合、こうした状況になる可能性があるわけですが、実は、注意すべきは、これだけではありません。

 更に注意すべきは、その中に期せずして、または、うっかりとでもFAT32のこうした4GB以上の限界を超える既存の仮想マシンフォルダやファイルがあった場合、固定ハードディスクサイズや可変ハードディスクの最大サイズが、実際のサイズや指定に関わらず、移動、コピー時に指定した覚えのない膨張したサイズになってしまうことがあることです。

 このようなケースで膨張してしまった仮想マシンファイルは、[仮想マシンの設定]の[ハードディスク]選択時に選択可能な[ユーティリティ]メニューの[コンパクト(圧縮)]も機能せず、サイズの変更が出来なくなってしまいます。

 ちなみにVM Server/VirtualBoxの[VBoxManage clonehd]して.vmdkを.vdiに変換後、[VBoxManage modifyhd --resize]して(.vmdkに再変換して)もうまくいきませんでした(が、これはファイルシステムを拡張していないからだと思います)。

 しかし、.vmdkファイルをマウントすることで、あっさり対処できました。

仮想ディスクを仮想ディスクとしてマウント!?

 結論から言うと2つのVMware Playerの仮想ハードディスクである.vmdkを物理マシンの仮想ハードディスクとしてマウントし、ファイルを丸ごとコピーするという単純なのか複雑なのか、頭がこんがらがりそうな方法です。

 つまり、起動できなくなった仮想マシン(以下、コピー元)と新たに作成したパーティション作成・フォーマット(ファイルシステム設定)済み仮想マシン(以下、コピー先)それぞれを物理マシンの仮想ディスクとしてマウントし、単純にコピー元からコピー先に全てのファイルをコピーすることになります。

 マウントできるということは、当然のことながら仮想マシン内のファイルにアクセスする手段の1つとして利用できる上、この方法だと仮想マシンを起動する(起動しておく)必要すらありませんから、ここでの対策以外にも使い道は多いでしょう。

VMwareではマウントをマップと呼ぶらしい

 VMware Player 3.1.6(日本語対応版)では[マップ]でしたが、VMware Player 6.0.3(英語版)では、[Mount Disk]になっていました。

 ちなみに諸事情により、VMware Player 3.1.6(on Windows Vista)の後、VMware Player 6.0.3(on Fedora/Linux)を使うようになった為、その間の機能名は把握していません。

 また、Windows版とLinux版で違うということはないと思いますが。。。その点は未確認です。

 [マップ(M)...]というメニューを見つけて、もしかして。。。と思いつつやってみたとはいえ、え!?そんな仮想の仮想?的なことホントにできんだ?!と目からうろこ。。。と一瞬思ったものの、ISOディスクイメージでもできることですし、Windows 7/2008 R2でも.vhdファイルをマウントできることを考えれば、同じことですね。

 その方法は、グラフィカルな画面上で進められるのでLinux/BSD/UNIX系OSのマウントやWindowsのコマンドプロンプトから実行できるSUBSTコマンドによるマウントよりも手軽で簡単。

 マウントは、VMware Playerでは、マップと呼ぶようでマップする為には、対象となる仮想マシンの[仮想マシンの設定...(S)]から[ハードディスク]を選択、[ユーティリティ(U)]から[マップ(M)...]を選択します。

 この時、コピー先に関しては、書き込める必要があるので[ファイルを読み取り専用モードで開く(R)(推奨)]のチェックを外します。

 その後、それぞれ干渉しないマウント先(ドライブレター)を選択(そのままで問題ないはず)、何れも[マップ後にエクスプローラでドライブを開く(O)]を選択(デフォルト)、[OK]ボタンをクリックすれば、マウント済みドライブ直下が表示された状態でエクスプローラが開きます。

 それぞれエクスプローラが表示されたら、コピー元のエクスプローラでシステムファイル含む全てのファイルを表示させる設定しておき、[Ctrl]+[A]などで全選択してドラッグ&ペーストやコピー&ペーストでコピー元からコピー先の仮想ハードディスクにコピーするだけです。

 インストールしてあるアプリケーションなどによっては、うまくコピーできないファイルもあるかもしれませんが、必要なら、別途なんらかの対策を講じる為にもメモしておくとよいでしょう。

 ちなみに先にマップした方の仮想マシンの[仮想マシン設定]ポップアップを閉じないと他方の[仮想マシン設定]を開くことはできません。

 また、コピー先は、アクティブに設定されたパーティションの作成と(基本的にコピー元と同じ)ファイルシステムのフォーマットはしておく必要があります。

 もちろん、新しい仮想マシンフォルダを作成したドライブのフォーマットがFAT32であれば、その限界値を意識したサイズにするか、それが無理なら、コピー先をそうした限界のない他のファイルシステムでフォーマットされたディスクに指定することを忘れずに。

 コピーが終わったらそれぞれ[仮想マシン設定]の当該[ハードディスク]を選択、[ユーティリティ(U)]をクリックすると唯一クリックできる[切断(N)](なぜ、N?"No more , thank you."の「N」?)というメニューが表示されるので、これをクリックするとマウントが解除されます。

 また、ファイルエクスプローラにおいてシステムファイルを含む全てのファイルを表示する設定も元に戻しておくとよいでしょう。

 この方法だとディスクサイズに応じてコピーの時間はかかりますが、仮想マシンの構成ファイルは、仮想マシンを作成した時点で作られることから構成ファイルを編集する必要もなく、起動できなくなる直前までの状態の仮想マシンを実行できるようになります。

ホーム前へ次へ