Xen4.0 の domainU の仮想ディスクを拡張する方法を試行錯誤しました。

環境

私のマシンの環境は下のとおり

  1. core i7
  2. HDD 2TB * 2
  3. Debian (squeeze) amd64
  4. Xen4.0 (aptitude install したもの)

とりあえず先人たちを参考に

domainU のディスク拡張はいろんな人がやってると思うので調べてみます。

  1. 2009-12-10

とりあえずこちらのページを参考に作業してみます。

今回は、4G のディスクに 3G を拡張してみます。

hon-ya@debian:% ll                                                [~/workspace/xen/vm-debian1]
合計 1384600
-rw------- 1 root root 4294967296 2011-05-23 23:09 disk.img
-rw------- 1 root root  134217728 2011-05-23 23:09 swap.img
hon-ya@debian:% mv disk.img disk.img.bak                          [~/workspace/xen/vm-debian1]
hon-ya@debian:% qemu-img create -f raw zerofile.img 3G            [~/workspace/xen/vm-debian1]
Formatting 'zerofile.img', fmt=raw size=3221225472 
hon-ya@debian:% ls                                                [~/workspace/xen/vm-debian1]
disk.img.bak  swap.img  zerofile.img
hon-ya@debian:% sudo cp disk.img.bak disk.img2
hon-ya@debian:% sudo cat disk.img.bak zerofile.img > disk.img     [~/workspace/xen/vm-debian1]
hon-ya@debian:% ll                                                [~/workspace/xen/vm-debia
合計 10115184
-rw-r--r-- 1 hon-ya hon-ya 7516192768 2011-05-23 23:20 disk.img
-rw------- 1 root   root   4294967296 2011-05-23 23:09 disk.img.bak
-rw------- 1 root   root   4294967296 2011-05-23 23:13 disk.img2
-rw------- 1 root   root    134217728 2011-05-23 23:09 swap.img
-rw-r--r-- 1 hon-ya hon-ya 3221225472 2011-05-23 23:12 zerofile.img
hon-ya@debian:%    

ディスク自体は拡張されたので、あとはパーティションなんかをどうこうする。

hon-ya@debian:% sudo losetup -f                                   [~/workspace/xen/vm-debian1]
/dev/loop2
hon-ya@debian:% sudo losetup /dev/loop2 ./disk.img                [~/workspace/xen/vm-debian1]
hon-ya@debian:% sudo fdisk /dev/loop2                             [~/workspace/xen/vm-debian1]
Device contains neither a valid DOS partition table, nor Sun, SGI or OSF disklabel
Building a new DOS disklabel with disk identifier 0x30d4e8d4.
Changes will remain in memory only, until you decide to write them.
After that, of course, the previous content won't be recoverable.

Warning: invalid flag 0x0000 of partition table 4 will be corrected by w(rite)

WARNING: DOS-compatible mode is deprecated. It's strongly recommended to
         switch off the mode (command 'c') and change display units to
         sectors (command 'u').

Command (m for help): p

Disk /dev/loop2: 7516 MB, 7516192768 bytes
255 heads, 63 sectors/track, 913 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0x30d4e8d4

      Device Boot      Start         End      Blocks   Id  System

Command (m for help): 

と、なんか期待してた表示と違うんですけど…

fdisk でパーティション情報が表示されない

手順通りに作業していると、fdisk での処理につまずきました。
どうも fdisk さんではパーティション情報をうまく見れないようです。

2010年01月15日の記事 | 個人的健忘録 from 2009 - 楽天ブログ

いろいろ調べてみると、どうも GPT パーティションというのがあやしい。GPT パーティションは、大容量のHDDを扱えるタイプのパーティションで、2TB を超えるサイズを扱えるそうな。

parted の使用

どうも GPT なるパーティションテーブルになっているらしく、fdisk では歯がたたない。これを扱えるのは、gdisk とかあるらしいんですけど、stable のパッケージには入っていない。いざいれてみても、なんか使いづらい。
というので行き着いたのが上のリンクのページ下部で紹介されている parted なるツールでした。こちらは、stable のパッケージにも
入っているので早速 aptitude でインストール。

hon-ya@debian:% sudo parted /dev/loop2                            [~/workspace/xen/vm-debian1]
GNU Parted 2.3
Using /dev/loop2
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) print                                                            
Model:  (file)
Disk /dev/loop2: 7516MB
Sector size (logical/physical): 512B/512B
Partition Table: loop

Number  Start  End     Size    File system  Flags
 1      0.00B  7516MB  7516MB  ext3

(parted)  

それっぽいものが見えます。これをみるかぎり、パーティションとしては拡張した分を認識してくれているようにみえます。

ファイルシステムのサイズ拡張

上記の状態で domainU を立ち上げてみたのですが、ファイルシステムが認識していないので、
相変わらず利用可能な領域は 4G でした。
ですので、ファイルシステム側を対処します。

hon-ya@debian:% sudo e2fsck -f /dev/loop2                         [~/workspace/xen/vm-debian1]
[sudo] password for hon-ya: 
e2fsck 1.41.12 (17-May-2010)
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
/dev/loop2: 19971/262144 files (1.2% non-contiguous), 192245/1048576 blocks
hon-ya@debian:% sudo resize2fs /dev/loop2                         [~/workspace/xen/vm-debian1]
resize2fs 1.41.12 (17-May-2010)
Resizing the filesystem on /dev/loop2 to 1835008 (4k) blocks.
The filesystem on /dev/loop2 is now 1835008 blocks long.

hon-ya@debian:%        

拡張(リサイズ)されたようです。

domainU で確認してみる

拡張した disk.img を使って domainU を起動してみます。
すると、以下のようにたしかに 3+4=7G になっているようです。

ast login: Sun May 22 23:27:02 2011 from 192.168.1.129
hon-ya@vm-debian1:% df                                                                     [~]
Filesystem           1K-blocks      Used Available Use% Mounted on
/dev/xvda2             7224824    704212   6153616  11% /
tmpfs                    63916         0     63916   0% /lib/init/rw
udev                     47548        32     47516   1% /dev
tmpfs                    63916         4     63912   1% /dev/shm
hon-ya@vm-debian1:%   

おわりに

いまいち、GPT のこととかが分かっていないので、これで正しい手順なのかどうかがさっぱりです。今回はパーティションが1つだけでしたが、複数あったらどうなのかとか、いろいろ調べないといけないことが多そうです。