KVM仮想マシンのディスクサイズを拡大・縮小する完全ガイド
本記事では、KVMハイパーバイザー上で稼働する仮想マシンのディスクサイズを変更する方法について解説します。主要なディスクフォーマット別に、データを失わずに仮想ディスクを拡張する正しい手順と、ディスクサイズを縮小する際の選択肢について詳しく見ていきましょう。
KVM仮想マシンのディスクサイズを拡張する方法
KVMでの仮想ディスクの拡張手順
まず、20GBの仮想ディスクを拡張する例を見ていきます。仮想ディスクの設定を変更する前に、必ず仮想マシンをシャットダウンしてください。
KVM仮想マシンの仮想ディスク設定を確認するには、以下のコマンドを使用します。
qemu-img info /path_to_disk
実行すると、次のような結果が表示されます。

ここで、サイズに関する2つの重要なフィールドが確認できます。
- virtual_size:ディスク作成時または拡張時に設定された仮想ディスクのサイズ(この例では最大20GB)
- disk_size:ディスクファイルの現在の実サイズ。つまり物理サーバー上で占有している容量です(qcow形式の場合のみ表示)。この例では、仮想ディスクはストレージ上でわずか1.6GBしか消費していません
ここでKVMのディスクタイプ(フォーマット)についても触れておきます。KVMで仮想マシンを作成する際は、rawではなくqcow2を使用することをお勧めします。その理由については後述します。
次に、仮想ディスクを5GB拡張してみましょう(ディスクを正しく拡張するには、仮想マシンにスナップショットが存在しないことが前提条件となります!)。
# qemu-img resize /path_to_disk +5G
Image resized.
再度仮想ディスクの設定を確認すると、ディスクが拡張されていることがわかります。
# qemu-img info /path_to_disk
image: /path_to_disk file format: qcow2 virtual size: 25G (26843535600 bytes) disk size: 1.6G cluster_size: 65536 Format specific information: compat: 0.10 refcount bits: 16
これで作業の一部は完了ですが、続いてゲストOS側でも操作が必要です。ここでは、CentOS 7とWindows Server 2012 R2のゲストOSでディスクを拡張する方法を紹介します。
なお、KVMハイパーバイザー上の仮想マシンに新しい仮想ディスクを追加したい場合は、qemu-imgおよびvirshツールを使用します。
CentOS Linux仮想マシンでパーティションを拡張する方法
KVMサーバー側で仮想ディスクを拡張したら、仮想マシンを起動して接続します。ここでは、ハードディスクのパーティション管理ツールfdiskを使って、パーティションとファイルシステムのサイズを拡張します。
SSHでゲストOSに接続し、追加された5GBのディスク領域が認識されていることを確認しましょう。
df -h
fdisk -l

スクリーンショットでは、/dev/vda2のサイズが20GBである一方、利用可能なディスク領域は25GBになっていることがわかります。
それでは、/dev/vda2を最大サイズまで拡張します。
# fdisk /dev/vda
Welcome to fdisk (util-linux 2.23.2).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): d
Partition number (1,2, default 2):
Partition 2 is deleted
Command (m for help): n
Partition type:
p primary (1 primary, 0 extended, 3 free)
e extended
Select (default p): p
Partition number (2-4, default 2):
First sector (1050624-52428799, default 1050624):
Using default value 1050624
Last sector, +sectors or +size{K,M,G} (1050624-52428799, default 52428799):
Using default value 52428799
Partition 2 of type Linux and of size 24.5 GiB is set
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 16: Device or resource busy.
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)
Syncing disks.その後、仮想マシンを再起動し、新しいディスクサイズを適用するコマンドを実行します。
# xfs_growfs /dev/vda2
meta-data=/dev/vda2 isize=512 agcount=4, agsize=1277888 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=0 spinodes=0 data = bsize=4096 blocks=5111552, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=1 log =internal bsize=4096 blocks=2560, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 5111552 to 6422272
# df -h
Filesystem Size Used Avail Use% Mounted on devtmpfs 485M 0 485M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 6.6M 489M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/vda2 25G 1.3G 24G 6% / /dev/vda1 488M 100M 353M 23% /boot tmpfs 100M 0 100M 0% /run/user/0
これで/dev/vda2パーティションの拡張が完了しました。具体的な手順をまとめると以下の通りです。
- fdisk /dev/vda:fdiskを起動し、/dev/vdaに接続
- d:パーティションを削除。デフォルトで対象のパーティション2が選ばれるため、次の項目ではEnterキーを押すだけでOK
- n:新しいパーティションを作成。p(プライマリ)を選択してEnter、パーティション番号もデフォルトの2となるため再びEnterを押す
- 先頭セクタと最終セクタの指定では、パーティションを最大サイズまで拡張する場合はどちらもEnterキーを押すだけ。特定のサイズを指定したい場合は、メニューの+size{K,M,G}の形式で最終セクタにディスクサイズを入力する
- w:新しい設定を書き込んで適用
仮想マシンの再起動後、以下のコマンドでディスクを確認します。
xfs_growfs /dev/vda2
一部の情報源では次のコマンドも推奨されています。
resize2fs /dev/vda2
しかし、このコマンドはXFSファイルシステムでは機能しないので注意してください!
以上で、CentOS 7仮想マシンのディスク拡張は完了です。
Windows Serverゲストでディスクサイズを拡大する方法
RDPまたはVNCでWindows Server仮想マシンに接続し、ディスクを拡張します。
- サーバーマネージャー → ツール → コンピューターの管理 を開きます
- 左ペインで記憶域 → ディスクの管理を選択します。すべてのディスクパーティションと、追加された未割り当て領域が表示されます

