KVM 上の FreeBSD ゲストで pkg upgrade コマンド実行時に zfs ファイルシステムに十分な空き領域がないとの警告が出て、あわてて以前調べた手順でディスクを拡張した時のメモです。
環境
環境は、以前から使用している Debian/GNU Linux の KVM ゲストとして ZFS をルートファイルシステムとした FreeBSD 11.0 です。
この時から少し構成が変わりましたが、まだディスクフルにはなっていないので淡々と拡張した記録です。- KVM ゲストのディスクデバイスは qemu ファイルではなく LVM
- FreeBSD のバージョンは 10.0 から 11.0 にアップグレード
パッケージアップグレード時の警告
pkg upgrade を実行するとパッケージのダウンロードに必要な空き領域が不足しているとの警告が出ました。
# pkg upgrade Updating FreeBSD repository catalogue... FreeBSD repository is up to date. All repositories are up to date. Checking for upgrades (203 candidates): 100% Processing candidates (203 candidates): 100% The following 39 package(s) will be affected (of 0 checked): New packages to be INSTALLED: rhash: 1.3.4 Installed packages to be UPGRADED: vim: 8.0.0550 -> 8.0.0566 readline: 6.3.8 -> 6.3.8_1 llvm40: 4.0.0_2 -> 4.0.0_4 libdrm: 2.4.78,1 -> 2.4.80,1 graphite2: 1.3.9 -> 1.3.9_1 go: 1.8_1,1 -> 1.8.1_1,1 dbus: 1.10.16 -> 1.10.16_1 curl: 7.53.1_1 -> 7.54.0 cmake-modules: 3.7.2 -> 3.8.0 cmake: 3.7.2 -> 3.8.0 Installed packages to be REINSTALLED: tcl86-8.6.6_2 ruby-2.3.3_2,1 python27-2.7.13_2 perl5-5.24.1_1 pango-1.40.4 lzo2-2.10_1 libxml2-2.9.4 libxcb-1.12_2 libuv-1.11.0 libpciaccess-0.13.5 libnghttp2-1.21.1 liblz4-1.7.5,1 libffi-3.2.1 libedit-3.1.20170329_2,1 libarchive-3.3.1,1 libXt-1.1.5,1 libXdmcp-1.1.2 libXau-1.0.8_3 libX11-1.6.5,1 libSM-1.2.2_3,1 libICE-1.0.9_1,1 jsoncpp-1.8.0_2 gtk2-2.24.31 glib-2.50.2,1 gettext-runtime-0.19.8.1_1 gdk-pixbuf2-2.32.3_1 expat-2.2.0_1 atk-2.24.0 Number of packages to be installed: 1 Number of packages to be upgraded: 10 Number of packages to be reinstalled: 28 The process will require 1 MiB more space. 371 MiB to be downloaded. Proceed with this action? [y/N]: y pkg: Not enough space in /var/cache/pkg, needed 371 MiB available 311 MiBdf と zpool list で表示される空きが倍近く違うものだなと思いました。
# df -hl Filesystem Size Used Avail Capacity Mounted on rpool/ROOT/freebsd-11.0p9 1.0G 747M 311M 71% / devfs 1.0K 1.0K 0B 100% /dev rpool/ROOT/freebsd-11.0p9/tmp 314M 2.3M 311M 1% /tmp rpool/ROOT/freebsd-11.0p9/usr 5.1G 4.8G 311M 94% /usr rpool/ROOT/freebsd-11.0p9/usr/local 3.1G 2.8G 311M 90% /usr/local rpool/ROOT/freebsd-11.0p9/var 4.5G 4.2G 311M 93% /var
# zpool list rpool NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT rpool 39.8G 38.2G 1.54G - 76% 96% 1.00x ONLINE -
VMディスクのサイズ拡張
現在の VM ディスクは qcow2 のイメージファイルではなく LVM シンボリュームに変更していますので、ボリュームグループやシンプールに空きがあれば拡張は容易です。
# lvs vg/freebsd LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert freebsd vg Vwi-a-tz-- 40.00g kvm 99.39 # vgs vg VG #PV #LV #SN Attr VSize VFree vg 1 23 0 wz--n- 372.61g 92.41g # lvs vg/kvm LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert kvm vg twi-a-tz-- 150.00g 89.60 67.05lvextend コマンドで 10GB 増やします。
# lvextend -L+10G vg/freebsd Size of logical volume vg/freebsd changed from 40.00 GiB (10240 extents) to 50.00 GiB (12800 extents). Logical volume freebsd successfully resizedシンボリュームなのでまだこの時点ではシンプールの使用量は変わっていません。
# lvs vg/freebsd LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert freebsd vg Vwi-a-tz-- 50.00g kvm 79.52 # lvs vg/kvm LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert kvm vg twi-a-tz-- 150.00g 89.60 67.05
GPTパーティションの拡張
ここからは FreeBSD ゲストでの作業。ディスク末尾にあるセカンダリ GPT パーティションテーブルが不明という警告が出ますので gpart recover コマンドで修復します。
# gpart show => 34 83886013 vtbd0 GPT (50G) [CORRUPT] 34 1024 1 freebsd-boot (512K) 1058 261242 2 freebsd-swap (128M) 262300 83623747 3 freebsd-zfs (40G)
# gpart list Geom name: vtbd0 modified: false state: CORRUPT fwheads: 16 fwsectors: 63 last: 83886046 first: 34 entries: 128 scheme: GPT Providers: 1. Name: vtbd0p1 Mediasize: 524288 (512K) Sectorsize: 512 Stripesize: 0 Stripeoffset: 17408 Mode: r0w0e0 rawuuid: 6e179c08-22c2-11e7-9bcc-9d1d2957ab95 rawtype: 83bd6b9d-7f41-11dc-be0b-001560b84f0f label: boot0 length: 524288 offset: 17408 type: freebsd-boot index: 1 end: 1057 start: 34 2. Name: vtbd0p2 Mediasize: 133755904 (128M) Sectorsize: 512 Stripesize: 0 Stripeoffset: 541696 Mode: r1w1e1 rawuuid: 81821f9a-22c2-11e7-9bcc-9d1d2957ab95 rawtype: 516e7cb5-6ecf-11d6-8ff8-00022d09712b label: swap0 length: 133755904 offset: 541696 type: freebsd-swap index: 2 end: 262299 start: 1058 3. Name: vtbd0p3 Mediasize: 42815358464 (40G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 134297600 Mode: r1w1e2 rawuuid: b4378490-54d4-11e2-8e58-525400c151da rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b label: disk0 length: 42815358464 offset: 134297600 type: freebsd-zfs index: 3 end: 83886046 start: 262300 Consumers: 1. Name: vtbd0 Mediasize: 53687091200 (50G) Sectorsize: 512 Mode: r2w2e5
# dmesg | grep GEOM GEOM: vtbd0: the secondary GPT header is not in the last LBA. GEOM: vtbd1: the primary GPT table is corrupt or invalid. GEOM: vtbd1: using the secondary instead -- recovery strongly advised. GEOM: vtbd2: the primary GPT table is corrupt or invalid. GEOM: vtbd2: using the secondary instead -- recovery strongly advised. GEOM: vtbd3: the primary GPT table is corrupt or invalid. GEOM: vtbd3: using the secondary instead -- recovery strongly advised.
# gpart recover vtbd0 vtbd0 recoveredGPT パーティションテーブルを復旧すると拡張した領域が認識されますので、パーティションを拡張します。
# gpart show vtbd0 => 34 104857526 vtbd0 GPT (50G) 34 1024 1 freebsd-boot (512K) 1058 261242 2 freebsd-swap (128M) 262300 83623747 3 freebsd-zfs (40G) 83886047 20971513 - free - (10G)
# gpart resize -i 3 vtbd0 vtbd0p3 resized
# gpart show vtbd0 => 34 104857526 vtbd0 GPT (50G) 34 1024 1 freebsd-boot (512K) 1058 261242 2 freebsd-swap (128M) 262300 104595260 3 freebsd-zfs (50G)
# gpart list vtbd0 Geom name: vtbd0 modified: false state: OK fwheads: 16 fwsectors: 63 last: 104857559 first: 34 entries: 128 scheme: GPT Providers: 1. Name: vtbd0p1 Mediasize: 524288 (512K) Sectorsize: 512 Stripesize: 0 Stripeoffset: 17408 Mode: r0w0e0 rawuuid: 6e179c08-22c2-11e7-9bcc-9d1d2957ab95 rawtype: 83bd6b9d-7f41-11dc-be0b-001560b84f0f label: boot0 length: 524288 offset: 17408 type: freebsd-boot index: 1 end: 1057 start: 34 2. Name: vtbd0p2 Mediasize: 133755904 (128M) Sectorsize: 512 Stripesize: 0 Stripeoffset: 541696 Mode: r1w1e1 rawuuid: 81821f9a-22c2-11e7-9bcc-9d1d2957ab95 rawtype: 516e7cb5-6ecf-11d6-8ff8-00022d09712b label: swap0 length: 133755904 offset: 541696 type: freebsd-swap index: 2 end: 262299 start: 1058 3. Name: vtbd0p3 Mediasize: 53552773120 (50G) Sectorsize: 512 Stripesize: 0 Stripeoffset: 134297600 Mode: r1w1e2 rawuuid: b4378490-54d4-11e2-8e58-525400c151da rawtype: 516e7cba-6ecf-11d6-8ff8-00022d09712b label: disk0 length: 53552773120 offset: 134297600 type: freebsd-zfs index: 3 end: 104857559 start: 262300 Consumers: 1. Name: vtbd0 Mediasize: 53687091200 (50G) Sectorsize: 512 Mode: r2w2e5
zpoolの拡張
ディスクの拡張が完了したのでストレージプールを拡張します。
# zpool list rpool NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT rpool 39.8G 38.3G 1.47G - 76% 96% 1.00x ONLINE -
# zpool get autoexpand rpool NAME PROPERTY VALUE SOURCE rpool autoexpand on local
# zpool online -e rpool gpt/disk0CAPACITY が 76% まで下がりましたので pkg upgrade できるようになりました。
# zpool list rpool NAME SIZE ALLOC FREE EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT rpool 49.8G 38.3G 11.5G - 60% 76% 1.00x ONLINE -
おわりに
最近 NAS が不調なのでバックアップ先に ZFS を使ってみようかと久しぶりに FreeBSD を起動して各種アップデートしていたときの領域不足。もともとコマンド練習がてらの VM ということで最小サイズしか割り当てていませんでしたので、ZFS の領域監視には munin-contrib にあるモジュールを利用してみようと思います。
# pkg install munin-node munin-contrib # ln -sv /usr/local/share/examples/munin-contrib/plugins/zfs/zfs-filesystem-graph /usr/local/etc/munin/plugins/zfs_fs_rpool_ROOT
# curl telnet://localhost:4949 # munin node at freebsd.vm.myhome fetch zfs_fs_rpool_ROOT usedbydataset.value 31744 usedbysnapshots.value 0 usedbychildren.value 43523726336 usedbyrefreservation.value 0 available.value 8110702080 total.value 51634460160 quota.value 0 .
0 件のコメント:
コメントを投稿