VMware で仮想ディスクのサイズを変更したくなったとき

投稿日:

当サイトは自宅サーバで運営しているのですが、サービスが大きくなってきたこともあり、ちょっとした実験を行うために VMware でほぼ同じ環境を構築しています。といってもほぼクローン状態を作ったのは最近でして、VMware の仮想ディスクのサイズの変更と LVM パーティションの拡張でかなりドツボにハマリ、物理ディスク(raw パーティション)でドツボにハマリと、何度かインストールをしなおすハメになって苦労しました。

結局何がしたかったかというと、Core 2 Duo 上の VMware で仮想ディスクとして物理ディスク(raw パーティション)使うと普通にサービスできる程度のパフォーマンスでるんだっけ?ってことなんですけども。。。

いろいろドツボにはまったので、幾つか情報共有をば。
※物理ディスク(raw パーティション)のパフォーマンスについては別エントリで。

- スポンサーリンク -

VMware の仮想ディスク容量が足りなくなったときどうする?

VMware には、「VMware 仮想ディスクマネーシャの使用方法はどのように行えばいいのですか?」なんて FAQ ページがあります。

VMware 仮想ディスクマネーシャ(VMware Disk Manager)を使用する事で、コマンドラインから、仮想ディスクファイルの作成、管理、変更が可能です。
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」あたりが参考になりますが、操作上、迷うことはないでしょう。

注意すべき点は、対応フォーマット。これは、どのソフト使ってもほぼ同じですけど。

gparted_10_small.jpg

はい、ここでハマリどころがあります。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 の設定からハードウェア追加ウィザードを使って、ディスクの追加をします。追加時に、物理ディスクを選択します。

vmware00.jpg

追加時に、どの物理ディスクを使うか聞いてくるので間違いないように選択しましょう。PhysicalDrive0 は今自分がいるディスクなので、それ以外を選択しましょう。USB デバイスを選択する場合、一度 Windows を再起動してからこの画面に来ると良いです。PhysicalDrive の順番が変わるので、Windows 再起動後に VMware が物理ディスクが違う!って怒られます。

あと、物理ディスクを構成するときに、「個々のパーティションを使用」を選択すると何故か VM の構成に失敗したと言われるので、「全ディスクをしよう」を選択します。

vmware01.jpg

で、物理ディスクを追加したらバックアップツールをいれて VM を起動すればOK。あとば各バックアップツールの操作に従ってディスクコピーすれば良いです。

trueimage15.jpg

疲れた・・・続きはまた後で。

__追記__

僕が試した CentOS 環境では、この方法で旨く起動できたのは、

・ 仮想ディスク IDE デバイスで構築 → 物理ディスク(内蔵 IDE に2台目の HDD を増設した) 場合
  ※物理ディスクが仮想マシン上で IDE デバイスとして認識される

で逆に旨く起動できなかったのは、

・ 仮想ディスク IDE デバイスで構築 → 物理ディスク(USB デバイスの外付け HDD を接続した) 場合
  ※物理ディスクが仮想マシン上で SCSI デバイスとして認識される
・ 物理ディスク → 物理ディスク の場合

です。デバイスのタイプが変わるときは、起動ディスクを使っていろいろとやらないとダメっぽい。この辺は未検証。
取りあえず、うまくいった場合は何もしなくてもこんな感じに普通に起動できました。

screen22.jpg

ちなみに、Windows Vista の場合も旨く起動できなかったので、次のエントリで書きます。

- スポンサーリンク -