仮想OSのハードディスク容量を追加する方法

環境
・CenOS5.4(domain0)
・CenOS5.4(domainU)
・Xen3.0

作業はすべてrootでおこなっています。



DomainUを停止する

# ゲストOS:dom1のHDD容量を追加するため、dom1を停止
$ xm shutdown dom1												

ディスクイメージのサイズを大きくする。ここでは3GB増やしてみる。

# イメージファイルのディレクトリに移動します。デフォルトでは/var/lib/xen/images/
# イメージファイルのディレクトリに関してはこちらを参照。
$ cd /var/lib/xen/images/

# イメージの名称変更
$ mv dom1.img dom1.img.bak						
				
# zerofile.imgという3Gのnullファイルを作成します。
$ dd if=/dev/zero bs=1M count=0 seek=3072 of=./zerofile.img		

# zerofile.imgとdom1.img.bakを連結します。
$ cat dom1.img.bak zerofile.img > dom1.img						

# 空きloopbackデバイスを調べます。
$ losetup -f					
/dev/loop0

# ループバックデバイスを設定します。
$ losetup /dev/loop0 dom1.img									

# 設定がされたことを確認します。
$ losetup -a													
/dev/loop0: [fd00]:19367365 (dom1.img)

# ドライブの設定情報を確認します。
$ fdisk -lu /dev/loop0											
Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders, total 10485760 sectors
Units = sectors of 1 * 512 = 512 bytes

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *          63      208844      104391   83  Linux
/dev/loop0p2          208845     4192964     1992060   8e  Linux LVM
fdiskで区画を変更する

#fdiskで対象のスライスをいったん削除してシリンダサイズを再設定します。
# シリンダサイズを再設定します。 
$ fdisk  /dev/loop0								

# dでエンター。スライスを削除します。
Command (m for help): d							

# 2でエンター
Partition number (1-4): 2						

# nでエンター。スライスを再設定します。
Command (m for help): n							

# pでエンター
Command action									
   e   extended
   p   primary partition (1-4)
p												

# 2でエンター
Partition number (1-4): 2						

# 空エンター
First cylinder (14-652, default 14):			
Using default value 14							

#空エンター
Last cylinder or +size or +sizeM or +sizeK (14-652, default 652):	
Using default value 652

# tでエンター
Command (m for help): t							

# 2でエンター
Partition number (1-4): 2						

# 8eでエンター
Hex code (type L to list codes): 8e				
Changed system type of partition 2 to 8e (Linux LVM)

# pでエンター
Command (m for help): p							

Disk /dev/loop0: 5368 MB, 5368709120 bytes
255 heads, 63 sectors/track, 652 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

      Device Boot      Start         End      Blocks   Id  System
/dev/loop0p1   *           1          13      104391   83  Linux
/dev/loop0p2              14         652     5132767+  8e  Linux LVM

#w	でエンター。書き込みます。
Command (m for help): w							
The partition table has been altered!

Calling ioctl() to re-read partition table.

WARNING: Re-reading the partition table failed with error 22: Invalid argument.
The kernel still uses the old table.
The new table will be used at the next reboot.
Syncing disks.

# 使ったループバックデバイスを削除する
$ losetup -d /dev/loop0							

# ゲストOSを起動し、以降ゲストOS dom1で作業する。

# dom1を起動。この時点ではまだ拡張さていない。
$ xm create dom1 								
# dom1のコンソールに入る。
$ xm console dom1								

pvresizeでFree領域を拡張する

# "0 free"を確認
$ pvscan										
  PV /dev/xvda2   VG VolGroup00   lvm2 [1.88 GB / 0    free]
  Total: 1 [1.88 GB] / in use: 1 [1.88 GB] / in no VG: 0 [0   ]

# PVをリサイズします。
$ pvresize /dev/xvda2							
  Physical volume "/dev/xvda2" changed
  1 physical volume(s) resized / 0 physical volume(s) not resized
  
# "3.00GB free"を確認  
$ pvscan										
  PV /dev/xvda2   VG VolGroup00   lvm2 [4.88 GB / 3.00 GB free]
  Total: 1 [4.88 GB] / in use: 1 [4.88 GB] / in no VG: 0 [0   ]

# 論理ボリュームを拡張する
# 論理ボリュームを確認します。
$ lvscan										
  ACTIVE            '/dev/VolGroup00/LogVol00' [1.47 GB] inherit
  ACTIVE            '/dev/VolGroup00/LogVol01' [416.00 MB] inherit
  
# 論理ボリュームの状態を確認します  
$ lvdisplay /dev/VolGroup00/LogVol00			
  --- Logical volume ---
  LV Name                /dev/VolGroup00/LogVol00
  VG Name                VolGroup00
  LV UUID                oeAdv9-Cml8-04Ja-uZDM-3cvt-ZwIn-KXzEAM
  LV Write Access        read/write
  LV Status              available
  # open                 1
  LV Size                1.47 GB
  Current LE             47
  Segments               1
  Allocation             inherit
  Read ahead sectors     auto
  - currently set to     256
  Block device           253:0
  
# 論理ボリュームを3GB追加します。
$ lvresize -L +3G /dev/VolGroup00/LogVol00		
  Extending logical volume LogVol00 to 4.47 GB
  Logical volume LogVol00 successfully resized

# resize2fsでスライスを拡張します。
$ resize2fs /dev/VolGroup00/LogVol00			
resize2fs 1.39 (29-May-2006)
Filesystem at /dev/VolGroup00/LogVol00 is mounted on /; on-line resizing required
Performing an on-line resize of /dev/VolGroup00/LogVol00 to 1171456 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol00 is now 1171456 blocks long.

# LV Sizeは 先ほどは 1.47GBだったのが 4.47GBになっていることを確認
$ lvdisplay /dev/VolGroup00/LogVol00 | grep "LV Size" 
  LV Size                4.47 GB

# ディスク容量が増えていることを確認します。
$ df -h											

Filesystem          サイズ  使用  残り 使用% マウント位置
/dev/mapper/VolGroup00-LogVol00
                      4.4G  901M  3.3G  22% /
/dev/xvda1             99M   13M   81M  14% /boot
tmpfs                 151M     0  151M   0% /dev/shm

参考にしたサイト
http://d.hatena.ne.jp/dharry/20090416/1239822866