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した様子はこんな感じ。
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するとこう見えています。
# 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。
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を作成します。
# pvs (追加前)
PV VG Fmt Attr PSize PFree
/ dev / vda2 centos_h16 lvm2 a -- & lt ; 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 -- & lt ; 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 & lt ; 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 / & lt ; 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 / & lt ; 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 & lt ; 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 & lt ; 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にアサインするのはこんな感じ。
# lvextend -l +100%FREE /dev/centos_h16/root
Size of logical volume centos_h16 / root changed from & lt ; 45.59 GiB ( 11671 extents ) to & lt ; 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では拡張に使うコマンドが違うからです。
# 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年はトラブルなく稼働してほしいものです。