ConohaでレンタルしているVPSが昨年新プランを追加しました。メモリ1Gのプランのディスク容量が50GBから100GBにアップし、料金はほぼ据え置きというか少し安い上、VPS割引き切符というプリペイドシステムで長期契約時の割引きが受けられるようになりました。とりあえずディスクが倍増するだけでも移行しない手はないのですが、今のVPSをイメージ保存して新プランのVPSに引き継いだ場合、ディスク(パーティション)拡張は自分でやる必要があること、IPアドレスが変わるなどがあり保留にしていました。が、ここにきてディスク残量が心許なくなってきたので、追加ディスクを契約するくらいならばと、新プラン移行を断行しました。
■移行自体は簡単
さすがVPSです。一定時間サーバーが停止していいなら超簡単。サーバーを停止し、イメージ保存。新サーバーを作成する時にそのイメージを読み込むだけです。CentOSベースのKUSANAGIイメージですが、IPアドレスやゲートウェイ、DNSなども新しいものに変更されていました。あとはドメインレコードを新IPアドレスに書き換えるだけです。
よりドメインレコード情報の反映を早めたいならば、数日前からTTLを1分とか短い値にしておくと良いでしょう。そのレコードの有効期間が短くなるので、世界中の端末やルーターに古いアドレスのレコードが残りにくくなります。その後で、新IPに変更し問題なければTTLを長いものに戻しておく、という流れです。
当たり前といえば当たり前なんですが、これだけの作業で新プランへの移行自体は完了。
せっかく新プランにするので VPS割引き切符を最大活用すべく3年分購入。しかし9/30までのキャンペーンで25%割引きと出ているのに、なぜかログインして買おうとすると10%にしかならないのが謎。そこで行ったり来たりしてるので一番時間食いましたw。結局諦めて10%で妥協。
旧サーバーシャットダウン後のイメージ作成がちゃんと測ってないけど10-15分くらいかかったかな?その後で切符を決済して新サーバーをイメージから生成するのはもう少し速かったような。クーポンのことを考えなければ30分くらいで移行できた気がします。
■ディスクを拡張する
さて、これでもらえるディスクは50GBから100GBに倍増しましたが、OSが認識しているパーティションは元のままなので、手動で追加しなければなりません。これは最初のサーバー作成時に選んだOSイメージによってパーティション構成が大きくことなるので、自分とドンピシャの構成の先行例が見つけられませんでした。そもそも追加ディスクを契約した場合はOSから別ドライブとして見えるはずなんですが、今回のパターンだとドライブ数は同じで空き領域が増えている、という感じなんでちょっと違います。2017年頃にCentOS7ベースのKUSANAGIイメージをから作成した(と記憶している)ウチのサーバーはLVM構成でした。fdiskで/dev/vdaをpした様子はこんな感じ。
1 2 3 4 5 6 7 8 9 10 |
Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000cf972 Device Boot Start End Blocks Id System /dev/vda1 * 2048 1026047 512000 83 Linux /dev/vda2 1026048 104857599 51915776 8e Linux LVM |
これは新プラン移行後なので、赤字部分で容量が100GBになっていることがわかります。一方、LVM領域である/dev/vda2はBlocksをみると50GBのままです。つまり、104857600以降に追加された50GB分の空き領域ができているということです。LVMなので、この/dev/vda2上に作られる仮想ブロックPV(の一部)を使って、仮想パーティション/dev/mapper/centos_h16_rootが作られているわけです。dfするとこう見えています。
1 2 3 4 5 6 7 8 9 |
# df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 495520 0 495520 0% /dev tmpfs 507320 0 507320 0% /dev/shm tmpfs 507320 13220 494100 3% /run tmpfs 507320 0 507320 0% /sys/fs/cgroup /dev/mapper/centos_h16-root 47781076 37715192 10065884 79% / /dev/vda1 508588 286260 222328 57% /boot tmpfs 101468 0 101468 0% /run/user/1003 |
気持ち的には、/dev/vda2を拡張した上でPVを増やして/dev/mapper/centos_h16_rootに組み込んでやれるとスッキリですが、既存パーティションを迂闊にいじるのは恐いので、/dev/vda3を追加作成して、そこのPVを作ることにします。これならばサーバーを稼働したままでも大丈夫(なはず)。
物理パーティションを作成
再び、fdisk /dev/vdaして、n(=new)コマンドで作成します。ブロックはデフォルトの開始と終了値をリターンで選んでいけば最大容量になるはず。次にt(=type)コマンドで8eのLinux LVMをセット。もういちどp(preview?print?)でこんな感じになってればOK。
1 2 3 4 5 6 7 8 9 10 11 |
Disk /dev/vda: 107.4 GB, 107374182400 bytes, 209715200 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x000cf972 Device Boot Start End Blocks Id System /dev/vda1 * 2048 1026047 512000 83 Linux /dev/vda2 1026048 104857599 51915776 8e Linux LVM /dev/vda3 104857600 209715199 52428800 8e Linux LVM |
w(write)コマンドで書き込んで、rebootで反映されます。
追加したパーティション上にPVを作成
追加50GB領域に作成したパーティション/dev/vda3にPVを作成します。
1 2 3 4 5 6 7 8 9 10 11 |
# pvs (追加前) PV VG Fmt Attr PSize PFree /dev/vda2 centos_h16 lvm2 a-- <49.51g 44.00m # pvcreate /dev/vda3 Physical volume "/dev/vda3" successfully created. # pvs (追加後) PV VG Fmt Attr PSize PFree /dev/vda2 centos_h16 lvm2 a-- <49.51g 44.00m /dev/vda3 lvm2 --- 50.00g 50.00g |
pvcreateコマンドの前後でpvsをしてPVが増えていることが確認できました。
既存のVolumeGroup(VG)にPVを追加する
vgdisplayコマンドでVG名が「centos_h16」であることと、Free PE/Sizeがほぼ残っていないことを確認後、 「vgextend centos_h16 /dev/vda3」で先ほど作った/dev/vda3上のPVをVG「centos_h16」に追加します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# vgdisplay --- Volume group --- VG Name centos_h16 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 5 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <49.51 GiB PE Size 4.00 MiB Total PE 12674 Alloc PE / Size 12663 / 49.46 GiB Free PE / Size 11 / 44.00 MiB VG UUID cxVwji-5jte-1Z9L-e7kl-GSEL-KCB9-XxXxXx # vgextend centos_h16 /dev/vda3 Volume group "centos_h16" successfully extended # vgdisplay --- Volume group --- VG Name centos_h16 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 99.50 GiB PE Size 4.00 MiB Total PE 25473 Alloc PE / Size 12663 / 49.46 GiB Free PE / Size 12810 / <50.04 GiB VG UUID cxVwji-5jte-1Z9L-e7kl-GSEL-KCB9-XxXxXx |
これでFree PE/Sizeが増えました。空きPEが12810個、容量で50.04GiB分が未アサイン状態ということです。
vgdisplayコマンドで現状を確認します。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
# vgdisplay -v centos_h16 --- Volume group --- VG Name centos_h16 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 99.50 GiB PE Size 4.00 MiB Total PE 25473 Alloc PE / Size 12663 / 49.46 GiB Free PE / Size 12810 / <50.04 GiB VG UUID cxVwji-5jte-1Z9L-e7kl-GSEL-KCB9-XxXxXx --- Logical volume --- LV Path /dev/centos_h16/swap LV Name swap VG Name centos_h16 LV UUID k5N0FA-RGHZ-TdoC-d4d7-OLXp-xc3e-XxXxXx LV Write Access read/write LV Creation host, time h15.125.16.172.lan, 2015-10-10 01:32:50 +0900 LV Status available # open 2 LV Size <3.88 GiB Current LE 992 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:1 --- Logical volume --- LV Path /dev/centos_h16/root LV Name root VG Name centos_h16 LV UUID Tpx6YH-dSyb-uGtL-csFs-wXPi-3bWB-XxXxXx LV Write Access read/write LV Creation host, time h15.125.16.172.lan, 2015-10-10 01:32:50 +0900 LV Status available # open 1 LV Size <45.59 GiB Current LE 11671 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 8192 Block device 253:0 --- Physical volumes --- PV Name /dev/vda2 PV UUID 8s6y0i-T0PO-Km7a-Zq5O-2fbF-oNIv-XxXxXx PV Status allocatable Total PE / Free PE 12674 / 11 PV Name /dev/vda3 PV UUID ULxhBB-wnC7-5cp6-2UPM-qpGp-drZX-XxXxXx PV Status allocatable Total PE / Free PE 12799 / 12799 |
物理ストレージとLVM仮想ストレージが多段化されていてとてもややこしいですが、
- centos_h16という100GBのVolume Groupがあり、50GB(12799ブロック)のFree PEが残っている
- centos_h16の中に、/dev/centos_h16/swapと/dev/cetnos_h16/rootという2つの論理ボリューム(LV)が存在する。今回拡張したいのは後者。
- それはそうと/dev/vda2と/dev/vda3という2つの物理ボリューム(PV)がある。
ということがわかります。追加50GBで作ったのが/dev/vda3ですがすでにVG「centos_h16」に追加済みなので、物理レイヤーのことはもう忘れてOKです。残るは、VG内のフリーの50GBをLV「/dev/centos_h16/root」に割り当ててやり、同パーティションを領域一杯に広げてやるという2ステップです。
特定のLVに空きPEを割り当てる
Free PEをありったけ指定のLVにアサインするのはこんな感じ。
1 2 3 |
# lvextend -l +100%FREE /dev/centos_h16/root Size of logical volume centos_h16/root changed from <45.59 GiB (11671 extents) to <95.63 GiB (24481 extents). Logical volume centos_h16/root successfully resized. |
念のためもう一度vgdisplayしてみると、Free PEが0/0になっています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# vgdisplay --- Volume group --- VG Name centos_h16 System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 8 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 2 Act PV 2 VG Size 99.50 GiB PE Size 4.00 MiB Total PE 25473 Alloc PE / Size 25473 / 99.50 GiB Free PE / Size 0 / 0 VG UUID cxVwji-5jte-1Z9L-e7kl-GSEL-KCB9-XxXxXx |
パーティションを拡張する
いよいよ大詰め。/dev/centos_h16/rootのファイルシステムを確認します。XFSとext3/4では拡張に使うコマンドが違うからです。
1 2 3 4 5 6 7 8 9 |
# df -T Filesystem Type 1K-blocks Used Available Use% Mounted on devtmpfs devtmpfs 495520 0 495520 0% /dev tmpfs tmpfs 507320 0 507320 0% /dev/shm tmpfs tmpfs 507320 19556 487764 4% /run tmpfs tmpfs 507320 0 507320 0% /sys/fs/cgroup /dev/mapper/centos_h16-root xfs 47781076 37717220 10063856 79% / /dev/vda1 xfs 508588 286260 222328 57% /boot tmpfs tmpfs 101468 0 101468 0% /run/user/1003 |
XFSでした(ここの/dev/mapper/centos_h16-rootは/dev/centos_h16/rootと同じと考えてOKです)。なので、拡張にはxfs_growfsコマンドを使えばよさそう(ext3/4ならresizefsかな?)。-Dオプションでサイズを指定しない場合は可能な最大サイズを使い切ってくれます。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# xfs_growfs /dev/centos_h16/root meta-data=/dev/mapper/centos_h16-root isize=256 agcount=4, agsize=2987776 blks = sectsz=512 attr=2, projid32bit=1 = crc=0 finobt=0 spinodes=0 data = bsize=4096 blocks=11951104, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0 ftype=0 log =internal bsize=4096 blocks=5835, version=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 11951104 to 25068544 # df Filesystem 1K-blocks Used Available Use% Mounted on devtmpfs 495520 0 495520 0% /dev tmpfs 507320 0 507320 0% /dev/shm tmpfs 507320 19556 487764 4% /run tmpfs 507320 0 507320 0% /sys/fs/cgroup /dev/mapper/centos_h16-root 100250836 37717896 62532940 38% / /dev/vda1 508588 286260 222328 57% /boot tmpfs 101468 0 101468 0% /run/user/1003 |
何分かかかるかと思いきや一瞬で終わりました。dfコマンドでみると使用率が79%だったのが38%に激減しています。特に指示は出てないですが気分的に再起動しておきました。
■まとめ
何年かぶりにLVMをいじってドキドキしましたが、まぁ最悪イメージが残っているので失敗したらVPSをもうひとつ作り直せばいいやってことで思い切ることができました。VPSはこういう時ほんと楽ですね。
とりあえず追加料金不要でストレージが倍になりました。それどころかプリペイドシステムの 「VPS割引き切符 」で安くなったくらいです。一挙に3年分前払いしてしまったので、このままあと3年はトラブルなく稼働してほしいものです。