はじめに
KVM上のVPSでストレージが足りなくなってしまった事は皆さん経験があると思いますので今回はVPSのストレージ拡張方法を簡潔にまとめてみました。
イメージサイズの変更
まずはVPSが動いている物理サーバー上でイメージサイズを変更しますが、その前に現在の状況を確認してみます。
注)qem-img info はVPS停止中でないと見る事ができません。CentOS7までは稼働中でも見る事が出来ましたが
# qemu-img info dev999.img
image: dev999.img
file format: qcow2
virtual size: 30G (32212254720 bytes)
disk size: 3.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
virtual size が割り当てているサイズになります。disk size は実際に使っているサイズです。今回は解説用ですので使用しているサイズは小さくなっています。
では実際に10GBほど拡張して確認してみましょう。
# qemu-img resize dev999.img +10G
Image resized.
# qemu-img info dev999.img
image: dev999.img
file format: qcow2
virtual size: 40G (42949672960 bytes)
disk size: 3.2G
cluster_size: 65536
Format specific information:
compat: 1.1
lazy refcounts: false
使うコマンドは qemu-img で info で確認、resize で拡張する事ができます。一応縮小もできますが、操作前に減らす分のパーティションを縮小させたり、ファイルシステムを小さくしておく必要があります。ただ、xfs はファイルサイズを小さく出来ませんので、実質小さくすることは出来ないと考えておいた方が良いかもしれません。
操作についてはVPSを停止後に行って下さい。拡張を反映させる為には、VPSの完全停止が必要になります。OSの再起動(reboot)では反映されません。
という事で、拡張が終わったらVPSを起動します。
パーティションの拡張
OSが起動したらpartedコマンドでディスクを拡張しますが、その前に各ファイルシステムの状況を確認しておきます。
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 882M 0 882M 0% /dev/shm
tmpfs 353M 4.9M 348M 2% /run
/dev/mapper/main-root 25G 1.9G 24G 8% /
/dev/vda1 1014M 256M 759M 26% /boot
root パーティションが現在25GBとなっています。
次にpartedで拡張していきますが、print free で見割当ての状況が確認できます。
# parted /dev/vda print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1049kB 1048kB Free Space
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 32.2GB 31.1GB primary lvm
32.2GB 42.9GB 10.7GB Free Space
10GB程のフリースペースが確認できますのでフリースペース全てを Number 2 のパーティションに割り当ててみます。
# parted /dev/vda
GNU Parted 3.5
Using /dev/vda
Welcome to GNU Parted! Type 'help' to view a list of commands.
(parted) resizepart 2 100%
(parted) print free
Model: Virtio Block Device (virtblk)
Disk /dev/vda: 42.9GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1024B 1049kB 1048kB Free Space
1 1049kB 1075MB 1074MB primary xfs boot
2 1075MB 42.9GB 41.9GB primary lvm
(parted) quit
resizepart (パーティション番号) を指定し、100%はフリースペース全てになります。また parted コマンド内で print free で確認する事ができます。
LVMを拡張
ようやくLVMの拡張です。拡張するには pvresize コマンドを使いますが、まずは現状を確認してみましょう。
# pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name main
PV Size <29.00 GiB / not usable 3.00 MiB
Allocatable yes (but full)
PE Size 4.00 MiB
Total PE 7423
Free PE 0
Allocated PE 7423
PV UUID NQIGxz-UORq-3HMz-DsKo-2wbK-y77w-0ljzZr
何もしていない状態だと Free PE は 0 で未割当てはありませんので、pvresize で拡張します。
# pvresize /dev/vda2
Physical volume "/dev/vda2" changed
1 physical volume(s) resized or updated / 0 physical volume(s) not resized
# pvdisplay
--- Physical volume ---
PV Name /dev/vda2
VG Name main
PV Size <39.00 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 4.00 MiB
Total PE 9983
Free PE 2560
Allocated PE 7423
PV UUID NQIGxz-UORq-3HMz-DsKo-2wbK-y77w-0ljzZr
空きが増えた事が確認できましたので、root 領域に割り当てます。
# lvextend -l +100%FREE /dev/main/root
Size of logical volume main/root changed from <25.00 GiB (6399 extents) to <35.00 GiB (8959 extents).
Logical volume main/root successfully resized.
+100%FREE で空き領域全てを割り当てる事ができます。
これでパーティションとしては空きが増えていますが、ファイルシステム上からはまだ大きくはなっていませんので、ファイルシステムをリサイズします。これは使っているファイルシステムの種類によってコマンドが違いますが、ext4 なら resize2fs、xfs なら xfs_growfs を使います。RedHat EL7 以降は xfs が標準のファイルシステムになっていますので、今回は xfs_growfs を使います。
# xfs_growfs /dev/main/root
meta-data=/dev/mapper/main-root isize=512 agcount=4, agsize=1638144 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=6552576, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=3199, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 6552576 to 9174016
では実際に大きくなっているかの確認です。
# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 882M 0 882M 0% /dev/shm
tmpfs 353M 4.9M 348M 2% /run
/dev/mapper/main-root 35G 2.0G 34G 6% /
/dev/vda1 1014M 256M 759M 26% /boot
ページの最初の方に戻って頂き、作業前が 25GB で作業後は 35GB と大きくなったことが確認できます。
最後に
どうしてもVPSの完全停止が必要になりますが、停止⇒拡張⇒起動くらいなら数分の停止に留める事ができるのではないでしょうか。