- AWS EC2にあるFreeBSD12.2のノードでディスク領域が足りなくなってきたので拡張した。
- EBS gp2 10GB -> 20GB
- その手順を自分のために覚え書く。
- といっても、serverfaultでのありがたい教えに従っただけなので、そちらを見るほうが正しい。
-
10GBの/ (root)が一個だけあって、他には/bootだけという男前なパーティショニング。
-
AWS Consoleから闇雲にディスクのサイズ拡大をしてノードをrebootしてみたが、当然それだけで完了するほど世の中は甘くない。
-
ada0の(AWS EBS的)ボリュームは20GBになったようだが、gptは追随していないどころかCORRUPTとか言っているし、UFS的に見ても拡張されてはいない。
# gpart show
=> 3 20971509 ada0 GPT (20G) [CORRUPT] 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G)
```shell
# df -m
Filesystem 1M-blocks Used Avail Capacity Mounted on
/dev/gpt/rootfs 9905 8496 616 93% /
devfs 0 0 0 100% /dev
-
gptをrecoverしてみたら、CORRUPTとは言われなくなったが空き領域が10GB分できただけでdfから見ると何も変わっていない。
# gpart recover ada0 ada0 recovered # gpart show => 3 41943029 ada0 GPT (20G) 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G) 20971512 20971520 - free - (10G)
-
ここで慌てて情報を探して上にも書いたserverfaultでのありがたい教えを発見。これに従うことにする。
-
AWS Consoleから、現ボリューム(上のada0)のスナップショットを作成
-
そのスナップショットを元に新ボリュームを作成
-
ノードをshutdown
-
現ボリュームはそのままでノードに新ボリュームをアタッチする。新ボリュームはAWS Consoleでは/dev/sdfとしてアタッチすることに。
-
ノードを開始してログイン
-
FreeBSDから見ると、現ボリューム(一本目のディスクなのでada0として認識)に加えて、新ボリュームをxbd5として認識している。
# gpart show => 3 41943029 ada0 GPT (20G) 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G) 20971512 20971520 - free - (10G) => 3 20971509 xbd5 GPT (20G) [CORRUPT] 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G)
-
スナップショットを撮ったタイミングの関係でCORRUPT状態なので回復させる。
# gpart recover xbd5 xbd5 recovered # gpart show => 3 41943029 ada0 GPT (20G) 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G) 20971512 20971520 - free - (10G) => 3 41943029 xbd5 GPT (20G) 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G) 20971512 20971520 - free - (10G)
-
ada0はこのままにしておいてxbd5側を変更することで、最悪の場合でもada0が残るように作業する。
-
xbd5の2番スライス(上ではfreebsd-ufsタイプのxbd5p2)をgpart的に20GBに拡張する。サイズが大きすぎたので少し小さくして二度目の試みで成功。
# gpart resize -i 2 -s 20G xbd5 gpart: size '41943040': Invalid argument # gpart resize -i 2 -s 20400M xbd5 xbd5p2 resized [root@DaSeinRed0 moto]# gpart show => 3 41943029 ada0 GPT (20G) 3 116 1 freebsd-boot (58K) 119 20971393 2 freebsd-ufs (10G) 20971512 20971520 - free - (10G) => 3 41943029 xbd5 GPT (20G) 3 116 1 freebsd-boot (58K) 119 41779200 2 freebsd-ufs (20G) 41779319 163713 - free - (80M)
-
新ボリューム(xbd5)の2番スライス(xbd5p2)をUFS的に拡張。
# growfs xbd5p2 It's strongly recommended to make a backup before growing the file system. OK to grow filesystem on /dev/xbd5p2 from 10GB to 20GB? [yes/no] yes super-block backups (for fsck_ffs -b #) at: 21798272, 23080512, 24362752, 25644992, 26927232, 28209472, 29491712, 30773952, 32056192, 33338432, 34620672, 35902912, 37185152, 38467392, 39749632, 41031872
-
拡張したxbd5p2を確認。しめしめ。
# mount -r /dev/xbd5p2 /mnt # df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/gpt/rootfs 9905 8496 616 93% / devfs 0 0 0 100% /dev /dev/xbd5p2 19751 8496 9674 47% /mnt # umount /mnt
- ここで、ノードをshutdownして、AWS Consoleで現ボリューム(上でada0としてみえているもの)をデタッチし、新ボリューム(同、xbd5)を一本目のディスクとしてアタッチする。
- 普通に新ボリュームをアタッチしに行くと/dev/sdfにアタッチすることになるので、ここで/dev/ada0を指定しなければならない。
- ノードを開始して確認作業へ。
-
GPT的には先程と同じく拡張済の状態。
# gpart show => 3 41943029 ada0 GPT (20G) 3 116 1 freebsd-boot (58K) 119 41779200 2 freebsd-ufs (20G) 41779319 163713 - free - (80M)
-
UFS的にも拡張されたことを確認。(さっきxbd5p2をマウントして見てたけどね)
# df -m Filesystem 1M-blocks Used Avail Capacity Mounted on /dev/gpt/rootfs 19751 8496 9674 47% / devfs 0 0 0 100% /dev
-
これで作業完了。
-
(2021/Jan/29頃書いた)