4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

VmwareFusion:snapshotのクリーンアップに失敗する仮想マシンのリカバリ

Posted at

VMwareFusionを利用されてWindows環境を維持されている方も多いと思われる中、他のWEB情報にはなかった自分の経験談を一つ。
ちなみにVMwareFusionのversionは7ですが、あまりバージョンは関係なさそうな事象です。

気づいたらsnapshotの削除に失敗するようになっていた。

VMwareFusionには現在の仮想マシン環境をsnapshotという機能でバックアップする事が可能です。
しかし、ある日から間違って取ったsnapshotを削除しようとすると、"削除されたファイルをクリーンアップできません。入出力エラーです。"と表示される様になってしまいました。
しかしアプリ上見る限りsnapshotは消えています。動作も問題なし。

仮想マシンが実行中に突然、vmdkにアクセスできませんと異常終了する

上記と関係あるかわかりませんが、仮想マシン実行中にvmdkにアクセスできません、外部媒体のスイッチが入っている確認云々とエラーメッセージが出て落ちるようになってしまいました。

仮想マシンのパッケージファイルの中身を確認すると大量のvmdkファイル

動きが不安定なので調査開始です。
VMwareFusionでは仮想マシンのパッケージ(vmwarevm)の中に色々なファイルが作成されるのですが、その中身を見ていると
(仮想マシン名)−000001.vmdk
(仮想マシン名)-000002.vmdk
(仮想マシン名)-000003.vmdk....
と大量のvmdkファイルが。
snapshot毎に作られるファイルがそのまま残っているようです。しかし、これは取得したsnapshotが削除されれば消されるファイル。
明らかに今あるsnapshotより多い数です。

vmdkファイルの統合を進めるが...

VMwareのナレッジを使ってvmdkファイルの統合を進めます。
http://kb.vmware.com/selfservice/microsites/search.do?language=en_US&cmd=displayKC&externalId=2086712

1.自動で統合する:アプリ上からスナップショットを取って削除する
 今回は、それが前段でうまく行っていないので次。
2.手動で統合
 vmware-vdiskmanager コマンド ライン ユーティリティから実行。しかし、

 Convert: 5% done.Failed to convert disk: One of the parameters supplied is invalid (0x3e80).

 のエラーメッセージで処理中断。
3.各vmdkのエラーチェックをしてから、再度手動実行
 ”統合を開始する前に、仮想ディスク ファイル (.vmdk) で修復を実行することをお勧めします。”とあり、修復コマンドを叩いてから実行するも変わらず。

大量のvmdkファイルの中、どれかが壊れているのが原因

仕方がないので仮想マシンを作り直すか、とvmdkファイル達のバックアップをとっていたら、一部のファイルのコピーが失敗します。

cp: .....Windows 7.vmwarevm/Windows 7-000006.vmdk: Input/output error

どうやら、ファイルとしてはmac上壊れているが、VMware上ではなんとか動いてたみたい。それも解せないですが...

破損しているファイルをコピーする

動いてはいるので、macでも扱える形にファイルをリカバリーしたい所。
ここからはvmwareではなくOSベースの話になってきました。

なんとなくファイルイメージをそのままコピーするコマンドがある様な気がして検索。やっぱりヒット。
http://superuser.com/questions/458579/copying-many-files-without-stopping-on-errors-on-osx

ddコマンドを使えば行けそうです。
ddは(dataset definition)の略らしいですが、data destroyerでもあると怖い事が書いてあります。
パス指定は慎重にと。

sudo dd if=コピー元パス/windows7-000018.vmdk of=コピー先パス/windows7-000018.vmdk conv=noerror,sync

conv=noerror指定はエラーが出ても処理を続行、syncはエラー箇所をnullで埋めてファイルサイズを維持する。
両方必須です。

統合成功!

壊れているvmdkファイルをddでOSから取り扱えるファイルにコピーしなおして、リカバリー。
のち、パッケージ内の壊れているvmdkはリネームして、リカバリーしたvmdkファイルを配置しなおします。
あとは、"1.自動で統合する:アプリ上からスナップショットを取って削除する"を実行。
無事に大量のvmdkファイルは削除され、一つのvmdkへと統合されました。

ああ、長かった。

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?