仮想化, 自宅サーバー

VMwareやXenのディスクイメージのサイズを増やす

サーバーが増えてきたので、といってもほとんどXenのサーバーなのだが、そろそろサーバー監視をせねばと思い統合監視ツールのNagiosを導入したのだが、いきなり「ルートパーティションの残り少ないよ!」と言われたので増設。

もともとVMwareでインストールしたディスクイメージはファイルで、ファイル=物理ディスクでルートパーティションとSWAPパーティションの2つがある。で、このルートパーティションを増やしたのでメモ。参考にしたのは次のサイト。

検閲Tech: Dom0からDomUのイメージファイルをディスクデバイスとして扱う

まずは、DomainUを停止して古いイメージをバックアップ

# cp reborn.img reborn.img.org

次にこのイメージファイルに追加書き込みしてサイズを増やす。オリジナルのサイズは20Gバイトで、これに10Gバイト追加する。ちなみに下の例のようにddコマンドで30Gバイト-1Mバイトまでスキップして1Mバイトだけ書くと瞬時に完了する。こうするとCopy On Writeになるので実際に利用するときまでディスクへの書き込みは遅延される。ゆえに最初はディスクもほとんど消費しないので省エネなのだが、これだけのサイズを確保しているわけではないのでディスクフルになると大変なことになるので気をつけよう>私。

# ls -l
合計 20086696
-rw-r–r– 1 root root 21474836480 2008-06-26 08:00 reborn.img

# dd if=/dev/zero of=reborn.img seek=30719 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB) copied, 0.035053 seconds, 29.9 MB/s

次にfdiskを使っていったんパーティションを削除して(ドキドキ)、次のように変更する。守るべき点は、ファイルスステムの開始セクターは同じこと、かならずサイズは増やすことの2点である。SWAPパーティションは作り直すので開始セクターがずれてもいい。

(編集前)
Disk /dev/loop1: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/loop1p1 * 1 2550 20482843+ 83 Linux
/dev/loop1p2 2551 2610 481950 82 Linux swap / Solaris

(編集後)
Disk /dev/loop1: 32.2 GB, 32212254720 bytes
255 heads, 63 sectors/track, 3916 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

Device Boot Start End Blocks Id System
/dev/loop1p1 1 3850 30925093+ 83 Linux
/dev/loop1p2 3851 3916 530145 82 Linux swap / Solaris

このままだと30Gバイトの器に20Gバイトのファイルシステムの状態なので直す必要がある。まずはパーティションを変更するために空いているループバックデバイスをゲット。

# losetup -f
/dev/loop1

このループバックデバイスにイメージファイルをマッピングする。

# losetup /dev/loop1 reborn.img

そんでもってこのloop1のパーティションを読み込ます。これで/dev/mapper以下にループバックデバイスのパーティションが現れる。コマンドはkpartxなのだがDebianの場合、testingでないと提供されていない(2008/06/26現在)。

# kpartx -a /dev/loop1

で、fsckでチェック。

# e2fsck -f /dev/mapper/loop1p1
e2fsck 1.40-WIP (14-Nov-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
/: 390908/2557216 files (0.8% non-contiguous), 4413250/5120710 blocks

いよいよファイルサイズを増やす。

# resize2fs /dev/mapper/loop1p1
resize2fs 1.40-WIP (14-Nov-2006)
Resizing the filesystem on /dev/mapper/loop1p1 to 7731273 (4k) blocks.
The filesystem on /dev/mapper/loop1p1 is now 7731273 blocks long.

最後に新しく作ったSWAPパーティションを再作成。

# mkswap /dev/mapper/loop1p2
Setting up swapspace version 1, size = 542863 kB
no label, UUID=b4e99967-5f4c-45ef-acab-25bd89ff8d5d

後始末としてループバックを解除して、VMを起動する。

# kpartx -d /dev/loop1
# losetup -d /dev/loop1

ちなみにこの方法だと、変更できるのは後ろが空いているパーティション1つだけだ。本来ならpartedでやるのだが、なぜかDebianのetchだと”File system has an incompatible feature enabled”なるエラーが出来てresize出来なかった。

similar posts

comment

よろしければ、コメントをどうぞ。トラックバックはこちら

このエントリーのコメントの購読

次のHTMLタグが使えます。: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">

*Required Fields