- 拡張したいパーティションを選択し、ボリュームの拡張をクリックします

- デフォルトでは、利用可能な全領域がディスク拡張用に提案されます

- 「次へ」をクリックして拡張を完了させます。これでパーティションサイズが拡張されます

補足として、仮想マシンのディスク拡張作業を行う前に、仮想ディスクのバックアップを取得することを強くお勧めします。仮想マシンを停止し、十分な空き容量のあるバックアップディレクトリにディスクイメージをコピーしておきましょう。拡張作業中に何らかの問題が発生しても、バックアップからいつでも仮想ディスクイメージを復元できます。
KVM仮想マシンのディスクサイズを縮小する方法
業務の中でこの問題によく遭遇しますが、残念ながらKVMでは仮想マシンのディスクサイズを安全に縮小することはできません。物理ストレージ上の仮想ディスクサイズを減らす唯一の現実的な方法は、ディスクの変換(コンプレッション)です。
ネット上にはKVM仮想マシンのディスク領域を縮小する方法を説明した記事が数多くありますが、実際には機能しません。私が実際に試して検証した例をいくつか紹介します。
Qemuを使ったディスク縮小の落とし穴
一部のサイトでは、qemuツールを使った操作が紹介されています。以下のコマンドで仮想マシンのディスク領域を縮小できるとされています。
qemu-img resize /path_to_disk -5G:ディスク領域を5GB縮小
または、特定の仮想ディスクサイズを直接指定する方法です。
qemu-img resize /path_to_disk 25G:ディスクサイズを25GBに設定
このコマンドを実行するとどうなるでしょうか? サーバーを起動すると、システムが起動しなくなります。
Unable to verify superblock, continuing... Sorry, could not find valid secondary superblock. Exiting now.

まずfdiskでシステム内のディスクサイズを縮小してから試しましたが、物理サーバー側のディスク縮小をスキップしても同様に起動しませんでした。これは理にかなっています。縮小しようとしているのはシステムパーティションであり、サイズ縮小の過程でパーティション内のデータが破壊されるため、OSが起動できなくなるのです。
イメージ置換による仮想ディスクの縮小
これらのガイドであまり一般的ではないもう一つの方法が、ディスク置換による縮小です。必要なディスクサイズで新しい仮想マシンを作成し、新しいディスクイメージを古いものと入れ替えるという手法で、複数の情報源ではこれでうまくいくとされています。しかし私が検証したところ、前述の方法と同じくファイルシステムが破損して使用不能になりました。コマンドの例は以下の通りです。
virt-resize /old_disk_image /new_disk_image
また、rawからqcow2形式へのディスク変換を利用する方法もありましたが、私は最初からこの形式で仮想マシンを作成しています。その理由を次に説明します。
KVMのディスクフォーマットとQCOW2ディスクの圧縮
冒頭でrawとqcowという2つのディスクフォーマットに触れました。
Rawの利点は、最大のパフォーマンスと汎用性です。しかし多くの欠点があり、主なものは以下の通りです。
- 仮想ディスクファイルが、物理サーバー上で割り当てられた全領域を占有してしまう
- スナップショットを取得できない
Qcow2はQEMUおよびQEMU-KVMハイパーバイザーのネイティブフォーマットであり、KVMでサポートされている他のすべてのフォーマットの中で最も便利な仮想ディスク形式です。ディスクイメージは仮想マシン内のデータ量に応じて増加し、スナップショットにも対応しています。
qcow2の利点とは何でしょうか? 仮想ディスクは必要な分だけサーバーストレージを占有するため、ディスクサイズを縮小する必要が基本的にはありません。ただし、サーバー上でデータが繰り返し上書きされ、ディスクが肥大化してしまった場合は、簡単に圧縮できます。この方法を見てみましょう。まず仮想ディスク内にゼロデータで領域を埋め、その後ファイルを削除します。
dd if=/dev/zero of=/mytempfile
rm -rf /mytempfile

