この記事で設定したpool01は1つのパーティションをNFSで共有していて、プライマリストレージとセカンダリストレージを1つのパーティションで設定していました。
この影響で、CloudStack側から見た時に
- プライマリ: 11T
- セカンダリ: 11T
で、合計22T使える様に見えてしまっていました。
これを解消するためにパーティションを分割して、
- プライマリ: 9T
- セカンダリ: 2T
に設定しました。
一歩間違うとデータを損失する作業なので、バックアップは確実にとっておいた方がいいです。
現状確認
まずは現状確認。pool01のマウントポイントとデバイスを確認します。
$ df -h
Filesystem Size Used Avail Use% Mounted on tmpfs 4.7G 1.9M 4.7G 1% /run /dev/mapper/vg0-lv--0 251G 25G 214G 11% / tmpfs 24G 0 24G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 24G 0 24G 0% /run/qemu /dev/mapper/vg0-lv--1 615G 203G 382G 35% /mnt/pool00 /dev/sda2 2.0G 251M 1.6G 14% /boot /dev/mapper/vg01-lv01--00 11T 4.0T 6.5T 38% /mnt/pool01 tmpfs 4.7G 4.0K 4.7G 1% /run/user/1000
/mnt/pool01 にマウントしているデバイスは /dev/mapper/vg01-lv01–00 だということがわかります。
このパーティションはLVMの論理ボリュームなのでもう少し詳細を確認。
デバイス名に含まれているとおり論理グループの名前は vg01 なので、下記コマンドで詳細情報を確認します。
$ sudo lvdisplay vg01
--- Logical volume --- LV Path /dev/vg01/lv01-00 LV Name lv01-00 VG Name vg01 LV UUID 5VZ1pI-uYo5-zwqb-u9mF-XWNk-HTQk-5rUpJN LV Write Access read/write LV Creation host, time whale, 2023-05-02 09:43:55 +0900 LV Status available # open 1 LV Size <10.92 TiB Current LE 2337229 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 4096 Block device 253:2
今回はプライマリストレージの使用容量が圧倒的に大きかったので、lv01-00をプライマリストレージ用のパーティションとして使用します。この領域の容量を縮小して空き領域を作成し、空き領域に新しい論理ボリュームを作成してプライマリストレージ用のパーティションを作成します。
準備
論理ボリュームとファイルシステムのサイズ変更はマウントされていない必要がありますが、CloudStackが動作している環境ではアンマウントできません。
一旦CloudStack上で動いているインスタンス(仮想環境)と各種CloudStackのサービスを停止する必要があります。
インスタンスはWebの管理画面からすべてシャットダウンし、停止していることを確認してから各種サービスを停止しました。
$ sudo systemctl stop cloudstack-agent
$ sudo systemctl stop cloudstack-usage
$ sudo systemctl stop cloudstack-management
$ sudo systemctl stop qemu-kvm.service
$ sudo systemctl stop nfs*
この状態でもumount失敗したので、一度シングルユーザモードにランレベルを変更しました。
$ sudo init 1
ランレベルを変更後、下のコマンドで無事アンマウントできました。
$ sudo umount /mnt/pool01
論理ボリュームを縮小して空き領域を確保
まずは現状確認で調べた論理ボリュームの情報から「LV PATH」を使って論理ボリュームサイズを縮小します。
このコマンドはfsck.ext4が失敗するような状態だとうまくいかないので、事前にfsckを試してみて正常終了することを確認しておくと安心かもしれません。
$ sudo lvreduce --resizefs -L -2T /dev/vg01/lv01-00
このコマンドでlv01-00上にあるファイルシステム(ext4)と論理ボリュームサイズを2TiB分縮小します。
–resizefs オプションをつけることで論理ボリュームサイズ変更の前に自動的にファイルシステムを縮小してくれるようです。オプションをつけ忘れるとファイルシステムが破損する可能性があるので注意が必要です。
結構危険な操作なので慎重に操作する必要ありですね。RedHatのこのページを参考にしました。
領域サイズが大きいからか、lvreduceの処理は15分くらい?かかりました。
lvdisplayで変更後の容量を見てみると、10.92TiBから8.92TiB (-2TiB)に変更できていました。
$ sudo lvdisplay vg01
--- Logical volume --- LV Path /dev/vg01/lv01-00 LV Name lv01-00 VG Name vg01 LV UUID 5VZ1pI-uYo5-zwqb-u9mF-XWNk-HTQk-5rUpJN LV Write Access read/write LV Creation host, time whale, 2023-05-02 09:43:55 +0900 LV Status available # open 1 LV Size <8.92 TiB Current LE 2337229 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 4096 Block device 253:2
ext4のサイズも変更されているはずなので、このままマウントできますがマウントする前にfstabの設定を変えておきます。
$ sudo vi /etc/fstab
/mnt/pool01 にマウントしている所を、
/dev/disk/by-uuid/58d3105b-7d24-4ff6-b99e-f4c4b0698d92 /mnt/pool01 ext4 defaults 0 1
/mnt/pool01/primary にマウントするように変更します。
/dev/disk/by-uuid/58d3105b-7d24-4ff6-b99e-f4c4b0698d92 /mnt/pool01/primary ext4 defaults 0 1
保存したらマウントポイントを作成してマウントします。
$ sudo mkdir -p /mnt/pool01/primary /mnt/pool01/secondary
$ sudo mount /mnt/pool01/primary
うまくいったらこんな感じになるはずです。
$ df -h
Filesystem Size Used Avail Use% Mounted on tmpfs 4.7G 2.5M 4.7G 1% /run /dev/mapper/vg0-lv--0 251G 25G 214G 11% / tmpfs 24G 0 24G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 24G 0 24G 0% /run/qemu /dev/sda2 2.0G 251M 1.6G 14% /boot /dev/mapper/vg0-lv--1 615G 203G 382G 35% /mnt/pool00 /dev/mapper/vg01-lv01--00 9.0T 3.9T 4.6T 46% /mnt/pool01/primary
セカンダリストレージ用の領域用の論理ボリュームを追加
次はセカンダリストレージ用の論理ボリュームとファイルシステムを作成します。
論理ボリュームの名前はlv01-01とします。
$ sudo lvcreate --name lv01-01 --size 2T vg01
これで論理ボリュームは作成完了です。
ファイルシステムを作成するために必要なので、論理ボリュームのLV PATHを確認しておきます。
$ sudo lvdisplay vg01
--- Logical volume --- LV Path /dev/vg01/lv01-01 LV Name lv01-01 VG Name vg01 LV UUID o8MUt1-Es25-Vccb-VN1i-5QMU-dnQL-8rNSYu LV Write Access read/write LV Creation host, time whale, 2024-02-12 01:23:33 +0900 LV Status available # open 1 LV Size 2.00 TiB Current LE 524288 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 4096 Block device 253:3
lvcreateはファイルシステムを同時に作成しないので、ext4のファイルシステムを作成します。(予約領域は0としました)
$ sudo mkfs.ext4 -m 0 /dev/vg01/lv01-01
コマンド実行後に表示されるUUIDでfstabに登録します。
$ sudo vi /etc/fstab
/dev/disk/by-uuid/50e45a62-d2c4-4ec1-a508-0e6c5c6ce72d /mnt/pool01/secondary ext4 defaults 0 1
fstab編集後、マウントしてパーミッションも調整します。
セカンダリは少し特殊なパーミッションで drwxrwxrwt です。
$ sudo mount /mnt/pool01/secondary
$ sudo chmod 777 /mnt/pool01/secondary
$ sudo chmod o+t /mnt/pool01/secondary
データを移動
プライマリ / セカンダリストレージの各データを適切な場所に移動します。
$ sudo mv /mnt/pool01/primary/secondary/* /mnt/pool01/secondary
$ sudo mv /mnt/pool01/primary/primary/* /mnt/pool01/primary
$ sudo rmdir /mnt/pool01/primary/primary/
$ sudo rmdir /mnt/pool01/primary/secondary/
不要なディレクトリも削除しておきます。
適切にデータが移動されているか、各ディレクトリの内容と df -h で容量も確認しておくといいです。
$ df -h
Filesystem Size Used Avail Use% Mounted on tmpfs 4.7G 2.5M 4.7G 1% /run /dev/mapper/vg0-lv--0 251G 25G 214G 11% / tmpfs 24G 0 24G 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 24G 0 24G 0% /run/qemu /dev/sda2 2.0G 251M 1.6G 14% /boot /dev/mapper/vg0-lv--1 615G 203G 382G 35% /mnt/pool00 /dev/mapper/vg01-lv01--01 2.0T 34G 2.0T 2% /mnt/pool01/secondary /dev/mapper/vg01-lv01--00 9.0T 3.9T 4.6T 46% /mnt/pool01/primary
NFSサーバーの設定変更
最後に、NFSとして公開するディレクトリの設定を変更するためにexportsファイルを編集します。
/etc/exportsの /mnt/pool01 の行をに下記変更します。
/mnt/pool01/primary *(rw,async,no_root_squash,no_subtree_check) /mnt/pool01/secondary *(rw,async,no_root_squash,no_subtree_check)
保存後できたらNFS設定読み込みなおします。
これで一通り設定変更終了!
システム再起動
今回はランレベルを1に変更しているので、念のためOSを再起動しました。
$ sudo reboot
再起動後、ブラウザから接続確認。
プライマリストレージのStatusがUPになっていて、
システムVMのsecondarystoragevmが正しく起動できてればOK
無事にストレージサイズが正しく見えるようになりました!
(隣のPrimary storageが2倍に見えているのはとりあえず気にしないようにしよう…)
今の環境、システムの終了にすごい時間(20分くらい)かかるんだよね。
多分Qemuの終了に時間がかかっているようなんだけど、こんなもんなのかな…
あと、CloudStack 4.19.0.0がリリースされているようです。近いうちにうちの環境もアップデートしたい。
https://cloudstack.apache.org/downloads/