VMDKファイルの破損原因と構造理解
ESXi環境での運用中に停電やストレージ障害、強制シャットダウンなどが発生すると、仮想マシンのVMDKディスクファイルが破損することがあります。これにより起動不能になったり、ディスクマウントに失敗したり、VMDK破損エラーが表示されたりします。多くの初心者は再インストールしか選択肢がないと考えますが、実際にはESXi標準の`vmkfstools -E`コマンドで直接修復する方法と、正常なflat.vmdkデータファイルから手動でディスクリプタファイルを再構築する方法の2つがあります。
VMDKファイルの構成要素
ESXi環境における仮想ディスクは2つのファイルで構成されています:
- xxx.vmdk ディスクリプタファイル:小さなサイズで、ディスクパラメータ、容量、フォーマット、データ位置情報を記録
- xxx-flat.vmdk データ本体ファイル:システムと全データを実際に格納する大容量ファイル
多くの「VMDK破損」は実際には小さなディスクリプタファイルのみが破損し、flatデータファイルは正常な状態を保っています。主な破損原因は以下の通りです:
- サーバーの急な電源切断、強制停止
- ストレージ接続遮断、アレイオフライン
- 仮想マシンファイルの誤削除、異常なクローン/スナップショット処理
- スナップショット階層の混乱、ディスクチェーン破損
flat.vmdkが消失または破損していなければ、ほぼ完全に修復可能です。
方法1:vmkfstools -Eによる自動修復
コマンドの主な機能
`vmkfstools -E`はESXi標準の修復パラメータで、破損したVMDKディスク、チェーン破損、軽度の論理障害を検出・自動修復するために設計されています。通常の破損シナリオに適しており、ワンクリックで自動処理が可能です。
実行前の準備
- 対象仮想マシンを完全にシャットダウンし、スナップショットを削除してディスク使用を回避
- ESXi SSHセッションに接続し、仮想マシンの保存ディレクトリに移動
- 元の破損したディスクファイル名を確認
修復コマンド実行
vmkfstools -E 破損ディスク.vmdk 修復後ディスク.vmdk
実行例:
vmkfstools -E Ubuntu.vmdk Ubuntu_repaired.vmdk
実行後の効果
- VMDK構造エラー、ポインタエラー、リンク破損を自動検出
- 正常に動作可能な新しいVMDKディスクリプタを自動生成
- 既存のflatデータを破壊せず、安全に無損失で処理
適用可能な状況
- VMDK構造破損、ディスク読み込み不可のエラー表示
- スナップショット統合失敗、ディスクチェーン異常
- 軽度の論理破損、ファイルは見えるが起動不能
方法2:flat.vmdkからのディスクリプタ再構築
`vmkfstools -E`での修復が失敗した場合、またはディスクリプタvmdkが誤削除または完全破損しているが`flat.vmdk`データファイルが残っている場合は、この手法で再構築します。
基本原理
大きなflatデータファイルが正常であれば、手動で標準的なvmdkディスクリプタを作成し、元のflatファイルを指すようにすることで、仮想マシンは正常に認識して起動できます。
完全な操作手順
- SSHで仮想マシンディレクトリにアクセスし、ファイルを確認:
xxx-flat.vmdkが存在し、サイズが正常であることを確認ls -la - 既存の破損または空のvmdkをバックアップ:
mv 元ディスク.vmdk 元ディスク_backup.vmdk - 同じ容量の空のテンポラリVMDKを作成(元の容量と一致):
100GBのスリムプロビジョニングディスク作成例:vmkfstools -c ディスク容量 -d thin 作業用.vmdkvmkfstools -c 100G -d thin work_temp.vmdk - 作成されたテンポラリフォルトファイルを削除し、ディスクリプタのみ保持:
rm work_temp-flat.vmdk - 元の正常なflatファイルを名前変更して新ディスクリプタに関連付け:
mv 元ディスク-flat.vmdk work_temp-flat.vmdk - テンポラリvmdkを元の正式名に戻す:
mv work_temp.vmdk 元ディスク.vmdk - 権限を更新し、ファイルチェーンを修復:
vmkfstools -R 元ディスク.vmdk
完了後、ESXiインターフェースで仮想マシン編集を開き、このディスクを再選択することで正常に起動可能になり、データは完全に保持されます。
修復前後の注意点
- 修復前に必ず仮想マシンを停止し、ディスク使用中の状態での修復を禁止
- ファイルバックアップを優先的に実施し、その後修復コマンドを実行して予期せぬ事態を防ぐ
- スナップショットがある場合は削除/統合後にVMDK修復を実施
- マウント中や読み書き中のディスクに対してディスクリプタの強制再構築をしない
- 修復完了後はまず起動テストを行い、システムとデータの完全性を確認してから通常運用に移行
修復方法の選択基準
- 通常の破損、VMDKエラー表示、構造異常の場合は:`vmkfstools -E`による自動修復を優先、シンプルで効率的
- vmdkディスクリプタの喪失、誤削除、重度の破損の場合は:ディスクリプタ再構築+既存flat.vmdkとの関連付け、成功率が最も高い
よくある誤解と回避策
- VMDK破損=データ完全喪失と誤解する、実際は小規模ディスクリプタのみ破損していることが多い
- シャットダウンせずに直接修復し、ファイル使用中で修復失敗になる
- ディスクリプタ再構築時にディスク容量が元と一致せず、起動エラーになる
- バックアップなしで元ファイルを直接上書きし、修復失敗時にロールバックできなくなる
ESXiの破損VMDK修復の核心は2つ:1つ目は`vmkfstools -E 不良ディスク.vmdk 修復済ディスク.vmdk`を使用して論理エラーを自動検出・修復、2つ目は正常なflat.vmdkデータファイルを保持し、手動でVMDKディスクリプタを再構築して関連付けることです。ほとんどの仮想マシンVMDKエラー、マウント不可、起動時のディスク未検出問題は、これらのネイティブ手法で無損失で回復可能であり、OS再インストールや業務データ損失を回避できるため、ESXi運用に不可欠な実用スキルです。