サーバー側から確認すると、以前はディスクイメージのサイズが2.4GBだったものが、5.9GBに膨らんでいます。
# du -sh /image_path
2.4G *****
# du -sh /image_path
5.9G *****
つまり、仮想マシンからデータを削除しても、仮想ディスクのサイズは自動的には縮まないということです。仮想ディスクファイルを実サイズに戻すために、私は以下の方法を使用しています。
仮想ディスクファイルをバックアップし、仮想マシンを停止してから、以下の手順を実行します。
qemu-img convert -O qcow2 /old_image /new_image
その後、両ディスクのサイズを比較してみます。
# du -sh /new_disk
1.6G /****
# du -sh /old_disk
5.8G /****
ご覧の通り、圧縮後のディスクサイズは1.6GBです。新しいディスクイメージファイルを任意の名前に変更し、仮想マシンを起動します。
# df -h
Filesystem Size Used Avail Use% Mounted on devtmpfs 485M 0 485M 0% /dev tmpfs 496M 0 496M 0% /dev/shm tmpfs 496M 6.6M 489M 2% /run tmpfs 496M 0 496M 0% /sys/fs/cgroup /dev/vda2 25G 1.3G 24G 6% / /dev/vda1 488M 100M 353M 23% /boot tmpfs 100M 0 100M 0% /run/user/0
この方法は確実に機能します。使用している限り、仮想マシン内のファイルシステムが破損したケースは一度もありません。ただし、いかなる場合もデータ損失を防ぐため、作業前に必ずディスクのバックアップを取得することを強くお勧めします。
以上が本記事でお伝えしたかった内容です。もしKVMのディスクサイズを縮小する(圧縮以外の)本当に有効な方法をご存知の方がいれば、ぜひコメントで共有してください。実際にテストしてみます。
-
vSphere Hypervisor ESXi 6.7で仮想マシンを作成する方法【初心者向け完全ガイド】
vSphere Hypervisor(ESXi)のインストールが完了したら、次に行うべき最も重要なタスクのひとつが、仮想環境に必要な仮想マシン(VM)の作成です。この作業は、「新規仮想マシンの作成/登録」ウィザードを使用して行います。ウィザードは、ESXiホストクライアントから起動する方法と、Windows版vCenter Serverから起動する方法の2通りがあります。 どちらの方法でも仮想マシン作成時の選択肢はほぼ同じですが、Windows版vCenter Serverには時間を節約でき、デプロイ作業を管理しやすくスケーラブルにしてくれる追加機能がいくつか用意されています。 ESXiとvC
-
物理マシンを VirtualBox 仮想マシンに変換する完全ガイド
物理マシン(実機)を VirtualBox で動作させられる仮想マシンに変換したい場合は、この記事の手順に従ってください。 古いパソコンに入っているプログラムやファイルを残しておきたい場面は少なくありません。そのような場合、古いパソコンをそのまま保管し続けるか(ハードウェアに問題がない場合)、あるいは物理マシンを仮想マシンへ変換して VirtualBox で開けるようにするという選択肢があります。 本チュートリアルでは、物理的な Windows XP マシンを VirtualBox マシンに変換する方法を解説します。同じ手順は、Windows 7、8、10 が動作している物理マシンの変換にもそ