2009-09-22-1

VMware の肥大化した仮想ディスクを shrink する (その2) [vmware]

次に、partimage でバックアップしたイメージをリストアします。 まず、ホストでリストア先の仮想ディスクを作成します。
コマンドプロンプトで下記を実行します。
C:\>H:
H:\>qemu-img.exe create -f vmdk <例えばゲストのマシン名>.vmdx 500G

次に、vmx ファイルなど仮想マシンファイル一式を空き容量のある HDD の、上記リストア先の仮想ディスクを作成したディレクトリにコピーします (ホスト上で行う)。 [2009-09-21-1] の作業を行った後の vmx ファイルをコピーすると、partimage のレスキュー CD ISO からブートし、/dev/sdb が認識されるので、そのまま仮想マシンを起動します。 fdisk /dev/sda でパーティションを作成し、mkfs.ext3 /dev/sda1 でフォーマットします。
パーティションの構成、サイズは [2009-09-21-1] で記録した内容と同じにします。
Linux swap パーティションも作成します。 partimage のイメージを保存した /dev/sdb1 をマウントします。
# mount /dev/sdb1 /mnt/backup

そして、partimage を起動し、/mnt/backup/<例えばマシン名>.000 を /dev/sda1 にリストアします。
# partimage

- Partition to save/restore: sda1 を選択
- Image file to create/use: /mnt/backup/<例えばマシン名>.000
- Action to be done: "Restore partition from an image file" を選択
キーボード F5 を押します。 次の画面ではすべてデフォルトのままキーボード F5 を押します。 [OK], [Yes] をキーボード Enter で押すとリストアが始まります。 ここで問題発生。
リストア時に 'Can't read block 0 from image' というエラーが出てリストアができません。 調べてみたところ I fixed my restore problems! / www.partimage.org を見つけました。 サイトのスクリプトを少し修正して、下記スクリプトを作成し、実行したところうまくいきました [長いので以降省略しました]