システム管理の仕事をしていると、テスト、開発、または大規模な変更を行う前に安全な状態に戻したい場合など、サーバーの全く同じコピーが必要になることがあるでしょう。私がこの業界に入りたての頃は、開発環境やテスト環境を構築するためだけに、既存のサーバーと全く同じOSを再インストールし、ソフトウェアを設定するのに何時間も費やしたものです。それは時間の無駄である上に、間違いも起こしやすかったのです。
ある時、上司から本番環境の重要なアプリケーションをアップグレードするように言われたのを覚えています。たった一つの操作ミスで全てのユーザーに影響が出る可能性があるため、私はかなり不安でした。その時、「サーバーの状態をフリーズ」させることができれば、何か問題が発生してもすぐに時間を巻き戻せるのに、と強く願っていました。あるいは、新しいプロジェクトのために同様の構成で数十台の仮想マシンを展開する必要がある場合、一つ一つ手動でインストールするのは拷問に近いものでした。
私が会社で8台のESXiホストからなるVMwareクラスターを管理する過程で、このような状況は頻繁に発生しました。しかし幸運にも、VMwareはこれらの問題を徹底的に解決するための非常に強力な2つのツールを提供してくれました。それがSnapshotとClone VMです。これらの経験は全て、私の会社での8台のESXiホストVMwareクラスターの実運用から得られたものです。特に仮想化に初めて触れる方にとって、非常に役立つと信じています。
実際の課題:仮想マシンの作成と管理が複雑なのはなぜか?
仮想マシン (VM) は、今やほとんどの現代的なITインフラの根幹をなしています。しかし、仮想マシンをゼロから新規作成したり、手動で複製したりすることは、常に多くの問題を引き起こす可能性があります。VMDKファイル(仮想マシンのディスクを含むファイル)を単にコピーして起動するだけでは、設定の競合エラーが非常に発生しやすくなります。
これは、SID (Security Identifier) が重複する可能性があるWindowsのようなオペレーティングシステムで特に顕著です。さらに、このプロセスは、オペレーティングシステム、パッチ、ドライバー、および基本アプリケーションの再インストールに時間がかかります。これを5回、10回、あるいは50回も繰り返すことを想像してみてください。それはまさに悪夢です。
同様に、ソフトウェアの更新、ファイアウォール構成の変更、またはセキュリティパッチをテストする必要がある場合、常に稼働中のサーバーを破損させるリスクに直面します。古い状態に戻すにはどうすればよいでしょうか?手動でバックアップして復元するには、半日、場合によっては一日中かかることもあり、常に100%成功するとは限りません。
原因分析:複雑さの本質
主な原因は、仮想マシンがハードディスク上のファイルの単なる集合体ではない点にあります。それはメモリの状態、仮想ハードウェアの構成、およびアクティブなネットワーク接続でもあります。ファイルを手動でコピーする場合、あなたは「全体像」の一部をコピーしているに過ぎません。
VM内のオペレーティングシステムとアプリケーションは、認識する識別子(ID)とハードウェア構成に深く「組み込まれて」います。単純なコピーは、2つの仮想マシンが同じ識別子を持つことになります。これは、Active DirectoryのようなSIDに依存するサービスでは特に、それらが同じネットワークで動作する際に競合を引き起こします。
以前の状態に戻す場合、VMDKファイルだけをバックアップするだけでは不十分です。それはRAMのメモリ状態、CPU、実行中のプロセスを記録しません。そのため、問題が発生した場合、ファイルのバックアップからの復元は、ディスク上の特定の時点に戻すだけであり、バックアップ時の仮想マシンの完全な「ライブ」状態を復元するものではありません。
VMwareでの効果的な解決策
これらの問題を解決するために、VMwareはSnapshotとCloneという2つのコア機能を提供しています。それぞれの機能の強力さを理解していただくために、詳しく見ていきましょう。
1. スナップショット (仮想マシンの状態の瞬間的なキャプチャ)
スナップショットとは、ある特定の時点における仮想マシンの完全な状態を「撮影」するようなものだと考えてください。ディスク上のデータだけでなく、メモリ(RAM)の状態、接続されている仮想デバイスの状態、およびVMの構成設定も保存されます。必要な時に、撮影したその時点の状態に数秒で戻すことができます。
スナップショットはいつ使うべきか?
- 重要なシステム変更前: パッチのインストール、ソフトウェアのアップグレード、ネットワーク構成の変更、レジストリの編集など… エラーが発生した場合、すぐに元に戻すことができます。
- ソフトウェアまたはアプリケーションのテスト: 「クリーンな」テスト環境を作成し、新しいアプリケーションをインストールし、互換性を確認します。テストが完了したら、スナップショットを削除するか、元の状態に戻すことができます。
- 一時的な開発環境の作成: 開発者は独立してコードを記述し、テストするための環境を必要とします。
- トレーニングまたはデモ: 各学習セッションまたはデモの後、次回の準備のためにVMの初期状態に戻します。
スナップショットの作成と管理方法
私は通常、vSphere Client (Web client) を使用してESXiホストを管理しています。スナップショットを作成する手順は非常に簡単です。
- スナップショットを作成する仮想マシンを選択します。
- そのVMを右クリックし、
Snapshots>Take Snapshot...(またはメニューからActions>Snapshots>Take Snapshot) を選択します。 - スナップショットに名前を付け(例:「Before_App_Upgrade_20240326」)、詳細な説明を入力し、オプションを選択します。
Snapshot the virtual machine's memory: 非常に重要です!これを選択するとRAMの状態が保存され、VMが実行中の状態に正確に戻ります。選択しない場合、復元時にVMを再起動する必要があります。Quiesce guest file system (requires VMware Tools installed): ディスク上のデータがスナップショット前に同期され、一貫していることを確認します。データベースや継続的にデータを書き込み/読み込みするアプリケーションを実行するVMには、これを選択することを強くお勧めします。VMware Toolsのインストールが必要です。OKをクリックします。このプロセスは通常非常に迅速に完了します。
スナップショットに戻すには (Revert):
- VMを右クリックし、
Snapshots>Revert to Latest Snapshotを選択します。 - または
Snapshot Manager(またはManage Snapshots) にアクセスして、特定の対象スナップショットを選択して元に戻します。
重要な注意点:
- スナップショットをバックアップとして使用しない: スナップショットは完全なバックアップではありません。それは元のディスクに対する変更を保存する単なる「デルタ」ファイルです。元のディスクが破損した場合、スナップショットも無意味になります。したがって、常に個別のバックアップソリューションを用意してください。
- パフォーマンス: 多数のスナップショットや、スナップショットを長期間保持することは、VMのパフォーマンスに著しく影響を与えます。VMにデータを書き込むたびに、VMwareは最新のスナップショットのデルタファイルに書き込む必要があり、I/Oレイテンシーが増加します。
- ストレージ容量: スナップショットファイルはすぐにディスク容量を占有する可能性があります。VMへの変更が多ければ多いほど、スナップショットファイルは大きくなります。
SSH経由でvim-cmdを使用してESXiでスナップショットをコマンドで管理するには、以下のようにします。
# ホスト上のすべてのVMをリスト表示
vim-cmd vmsvc/getallvms
# 仮想マシンのVMIDを見つける。例:123
# 次に、VMID 123のスナップショットをリスト表示
vim-cmd vmsvc/snapshot.get 123
# VMID 123のスナップショットを「MySnapshot」という名前と「Before upgrade」という説明で作成
# 1はメモリのスナップショット、1はゲストファイルシステムを静止化
vim-cmd vmsvc/snapshot.create 123 "MySnapshot" "Before upgrade" 1 1
# スナップショットに戻す (スナップショットのIDを尋ねる、getで取得)
# 例: スナップショットIDは456
vim-cmd vmsvc/snapshot.revert 123 456
# 特定のスナップショットを削除
vim-cmd vmsvc/snapshot.remove 123 456
# VMのすべてのスナップショットを削除
vim-cmd vmsvc/snapshot.removeall 123
2. クローン (仮想マシンの複製)
クローンとは、既存の仮想マシンの完全かつ独立したコピーを作成するプロセスです。クローン後、あなたは互いに依存しない2つの別個の仮想マシンを持つことになります。各VMは独自の構成ファイルとディスクを持ちます。
クローンはいつ使うべきか?
- VMの一括高速展開: 「ゴールデンイメージ」(基本的なアプリケーションが既にインストールされ構成されている仮想マシン)を用意し、そこから多数のクローンを作成して、Webサーバー、データベース、またはユーザー用のクライアントマシンを作成します。
- 独立した開発/テスト環境の作成: 本番環境と全く同じで完全に分離されたコピーが必要な場合、大規模な変更をテストする場合、または異なるチームが独立したコピーで共同作業する場合。
- VMテンプレートの作成: 標準の仮想マシンを構成した後、それをクローンしてテンプレートに変換し、後で新しいVMを簡単にデプロイできるようにします。
- VMの移動: クローンは、データストア間や異なるホスト間(vMotionまたはsvMotionがない場合)でVMを移動するために使用できます。
クローンの作成と管理方法
スナップショットと同様に、私もよくvSphere Client (Web client) を介してクローンを実行します。
- ソースVMを右クリックし、
Clone>Clone to Virtual Machine...を選択します。 - 以下の手順に従います。
- Select a name and folder: 新しいVMに名前を付け(元のVMの名前と異なることが重要)、vCenter内の保存フォルダを選択します。
- Select a compute resource: 新しいVMを実行したいESXiホストまたはクラスターを選択します。
- Select storage: 新しいVMのファイルを保存するデータストアを選択します。
- Select clone options:
Customize the operating system: Windows VMにとって非常に重要です!ホスト名を変更し、SIDを新しく作成して競合を回避するのに役立ちます。Linuxの場合、後でcloud-initまたはスクリプトを使用してカスタマイズできます。Customize this virtual machine's hardware: 新しいVMのCPU、RAM、ディスクの数を元のVMと比較して変更したい場合。Power on virtual machine after creation: 作成後すぐにVMを起動するオプションです。Finishをクリックします。このプロセスは、VMのサイズとストレージシステムのパフォーマンスに応じて時間がかかります。
クローン後にすべきこと:
- IPアドレスの変更: 元のVMが静的IPを持っている場合、新しいVMはIPが重複します。クローン後すぐに変更する必要があります。
- ホスト名の変更: 管理しやすくするために、VMに新しい名前を付けます。
- 新しいSIDの作成 (Windowsのみ):
Customize the operating systemを選択しなかった場合は、WindowsのSysprepツールを実行して新しいSIDを作成し、Active Directoryやコンピューターの識別子に依存するアプリケーションでの問題を回避してください。 - 古いエージェントの削除 (存在する場合): 一部の監視エージェントやバックアップエージェントは、新しいVMで再構成または再インストールが必要になる場合があります。
コマンドによるクローンについては、ESXi上で直接行う場合は、通常PowerCLI(Windows上)またはvCenter APIが必要となるため、少し複雑になります。しかし、ESXiホストしか持っていない場合は、VMDKファイルと.vmxファイルのコピーを作成し、新しいVMを登録することで手動で実行できます。この方法はエラーが発生しやすいため、初心者にはお勧めしません。vCenter環境では、PowerCLIがこの自動化のための強力なツールです。
# vCenter ServerまたはESXiホストに接続
Connect-VIServer -Server your_vcenter_or_esxi_ip
# 元のVM情報を取得
$vmSource = Get-VM -Name "OriginalVMName"
# 新しいクローンを作成
New-VM -Name "NewClonedVM" -VM $vmSource -VMHost (Get-VMHost "your_esxi_host_name") -Datastore (Get-Datastore "your_datastore_name") -OSCustomizationSpec (Get-OSCustomizationSpec "Your_Customization_Spec_Name")
# PowerCLIのコマンドは、ホスト名、SIDを変更するためにカスタマイズ仕様を要求します。
# vCenterで事前にカスタマイズ仕様を作成する必要があります。
注意として、PowerCLIはvCenter/ESXiにアクセスできるWindowsマシンにインストールされている必要があります。ESXi上のvim-cmdを使用する場合、元のクローン作成はファイルのコピーというかなり手動の操作であり、vCenterのような自動カスタマイズプロセスはありません。
最善の方法:スナップショットとクローンはいつ使うべきか?
ここまでで、スナップショットとクローンの違いと用途が明確になったことでしょう。適切なツールを選択することで、時間を節約し、リスクを軽減し、インフラをより効率的に管理できます。
- 短期間の変更および元に戻す可能性のある変更にはスナップショットを使用: スナップショットは、現在の状態を「一時停止」し、何か新しいことをテストし、短期間(数時間から数日)後に簡単に元に戻す方法として考えてください。例えば、OSのアップグレード、新しいアプリケーションのインストール、ネットワーク設定の変更などです。スナップショットはバックアップではなく、長期間保持するとパフォーマンスに影響することを忘れないでください。
- 独立したコピーの作成と新規展開にはクローンを使用: 元のマシンに依存しない完全に新しい仮想マシンが必要な場合は、クローンを使用します。目的は、インフラの拡張、個別の開発/テスト環境の作成、または「ゴールデンイメージ」を作成して複製することなどが考えられます。
私がよく採用する効果的な戦略は、基本的なソフトウェアと構成が事前にインストールされた「標準」仮想マシン(ゴールデンイメージ)を作成することです。次に、この「ゴールデンイメージ」からクローン機能を使用して、さまざまな目的のために新しい仮想マシンを作成します。クローン作成された各新しい仮想マシンでは、大きな変更を行う前に安全のためにスナップショットを取得します。変更が成功した後、パフォーマンスへの影響を避けるためにそのスナップショットを削除します。
これらの経験は全て、私の会社での8台のESXiホストVMwareクラスターの実運用と管理から得られたものです。スナップショットとクローンを習得し、熟練して使用することは、私とチームの作業効率を高めるだけでなく、システム全体の安定性と安全性を向上させます。この記事が、あなたの仕事にすぐに適用できる明確な洞察と実践的なガイダンスを提供することを願っています。成功を祈ります!

