VMware Fusion で動く Windows に英語キーボードからバックスラッシュを打つ方法 [vmware][mac]

英語キーボードの Mac の VMware Fusion で動いている Windows でバックスラッシュが打てず、スクリーンキーボードを使って、打っていました。
が、検索して解決方法が見つかったのでメモしておきます。

手順は、
1. デバイス マネージャからキーボードを右クリックし、[ドライバの更新] を選択します。
2. "ハードウェアの更新ウィザードの開始" で "いいえ、今回は接続しません" を選択し、[次へ] をクリックします。
3. "一覧または特定の場所からインストールする" を選択し、[次へ] をクリックします。
4. "検索しないで、インストールするドライバを選択する" を選択し、[次へ] をクリックします。
5. "互換性のあるハードウェアを表示" のチェックをはずし、製造元:(標準キーボード)、モデル:101/102英語キーボードまたはMicrosoft Natural PS/2 キーボードを選択し、[次へ] をクリックします。
6. 再起動します。

[画像] #TODO

VMware の肥大化した仮想ディスクを shrink する まとめ [vmware]

- [2009-09-21-1] VMware の肥大化した仮想ディスクを shrink する (その1)
- [2009-09-22-1] VMware の肥大化した仮想ディスクを shrink する (その2)
- [2009-09-23-1] VMware の肥大化した仮想ディスクを shrink する (その3)

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

ホストで新しい仮想マシンの vmx ファイルを編集し、CD ブートを止めます。
ide1:0 の記述を下記のように変更します。

ide1:0.present = "TRUE"
#ide1:0.startConnected = "FALSE"

ide1:0.deviceType = "cdrom-raw"
ide1:0.fileName = "auto detect"

#ide1:0.deviceType = "cdrom-image"
#ide1:0.fileName = "D:\systemrescued-x86-1.3.0.iso"


partimage からリストアした新しい仮想マシンを起動すると GRUB 表示のまま、止まってしまって起動しませんでした。

dd で MBR の回復を試してみました。
まず、肥大化した vmdx の仮想マシンを partimage のレスキュー CD から起動し、dd で MBR をバックアップ。

# mount /dev/sdb1 /mnt/backup
# dd if=/dev/sda of=/mnt/backup/mbr bs=512 count=1


新しい仮想マシンを partimage のレスキュー CD から起動し、dd で MBR をリストア。

# mount /dev/sdb1 /mnt/backup
# dd if=/mnt/backup/mbr of=/dev/sda bs=446 count=1


これでも GRUB 表示のまま、止まってしまって起動しませんでした。

次に試したのが、grub-install。
新しい仮想マシンを partimage のレスキュー CD から起動し、下記を実行。

# mount /dev/sda1 /mnt
# grub-install --root-directory=/mnt /dev/sda1


これで GRUB が無事起動しました。


以上でやっと空き容量のある新しい HDD で shirnk したい仮想マシンが起動したので、vmware-toolbox を起動し、shink します。

# sudo vmware-toolbox


[Shrink] タブを開き、shrink するパーティションを選択し、[Shrink] ボタンをクリックします。


"Shrink Disk" ダイアログが表示されるので、[Yes] をクリックします。

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 を見つけました。

サイトのスクリプトを少し修正して、下記スクリプトを作成し、実行したところうまくいきました。

#!/bin/bash
# this bash-code expects the backup files as $BACKUPSET.000,
# $BACKUPSET.001, etc. Modify to match your environment.
BACKUPSET='/mnt/backup/<例えばマシン名>'
RESTORE_OPTS='-b'
DEVICE='/dev/sdb1'

toskip=0
{
  for partfile in $BACKUPSET.*; do
      cat $partfile | dd skip=$toskip 2>/dev/null
      toskip=1
  done;
} | partimage $RESTORE_OPTS restore $DEVICE stdin


今回はイメージ作成時に無圧縮を指定したので cat を使用していますが、Compression level: Gzip を指定した場合は cat を zcat に変更すること。

その後、partimage で MBR もリストアしました。

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

VMware の仮想ディスク (.vmdx) は仮想マシンで使用した容量分のサイズに徐々に大きくなっていくのですが、逆に仮想マシンでファイルを削除してもサイズは小さくなりません。

放っておくと vmdx ファイルが肥大化してくるので、たまに shrink してやります。
shrink すると、使用していない容量分を解放し vmdx ファイルを小さくできます。

shrink は仮想マシンの vmware-toolbox から行います (ゲストが Linux の場合)。

# sudo vmware-toolbox


[Shrink] タブを開き、shrink するパーティションを選択し、[Shrink] ボタンをクリックします。


"Shrink Disk" ダイアログが表示されるので、[Yes] をクリックします。


ここで、ホスト側に shrink 後の vmdx ファイルのサイズ分の空き容量がないと、先に進めないようです。


今回は空き容量がなかったので、いったん仮想マシンを終了し、肥大化した vmdx ファイルを空き容量のある HDD に移動して、再度仮想マシンを起動、shrink することにしました。

しかし、ここで問題発生。
vmdx ファイルを Windows エクスプローラでコピー中に CRC エラーが出てコピーが途中で異常終了していまいます。

コピーでは CRC エラーが出るものの仮想マシンは起動できるので、別の方法を取ることにしました。

仮想マシンを partimage のレスキュー CD ISO から起動し、vmdx の中身を空き容量のある HDD に置いた別の vmdx ファイルにバックアップすることにしました。

まず、partimage のレスキュー CD ISO はホストでダウンロードし、適当な場所に置きます。

次に、ホストで vmx ファイルを編集し、CD ISO からブートするようにします。
ide1:0 の記述を下記のように変更します。

ide1:0.present = "TRUE"
#ide1:0.startConnected = "FALSE"

#ide1:0.deviceType = "cdrom-raw"
#ide1:0.fileName = "auto detect"

ide1:0.deviceType = "cdrom-image"
ide1:0.fileName = "D:\systemrescued-x86-1.3.0.iso"


さらに partimage のイメージのバックアップ先となる仮想ディスク (vmdx) を新たに作成します (ホスト上で行う)。
コマンドプロンプトで下記を実行します。

C:\>H:
H:\>qemu-img.exe create -f vmdk partimage.vmdx 500G


作成した vmdx をゲストに認識させるために vmx ファイルに下記の記述を追加します。

ide0:1.present = "TRUE"
ide0:1.fileName = "H:\partimage.vmdk"
ide0:1.writeThrough = "TRUE"


以上で、仮想マシンを起動すると partimage のレスキュー CD ISO からブートし、/dev/sdb に新しく作成した仮想ディスクが見えます。

fdisk /dev/sdb でパーティションを作成し、mkfs.ext3 /dev/sdb1 でフォーマットします。
また、fdisk /dev/sda でパーティションの構成を表示し、記録しておきます (後で使用します)。

partimage のイメージの保存先として /dev/sdb1 をマウントします。

# mount /dev/sdb1 /mnt/backup


そして、partimage を起動し、/dev/sda1 を /mnt/backup にバックアップします。

# partimage


- Partition to save/restore: sda1 を選択
- Image file to create/use: /mnt/backup/<例えばマシン名>
- Action to be done: "Save partition into a new image file" を選択
キーボード F5 を押します。

- Compression level: None
- Options: "Enter description" のチェックを外す
キーボード F5 を押します。

[OK] をキーボード Enter で押すとバックアップが始まります。
バックアップが完了するとダイアログが表示されるので、[OK] をキーボード Enter で押し、終了します。