XenのDomain-Uディスク拡張(LVMを使用しない)
XenのDomain-Uのディスク拡張方法として、LVMで構築されたゲストの拡張方法はよく見かけますが、LVMを使用していないゲストのディスク拡張方法があまり見つからず、e2fsckでエラーが出まくり、ハマっていたのですが、以下のページで紹介されていた方法をそのままやったらできました。
http://www.jaddog.org/2009/08/12/expanding-a-xen-disk-images-space/
環境は、Red Hat Enterprise Linux 5.4です。xenのバージョンは、xen-3.0.3-94.el5_4.3を使用しています。
xenのバージョンや依存したような作業ではないと思うので、他のディストリビューションでも試す価値はあると思います。
ポイントは、xm block-attachです。
ちなみに、Linuxのコマンドライン操作をはてなダイアリーで貼り付けるときは、何記法が一番見やすいのかな。
■拡張前のDomain-Uのディスクの状況
[root@domu1 ~]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/xvda3 34G 31G 1.4G 96% / /dev/xvda1 99M 18M 77M 19% /boot tmpfs 1.1G 0 1.1G 0% /dev/shm
■ディスク拡張を行います。
[root@xen-dom0 images]# xm shutdown domu1 [root@xen-dom0 images]# mv domu1.img domu1.img.old [root@xen-dom0 images]# dd if=/dev/zero of=zero-40gb.img bs=1024k count=40960 [root@xen-dom0 images]# cat domu1.img.old zero-40gb.img > domu1.img
ここまでの手順は一般的に紹介されています。
ゲストを落として、ddコマンドで作成したファイルをイメージファイルと結合して、
拡張したディスクイメージファイルを作成します。
ddコマンドは、例の場合は40GBのファイルを作成します。+1GBならcountは1024に指定します。値を変えて、追加したいディスクサイズに変更してください。
この後の手順では、e2fsckを行うのですが、以下の方法では失敗します。
■e2fsckが失敗してしまうパターン
(1)イメージファイルをfsckしてもダメ
[root@xen-dom0 images]# e2fsck -fv domu1.img e2fsck 1.39 (29-May-2006) Couldn't find ext2 superblock, trying backup blocks... e2fsck: Bad magic number in super-block while trying to open /dev/loop0 The superblock could not be read or does not describe a correct ext2 filesystem. If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device>
(2)ループバックにマウントしてfsckしてもダメ
[root@xen-dom0 images]# losetup /dev/loop0 pre-kp-cmsp01.img [root@xen-dom0 images]# e2fsck -fv /dev/loop0 e2fsck 1.39 (29-May-2006) Couldn't find ext2 superblock, trying backup blocks... e2fsck: Bad magic number in super-block while trying to open /dev/loop0 The superblock could not be read or does not describe a correct ext2 filesystem. If the device is valid and it really contains an ext2 filesystem (and not swap or ufs or something else), then the superblock is corrupt, and you might try running e2fsck with an alternate superblock: e2fsck -b 8193 <device>
■イメージファイルのアタッチ
正解は、xm-block attachです。attachした後であれば、fsckが通ります。
[root@xen-dom0 images]# modprobe xenblk [root@xen-dom0 images]# xm block-attach 0 'file:/var/lib/xen/images/domu1.img' xvda w
■アタッチの状況を確認(xvda1は/boot,xvda3が/です。xvda3を拡張します。)
[root@xen-dom0 images]# fdisk -l /dev/xvda Disk /dev/xvda: 84.8 GB, 84892712960 bytes 255 heads, 63 sectors/track, 10320 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/xvda1 * 1 13 104391 83 Linux /dev/xvda2 14 535 4192965 82 Linux swap / Solaris /dev/xvda3 536 5099 36660330 83 Linux
■fsckでディスクチェック(swapを除く)
[root@xen-dom0 images]# e2fsck -f /dev/xvda1 e2fsck 1.39 (29-May-2006) 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 /boot: 40/26104 files (10.0% non-contiguous), 20964/104388 blocks [root@xen-dom0 images]# e2fsck -f /dev/xvda3 e2fsck 1.39 (29-May-2006) 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 /: 295171/9166080 files (3.9% non-contiguous), 8352833/9165082 blocks
[root@xen-dom0 images]# tune2fs -O^has_journal /dev/xvda3 tune2fs 1.39 (29-May-2006) [root@xen-dom0 images]# tune2fs -O^has_journal /dev/xvda1 tune2fs 1.39 (29-May-2006)
■fdiskでディスク拡張
fdiskで拡張対象のパーティションを一度削除して、再作成します。
私の環境の場合3(xvda3)ですが、環境によってパーティションは変わりますので、気をつけましょう。fdiskの操作方法が分らない人は、調べてからやりましょう。
[root@xen-dom0 images]# fdisk /dev/xvda このディスクのシリンダ数は 10320 に設定されています。 間違いではないのですが、1024 を超えているため、以下の場合 に問題を生じうる事を確認しましょう: 1) ブート時に実行するソフトウェア (例. バージョンが古い LILO) 2) 別の OS のブートやパーティション作成ソフト (例. DOS FDISK, OS/2 FDISK) コマンド (m でヘルプ): p Disk /dev/xvda: 84.8 GB, 84892712960 bytes 255 heads, 63 sectors/track, 10320 cylinders Units = シリンダ数 of 16065 * 512 = 8225280 bytes デバイス Boot Start End Blocks Id System /dev/xvda1 * 1 13 104391 83 Linux /dev/xvda2 14 535 4192965 82 Linux swap / Solaris /dev/xvda3 536 5099 36660330 83 Linux コマンド (m でヘルプ): d 領域番号 (1-4): 3 コマンド (m でヘルプ): n コマンドアクション e 拡張 p 基本領域 (1-4) p 領域番号 (1-4): 3 最初 シリンダ (536-10320, default 536): Using default value 536 終点 シリンダ または +サイズ または +サイズM または +サイズK (536-10320, default 10320): Using default value 10320 コマンド (m でヘルプ): w 領域テーブルは交換されました! ioctl() を呼び出して領域テーブルを再読込みします。 ディスクを同期させます。
■fsckで再チェック
[root@xen-dom0 images]# e2fsck -f /dev/xvda3 e2fsck 1.39 (29-May-2006) 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 /: 295171/9166080 files (3.9% non-contiguous), 8320031/9165082 blocks
[root@xen-dom0 images]# tune2fs -j /dev/xvda1 tune2fs 1.39 (29-May-2006) Creating journal inode: done This filesystem will be automatically checked every -1 mounts or 0 days, whichever comes first. Use tune2fs -c or -i to override. [root@xen-dom0 images]# tune2fs -j /dev/xvda3 tune2fs 1.39 (29-May-2006) Creating journal inode: done This filesystem will be automatically checked every -1 mounts or 0 days, whichever comes first. Use tune2fs -c or -i to override.
■リサイズ
[root@xen-dom0 images]# resize2fs -f /dev/xvda3 resize2fs 1.39 (29-May-2006) Resizing the filesystem on /dev/xvda3 to 19649503 (4k) blocks. The filesystem on /dev/xvda3 is now 19649503 blocks long.
■最後にディタッチ
[root@xen-dom0 images]# xm block-detach 0 xvda
■ゲストの起動
[root@xen-dom0 images]# xm create domu1 Using config file "/etc/xen/domu1". Started domain domu1
■Domain-Uディスクの確認
[root@domu1 ~]# df -h Filesystem サイズ 使用 残り 使用% マウント位置 /dev/xvda3 73G 31G 39G 45% / /dev/xvda1 99M 18M 77M 19% /boot tmpfs 1.1G 0 1.1G 0% /dev/shm