VMware で仮想ディスクのサイズを変更したくなったとき
当サイトは自宅サーバで運営しているのですが、サービスが大きくなってきたこともあり、ちょっとした実験を行うために VMware でほぼ同じ環境を構築しています。といってもほぼクローン状態を作ったのは最近でして、VMware の仮想ディスクのサイズの変更と LVM パーティションの拡張でかなりドツボにハマリ、物理ディスク(raw パーティション)でドツボにハマリと、何度かインストールをしなおすハメになって苦労しました。
結局何がしたかったかというと、Core 2 Duo 上の VMware で仮想ディスクとして物理ディスク(raw パーティション)使うと普通にサービスできる程度のパフォーマンスでるんだっけ?ってことなんですけども。。。
いろいろドツボにはまったので、幾つか情報共有をば。
※物理ディスク(raw パーティション)のパフォーマンスについては別エントリで。
VMware の仮想ディスク容量が足りなくなったときどうする?
VMware には、「VMware 仮想ディスクマネーシャの使用方法はどのように行えばいいのですか?」なんて FAQ ページがあります。1) コマンドシンタックス
vmware-vdiskmanager.exe -x <拡張後のサイズ> 仮想ディスクファイル.vmdk
これで仮想ディスク容量の変更はOKです。これで、仮想環境上からみれる物理ディスクの容量は増えます。
仮想ディスク容量を増やした後どうする?
上記のコマンドで仮想ディスクを増やしただけでは OS 上から使用可能な容量は増えません。パーティション情報も変更してやる必要があります。商用の Partition Magic とか持っていなくても、GParted Live CD を使えば、パーティション情報を変更することができます。ISOイメージをダウンロードして、VMware の仮想 CD-ROM の「ISO イメージを使用」に、ダウンロードした ISO イメージを指定して VM を起動すればOK。実際の操作については、「パーティションを操作できるフリーソフト「GParted Live CD」 - GIGAZINE」あたりが参考になりますが、操作上、迷うことはないでしょう。注意すべき点は、対応フォーマット。これは、どのソフト使ってもほぼ同じですけど。
はい、ここでハマリどころがあります。Linux で LVM パーティションをつかっちゃった場合、すんなりとはパーティションサイズが変更できません。kernel 2.6 系の Linux は多くの場合標準で LVM 使ってインストールされるので、めちゃ注意が必要です。ext 3 で入れておくんだったとハゲしく後悔。
LVM パーティションを変更する方法
完全に VMware の話題から外れます。Linux の世界です。検索しまくったら、「LVMパーティションの拡張」っていうドンピシャなページを見つけました。めちゃくちゃメンドクセー作業でした。もう、このページの手順通りやるだけです。一応、自分でやったときの作業ログはこんな感じ。
1. windows 上から、下記コマンドを実行
vmware-vdiskmanager.exe -x 45Gb "D:\Documents and Settings\tsunoda\My Virtual Machines\VMware\CentOS4.4 32bit\CentOS4.vmdk"
2. FC 6 の rescue CD をゲット
wget http://ftp.iij.ad.jp/pub/linux/fedora/core/6/i386/iso/FC-6-i386-rescuecd.iso
3. FC 6 rescue CD で VM 起動する
4. LVM 変更
[root@dev01 ~]# fdisk -l
Disk /dev/hda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 3916 31350847+ 8e Linux LVM
[root@dev01 ~]# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
29G 24G 3.1G 89% /
/dev/hda1 99M 13M 82M 13% /boot
none 252M 0 252M 0% /dev/shm
[root@dev01 ~]# pvs -o +dev_size --units s
PV VG Fmt Attr PSize PFree DevSize
/dev/hda2 VolGroup00 lvm2 a- 62652416S 65536S 62701695S
[root@dev01 ~]# fdisk /dev/hda
このディスクのシリンダ数は 5874 に設定されています。
間違いではないのですが、1024 を超えているため、以下の場合
に問題を生じうる事を確認しましょう:
1) ブート時に実行するソフトウェア (例. バージョンが古い LILO)
2) 別の OS のブートやパーティション作成ソフト
(例. DOS FDISK, OS/2 FDISK)
コマンド (m でヘルプ): p
Disk /dev/hda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 3916 31350847+ 8e Linux LVM
コマンド (m でヘルプ): d
領域番号 (1-4): 2
コマンド (m でヘルプ): n
コマンドアクション
e 拡張
p 基本領域 (1-4)
p
領域番号 (1-4): 2
最初 シリンダ (14-5874, default 14):
Using default value 14
終点 シリンダ または +サイズ または +サイズM または +サイズK (14-5874, default 5874):
Using default value 5874
コマンド (m でヘルプ): t
領域番号 (1-4): 2
16進数コード (L コマンドでコードリスト表示): 8e
領域のシステムタイプを 2 から 8e (Linux LVM) に変更しました
コマンド (m でヘルプ): p
Disk /dev/hda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 5874 47078482+ 8e Linux LVM
コマンド (m でヘルプ): w
領域テーブルは交換されました!
ioctl() を呼び出して領域テーブルを再読込みします。
警告: 領域テーブルの再読込みがエラー 16 で失敗しました: デバイスもしくはリソースがビジー状態です。
カーネルはまだ古いテーブルを使っています。
新しいテーブルは次回リブート時に使えるようになるでしょう。
ディスクを同期させます。
ということで、ここで一度マシンを再起動する。
[root@dev01 ~]# vgcfgbackup -f vgbackup
Volume group "VolGroup00" successfully backed up.
[root@dev01 ~]# pvs -o +dev_size --units s
PV VG Fmt Attr PSize PFree DevSize
/dev/hda2 VolGroup00 lvm2 a- 62652416S 65536S 94156965S
# pe_start + pe_count * extent_size ≦ dev_size
# pe_count ≦ (dev_size - pe_start) / extent_size
# ↓(この環境では・・・)
# pe_count ≦ (94156965 - 384) / 65536
# ≦ 1436.7154083251953125
[root@dev01 ~]# vgcfgrestore -f vgbackup VolGroup00
Restored volume group VolGroup00
[root@dev01 ~]# lvextend -L 43.8G VolGroup00/LogVol00
Rounding up size to full physical extent 43.81 GB
Extending logical volume LogVol00 to 43.81 GB
Logical volume LogVol00 successfully resized
[root@dev01 ~]# umount /mnt/sysimage/boot
[root@dev01 ~]# umount /mnt/sysimage/sys
[root@dev01 ~]# umount /mnt/sysimage/proc
[root@dev01 ~]# umount /mnt/sysimage/dev
[root@dev01 ~]# umount /mnt/sysimage/selinux
[root@dev01 ~]# umount /mnt/sysimage
[root@dev01 ~]# swapoff /dev/VolGroup00/LogVol01
[root@dev01 ~]# e2fsck -f /dev/VolGroup00/LogVol00
e2fsck 1.35 (28-Feb-2004)
/dev/VolGroup00/LogVol00 is mounted.
WARNING!!! Running e2fsck on a mounted filesystem may cause
SEVERE filesystem damage.
Do you really want to continue (y/n)? yes
/dev/VolGroup00/LogVol00: recovering journal
Clearing orphaned inode 1626440 (uid=502, gid=502, mode=0100600, size=0)
Clearing orphaned inode 1626409 (uid=502, gid=502, mode=0100600, size=0)
Clearing orphaned inode 1626408 (uid=502, gid=502, mode=0100600, size=0)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
Block bitmap differences: +2066432 -4553240 +4553241
Fix<y>? yes
Free blocks count wrong for group #63 (1, counted=0).
Fix<y>? yes
Free blocks count wrong (1187839, counted=1187838).
Fix<y>? yes
Inode bitmap differences: +2264923 -2265025
Fix<y>? yes
/dev/VolGroup00/LogVol00: ***** FILE SYSTEM WAS MODIFIED *****
/dev/VolGroup00/LogVol00: ***** REBOOT LINUX *****
/dev/VolGroup00/LogVol00: 2497138/3784704 files (0.4% non-contiguous), 6373378/7561216 blocks
[root@dev01 ~]# resize2fs -f /dev/VolGroup00/LogVol00
[root@dev01 ~]# mkswap /dev/VolGroup00/LogVol01
[root@dev01 ~]# fdisk -l
Disk /dev/hda: 48.3 GB, 48318382080 bytes
255 heads, 63 sectors/track, 5874 cylinders
Units = シリンダ数 of 16065 * 512 = 8225280 bytes
デバイス Boot Start End Blocks Id System
/dev/hda1 * 1 13 104391 83 Linux
/dev/hda2 14 5874 47078482+ 8e Linux LVM
[root@dev01 ~]# df -h
Filesystem サイズ 使用 残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
44G 24G 18G 58% /
/dev/hda1 99M 13M 82M 13% /boot
none 252M 0 252M 0% /dev/shm
[root@dev01 ~]# pvs -o +dev_size --units s
PV VG Fmt Attr PSize PFree DevSize
/dev/hda2 VolGroup00 lvm2 a- 94109696S 131072S 94156965S
むっはーっ! 疲れた!
やっぱり物理ディスク(raw パーティション)で仮想ディスクを作りたくなった
既に仮想ディスクを作ってしまっているけど、パフォーマンス向上をねらって、raw パーティションで仮想ディスクを作りたくなったって場合は、バックアップツールを使ってディスクを丸ごとコピーするのが楽です。取りあえず、VMware の設定からハードウェア追加ウィザードを使って、ディスクの追加をします。追加時に、物理ディスクを選択します。
追加時に、どの物理ディスクを使うか聞いてくるので間違いないように選択しましょう。PhysicalDrive0 は今自分がいるディスクなので、それ以外を選択しましょう。USB デバイスを選択する場合、一度 Windows を再起動してからこの画面に来ると良いです。PhysicalDrive の順番が変わるので、Windows 再起動後に VMware が物理ディスクが違う!って怒られます。
あと、物理ディスクを構成するときに、「個々のパーティションを使用」を選択すると何故か VM の構成に失敗したと言われるので、「全ディスクをしよう」を選択します。
で、物理ディスクを追加したらバックアップツールをいれて VM を起動すればOK。あとば各バックアップツールの操作に従ってディスクコピーすれば良いです。
疲れた・・・続きはまた後で。
__追記__
僕が試した CentOS 環境では、この方法で旨く起動できたのは、
※物理ディスクが仮想マシン上で IDE デバイスとして認識される
で逆に旨く起動できなかったのは、
※物理ディスクが仮想マシン上で SCSI デバイスとして認識される
・ 物理ディスク → 物理ディスク の場合
です。デバイスのタイプが変わるときは、起動ディスクを使っていろいろとやらないとダメっぽい。この辺は未検証。
取りあえず、うまくいった場合は何もしなくてもこんな感じに普通に起動できました。
ちなみに、Windows Vista の場合も旨く起動できなかったので、次のエントリで書きます。


コメントやシェアをお願いします!
(o)
>で、物理ディスクを追加したらバックアップツールをいれて VM を起動すればOK。あとば各バックアップツールの操作に従ってディスクコピーすれば良いです。
というところがよく分かりませんでした。これはVirtual Diskの内容をPhysical Diskにコピーするということでしょうか?もし、Physical Diskをbootableにしたければ結構面倒な作業な気もするのですが、簡単にできるようなツールをご存知でしたらお教えいただければ幸いです。
http://www.vmware.com/community/message.jspa?messageID=517825
あたりを読むと、vmware-vdiskmanagerを使ってPhysical DiskからVirtual Diskに変換することはできるらしいことが書いてあります。その逆ができれば話は簡単なのですけれどね。