今回は GEOM GVIRSTOR によるシンプロビジョニングボリュームの提供について纏めてみます.
実ディスクより大きいサイズのディスクを提供する事ができ,利用状況に合わせて拡張していくという使い方が可能になります.
- GEOM に関するお話
- FreeBSD GEOM 再々学習
- GEOM CONCAT (ディスクの連結) を使ってみる
- GEOM STRIPE (ストライプ/RAID0) を使ってみる
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (1)
- GEOM MIRROR (ミラーリング/RAID1) を使ってみる (2)
- GEOM STRIPE + MIRROR で RAID10 を構成してみる
- GEOM RAID3を使ってみる
- GEOM CACHE を使ってみる
- GEOM GVIRSTORを使ってみる
- GEOM GATE を使ってみる
- GEOM LABEL で名前による管理を行う
- GEOM PART でディスクパーティションの管理を行う
- GEOM MULTIPATH でマルチパスを構成する (1)
- GEOM MULTIPATH でマルチパスを構成する (2)
GEOM VIRSTOR のイメージ
GEOM VIRSTORのイメージはこのようになります.
VIRSTOR としてのディスク容量は 100GB ですが,実際の容量は 10GB のディスクを用います.
今回は物理側ディスク溢れの状況を作りたいので小さいディスクを使用します.
![](https://www.seichan.org/blog/wp-content/uploads/2023/12/image-19.png)
GEOM VIRSTOR の利用・管理
GEOM VIRSTOR は gvirstor というコマンドを通じて利用・管理を行います.簡単に触れますが,詳細はコマンドのオプションの詳細は FreeBSD の マニュアル「gvirstor」を見てください.
# gvirstor usage: gvirstor clear [-v] prov ... gvirstor dump prov ... gvirstor label [-h] [-v] [-m chunk_size] [-s vir_size] name provider0 [provider1 ...] gvirstor destroy [-fv] name ... gvirstor stop [-fv] name ... (alias for "destroy") gvirstor add [-vh] name prov [prov ...] gvirstor remove [-v] name ... gvirstor help gvirstor list [-a] [name ...] gvirstor status [-ags] [name ...] gvirstor load [-v] gvirstor unload [-v]
GEOM VIRSTOR は create サブコマンドがないので,再起動したらどうなるのか.というのはスキップします.
シンプロビジョニングディスクを作成する
gvirstor label コマンドで仮想的なシンプロビジョニングを作成し,配下に RAID3 ボリュームの raid3-0 に紐づけます.
-s 1000G のオプションはプロビジョニングサイズで,OS から見たらこのサイズのディスクに見える形となります.
GEOM VIRSTOR は実行した段階で自動的にロードされますが,明示的に読み込みさせる事をお勧めします.
# kldload geom_virstor # gvirstor label -s 100G vstor0 da1
再起動時に必ず有効になるように /boot/loader.conf に明示的に記述する事をお勧めします.
# cat /boot/loader.conf geom_virstor_load="YES"
gvirstor status コマンドでステータスを表示できます.
以下は vstor0 のステータスです.da1 に紐づけられている事が確認できます.
# gvirstor status Name Status Components virstor/vstor0 100% physical free da1
gvirstor list コマンドで詳細を表示する事ができます.
VirtualSize や Provider の Mediasize が OS から見えるディスクサイズになります.
# gvirstor list Geom name: vstor0 VirtualSize: 107374182400 PhysicalBackingSize: 10737418240 PhysicalBacking: 10% ChunkVirtualCount: 25600 ChunkPhysicalCount: 2560 PhysicalFree: 100% ChunkSize: 4194304 State: 100% physical free Status: Components=1, Online=1 Providers: 1. Name: virstor/vstor0 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r0w0e0 Consumers: 1. Name: da1 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r0w0e0 StorageFree: 100% ChunksReserved: 2 ChunksUsed: 2 ChunkCount: 2560 ComponentIndex: 0
newfs でフォーマットを行います.データがあるディスクを組み込んでも利用できないので注意してください.その後,マウント,マウントの結果を確認します./mnt にマウントをしています.
これを /etc/fstab に記載した状態で再起動を行ってみます.
# newfs /dev/virstor/vstor0 /dev/virstor/vstor0: 102400.0MB (209715200 sectors) block size 32768, fragment size 4096 using 164 cylinder groups of 625.22MB, 20007 blks, 80128 inodes. super-block backups (for fsck_ffs -b #) at: 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912, 20487360, 21767808, 23048256, 24328704, 25609152, 26889600, 28170048, 29450496, 30730944, 32011392, 33291840, 34572288, 35852736, 37133184, 38413632, 39694080, 40974528, 42254976, 43535424, 44815872, 46096320, # mount /dev/virstor/vstor0 /mnt # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 2774064 14962856 16% / devfs 1 1 0 100% /dev /dev/virstor/vstor0 101561756 8 93436808 0% /mnt # cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/da0p2 / ufs rw 1 1 /dev/da0p3 none swap sw 0 0 /dev/virstor/vstor0 /mnt ufs rw 1 1
実際に利用した場合の状態を確認してみる
このディスクを利用した際,どのように扱われるのか.を確認してみます.
ファイルを dd を用いて作成して実ボリュームの 10GB を埋めてみます.
# dd if=/dev/zero of=/mnt/1G_0.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.385553 secs (114403677 bytes/sec) # ls /mnt .snap 1G_0.img # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 2774064 14962856 16% / devfs 1 1 0 100% /dev /dev/virstor/vstor0 101561756 1048872 92387944 1% /mnt
これを淡々と続けていき,10GB まで埋めていきます.8回実施 (計9回) の状況です.
# dd if=/dev/zero of=/mnt/1G_1.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.142144 secs (117449678 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_2.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.359638 secs (114720447 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_3.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.166272 secs (117140514 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_4.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.156702 secs (117262948 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_5.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.147463 secs (117381383 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_6.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.175452 secs (117023315 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_7.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.151995 secs (117323258 bytes/sec) root@bsd13:/ # dd if=/dev/zero of=/mnt/1G_8.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.159731 secs (117224170 bytes/sec) # gvirstor list Geom name: vstor0 VirtualSize: 107374182400 PhysicalBackingSize: 10737418240 PhysicalBacking: 10% ChunkVirtualCount: 25600 ChunkPhysicalCount: 2560 PhysicalFree: 1% ChunkSize: 4194304 State: 1% physical free Status: Components=1, Online=1 Providers: 1. Name: virstor/vstor0 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r1w1e1 Consumers: 1. Name: da1 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2 StorageFree: 1% ChunksReserved: 2 ChunksUsed: 2540 ChunkCount: 2560 ComponentIndex: 0
次実行で実ボリュームはすべて使い切る形になりますので,この際にどのような挙動になるのか確認します.
# dd if=/dev/zero of=/mnt/1G_9.img bs=1M count=1024
コマンドが完了せず,この状態のまま待ちとなります.gvirstor のステータスを見ると次のようになります.
# gvirstor list Geom name: vstor0 VirtualSize: 107374182400 PhysicalBackingSize: 10737418240 PhysicalBacking: 10% ChunkVirtualCount: 25600 ChunkPhysicalCount: 2560 PhysicalFree: 0% ChunkSize: 4194304 State: 0% physical free Status: Components=1, Online=1 Providers: 1. Name: virstor/vstor0 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r1w1e1 Consumers: 1. Name: da1 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2 StorageFree: 0% ChunksReserved: 2 ChunksUsed: 2560 ChunkCount: 2560 ComponentIndex: 0
PhysicalFree や State をみると完全に使い切っている状態ですので,このまま IO 完了待ちの状態が継続するようです.
したがって,ディスクを追加して実容量を増やしていきます.
GEOM VIRSTOR にディスクを追加する
gvirstor add コマンドを使用して新しいディスクを追加できます.ここでは vstor0 に da2 を追加しています.
# gvirstor add vstor0 da2
追加が完了すると,先の IO 待ちの状態が解消して書き込みが再開します.
# dd if=/dev/zero of=/mnt/1G_9.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 233.283381 secs (4602736 bytes/sec)
さて,gvirstor list で状況をみようかと思った所で kernel panic で再起動が走りました…
![](https://www.seichan.org/blog/wp-content/uploads/2023/12/SnapCrab_bsd13-1seichanlocal-VMware-Workstation_2023-12-6_16-33-24_No-00.png)
ここで明示的にマウントを行うと残念なことに再度 kernel panic が発生しました.
![](https://www.seichan.org/blog/wp-content/uploads/2023/12/SnapCrab_bsd13-1seichanlocal-VMware-Workstation_2023-12-6_16-38-14_No-00.png)
実ボリュームを溢れさせた為こうなったのかもしれません.これでは何も進まないので最初からやり直してみます.
# gvirstor label -s 100G vstor0 da1 # newfs /dev/virstor/vstor0 /dev/virstor/vstor0: 102400.0MB (209715200 sectors) block size 32768, fragment size 4096 using 164 cylinder groups of 625.22MB, 20007 blks, 80128 inodes. super-block backups (for fsck_ffs -b #) at: 192, 1280640, 2561088, 3841536, 5121984, 6402432, 7682880, 8963328, 10243776, 11524224, 12804672, 14085120, 15365568, 16646016, 17926464, 19206912, 20487360, 21767808, 23048256, 24328704, 25609152, 26889600, 28170048, 29450496, 30730944, 32011392, 33291840, 34572288, 35852736, 37133184, 38413632, 39694080, 40974528, 42254976, 43535424, 44815872, 46096320, # mount /dev/virstor/vstor0 /mnt # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 2957100 14779820 17% / devfs 1 1 0 100% /dev /dev/virstor/vstor0 101561756 8 93436808 0% /mnt
ここから,使い切らない範囲で dd を実施します.1GB x 8 個.
# dd if=/dev/zero of=/mnt/1G_0.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.157406 secs (117253932 bytes/sec) # dd if=/dev/zero of=/mnt/1G_1.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.182170 secs (116937698 bytes/sec) # dd if=/dev/zero of=/mnt/1G_2.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.118827 secs (117749999 bytes/sec) # dd if=/dev/zero of=/mnt/1G_3.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.147965 secs (117374943 bytes/sec) # dd if=/dev/zero of=/mnt/1G_4.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.157894 secs (117247682 bytes/sec) # dd if=/dev/zero of=/mnt/1G_5.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.156020 secs (117271684 bytes/sec) # dd if=/dev/zero of=/mnt/1G_6.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.352406 secs (114809150 bytes/sec) # dd if=/dev/zero of=/mnt/1G_7.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.381967 secs (114447411 bytes/sec)
この時点で gvirstor list の結果の残量が 10% でした.ですので,ここでディスクを追加します.
# gvirstor list Geom name: vstor0 VirtualSize: 107374182400 PhysicalBackingSize: 10737418240 PhysicalBacking: 10% ChunkVirtualCount: 25600 ChunkPhysicalCount: 2560 PhysicalFree: 10% ChunkSize: 4194304 State: 10% physical free Status: Components=1, Online=1 Providers: 1. Name: virstor/vstor0 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r1w1e1 Consumers: 1. Name: da1 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2 StorageFree: 10% ChunksReserved: 2 ChunksUsed: 2308 ChunkCount: 2560 ComponentIndex: 0
da2 を追加,状態はこのようになりました.55% が空いているという状況ですね.
# gvirstor add vstor0 da2 # gvirstor list Geom name: vstor0 VirtualSize: 107374182400 PhysicalBackingSize: 21474836480 PhysicalBacking: 20% ChunkVirtualCount: 25600 ChunkPhysicalCount: 5120 PhysicalFree: 55% ChunkSize: 4194304 State: 55% physical free Status: Components=2, Online=2 Providers: 1. Name: virstor/vstor0 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r1w1e1 Consumers: 1. Name: da1 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2 StorageFree: 10% ChunksReserved: 2 ChunksUsed: 2308 ChunkCount: 2560 ComponentIndex: 0 2. Name: da2 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2
先ほど,10回目で kernel panic になったので,まずはここから2回 dd を打ってみます.
# dd if=/dev/zero of=/mnt/1G_8.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.160023 secs (117220424 bytes/sec) # dd if=/dev/zero of=/mnt/1G_9.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.154714 secs (117288402 bytes/sec)
今度は問題なく完了しました.gvirstor list で結果を見てみます.
# gvirstor list Geom name: vstor0 VirtualSize: 107374182400 PhysicalBackingSize: 21474836480 PhysicalBacking: 20% ChunkVirtualCount: 25600 ChunkPhysicalCount: 5120 PhysicalFree: 46% ChunkSize: 4194304 State: 46% physical free Status: Components=2, Online=2 Providers: 1. Name: virstor/vstor0 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r1w1e1 Consumers: 1. Name: da1 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2 StorageFree: 100% ChunksReserved: 0 ChunksUsed: 0 ChunkCount: 4294965248 ComponentIndex: 77234808 2. Name: da2 Mediasize: 10737418240 (10G) Sectorsize: 512 Mode: r1w1e2
2本目のディスクに書かれているのか全く分かりません… もう一度 dd を実行すると必ず2本目を使用しますので実行してみます.
# dd if=/dev/zero of=/mnt/1G_10.img bs=1M count=1024 1024+0 records in 1024+0 records out 1073741824 bytes transferred in 9.155170 secs (117282570 bytes/sec) # gvirstor list
と gvirstor list を実行したとたん kernel panic になり再起動を繰り返しました…
![](https://www.seichan.org/blog/wp-content/uploads/2023/12/SnapCrab_bsd13-1seichanlocal-VMware-Workstation_2023-12-6_20-43-41_No-00.png)
このバージョン特有の問題なのか分かりませんが,使えないですね…
残念ですが,GEOM VIRTSTOR の紹介をこれにて終わります.
コメント