今回は GEOM によるデバイスへのラベル付けが可能になる GEOM LABEL について纏めてみたいと思います.
ラベル (名前付け) による管理を用いる事で人間が分かりやすくなる.また,デバイス番号が変わった際にも気にする必要がなくなるというメリットがあります.
例えば,デバイスが追加されたおかげで元々のデバイス番号順が変わってしまった場合,/etc/fstab の修正が必要になったりしますが,これらもラベルを用いた設定にしておく事で修正が必要ない環境にする事ができます.
- 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)
ラベル名での管理の利点
前書きでも書きましたが,ラベル名による管理のメリットについて以下記載します.
ラベルは,デバイス名やパーティション名に名前を付け,マウント時にラベル名を指定したマウントが出来るようになり,デバイス名を意識しなくてもよくなります.自分や自分の環境がそうなのですが,ディスクが何個もあり,RAID を構成するために同じ型番のディスクを何個も接続していたりします.さらに,ディスクを増やしたり減らしたり.なんて事があります.こうなると増減のタイミング等でデバイス名が変わる事になりますので,デバイス名での管理だと難しくなってしまいます.
こういったシチュエーションであらかじめラベルとしてディスクに名前を付けてあげれば,以降はラベル名での管理になるのでディスクにラベル名を印刷したテプラを貼っておくことで何かあった際のデバイス特定も容易になります.
こういった,デバイス名(番号)の管理から名前での管理に切り替えて少し運用負荷の軽減を狙ってみてはいかがでしょうか.
ラベル管理を行わない場合のデメリット
ラベルによる管理を行わない場合,デバイス番号が変わる事による弊害が生じる.は先に説明した通りです.例として,前回用意した iSCSI イニシエーターのマシンのローカルディスクを1つ増やしたケースでお話します.
元々左のような構成になっている環境に,イニシエーター側にディスクを一つ追加した場合となります.
左の時点ではこのような状態になっています.
# iscsictl -L Target name Target portal State iqn.2023-12.iscsi.org.seichan:target0 172.16.255.254 Connected: da2 da4 iqn.2023-12.iscsi.org.seichan:target1 172.16.255.254 Connected: da3 iqn.2023-12.iscsi.org.seichan:target2 172.16.255.254 Connected: da1 # cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/da0p2 / ufs rw 1 1 /dev/da0p3 none swap sw 0 0 /dev/da1 /iscsi/da1 ufs rw,late 1 0 # camcontrol devlist <NECVMWar VMware IDE CDR00 1.00> at scbus0 target 0 lun 0 (pass0,cd0) <VMware Virtual disk 2.0> at scbus2 target 0 lun 0 (pass1,da0) <FreeBSD CTLDISK 0001> at scbus3 target 0 lun 3 (da1,pass2) <FreeBSD CTLDISK 0001> at scbus4 target 0 lun 0 (da2,pass3) <FreeBSD CTLDISK 0001> at scbus4 target 0 lun 1 (da4,pass5) <FreeBSD CTLDISK 0001> at scbus5 target 0 lun 2 (da3,pass4)
このマシンにオンラインのまま1つディスクを追加してみます.
そうすると,daX は最後の番号にインクリメントされて生成されます.今回は da5 として認識しました.
pvscsi0: MSG: device addition at scsi0:1:0 da5 at pvscsi0 bus 0 scbus2 target 1 lun 0 da5: <VMware Virtual disk 2.0> Fixed Direct Access SPC-4 SCSI device da5: 750.000MB/s transfers da5: Command Queueing enabled da5: 102400MB (209715200 512 byte sectors) da5: quirks=0x140<RETRY_BUSY,STRICT_UNMAP> # camcontrol devlist <NECVMWar VMware IDE CDR00 1.00> at scbus0 target 0 lun 0 (pass0,cd0) <VMware Virtual disk 2.0> at scbus2 target 0 lun 0 (pass1,da0) <VMware Virtual disk 2.0> at scbus2 target 1 lun 0 (da5,pass6) <FreeBSD CTLDISK 0001> at scbus3 target 0 lun 3 (da1,pass2) <FreeBSD CTLDISK 0001> at scbus4 target 0 lun 0 (da2,pass3) <FreeBSD CTLDISK 0001> at scbus4 target 0 lun 1 (da4,pass5) <FreeBSD CTLDISK 0001> at scbus5 target 0 lun 2 (da3,pass4)
この状態で再起動を行ってみるとどうなるか見てみましょう.
「/dev/da1: invalied fstype」というエラーが発生しました.一度 fstab の該当行をコメントアウトして起動,状態を見てみましょう.
# iscsictl -L Target name Target portal State iqn.2023-12.iscsi.org.seichan:target0 172.16.255.254 Connected: da4 da5 iqn.2023-12.iscsi.org.seichan:target1 172.16.255.254 Connected: da3 iqn.2023-12.iscsi.org.seichan:target2 172.16.255.254 Connected: da2 # camcontrol devlist <NECVMWar VMware IDE CDR00 1.00> at scbus0 target 0 lun 0 (pass0,cd0) <VMware Virtual disk 2.0> at scbus2 target 0 lun 0 (pass1,da0) <VMware Virtual disk 2.0> at scbus2 target 1 lun 0 (pass2,da1) <FreeBSD CTLDISK 0001> at scbus3 target 0 lun 3 (da2,pass3) <FreeBSD CTLDISK 0001> at scbus4 target 0 lun 2 (da3,pass4) <FreeBSD CTLDISK 0001> at scbus5 target 0 lun 0 (da4,pass5) <FreeBSD CTLDISK 0001> at scbus5 target 0 lun 1 (da5,pass6)
元々 iSCSI デバイスとして見えていた da1 が da2 に変更になっています.
そして,追加したディスクが da5 から da1 に変更になりました.
デバイス名での管理を行っている場合,こういった番号が変更になってしまう事があり,それに伴い意図しない不具合・障害が発生する事になります.
ラベルの種類
GEOM LABEL クラスではいくつかのラベルの種類があります.正確にはファイルシステム毎にラベル機構が用意されています.また,これらのファイルシステムに依存せずにラベルを管理する方法もあります.
ファイルシステムで用意されているもので FreeBSD でよくつかわれそうなものとして以下が挙げられます.各ファイルシステム毎のディレクトリ以下にラベル名のデバイスファイルが生成されます.
- UFS1/UFS2 のボリューム名 (/dev/ufs)
- UFS1/UFS2 のファイルシステムID (/dev/ufsid)
- FAT12/16/32 等の MSDOSFS (/dev/msdosfs)
- CD-ROM 等の ISO9660 (/dev/iso9660)
- NTFS (/dev/ntfs)
また,GPT パーティションではパーティション単位でもラベルを付与出来ます.
- GPT ラベル (/dev/gpt)
- GPT UUID (/dev/gptid)
ラベルを付ける (glabel)
glabel はファイルシステムに依存せずにラベルを管理する事が出来ます.ファイルシステムでラベルが用意されていない場合や複数のファイルシステムを扱うため,統一的に管理したい.なんていう場合に有用だと思います.
ラベルを付けるには,下のように glabel label [ラベル名] [デバイス名] という引数で実行します.
サブコマンドが label ではなく create の場合,ディスクにラベル名が書かれませんので再起動時にクリアされてしまいます.試験等の一時的なラベル付与等の場合は create を使いますが,恒久的にラベルを使いたい場合は label サブコマンドを指定してください.
# glabel label iscsi-lun3 /dev/da2
ラベルが設定されれば,以下のように status で確認することが出来ます.この例では今回設定したものだけ表示させています.
# glabel status Name Status Components ufsid/6575ba6a5bc67fd7 N/A da2 diskid/DISK-MYSERIAL0003 N/A da2 label/iscsi-lun3 N/A da2
また,glabel の場合は /dev/label 以下にデバイスファイルが生成されていますので,こちらでも確認が可能です.
# ls -l /dev/label total 0 crw-r----- 1 root operator 0x71 Dec 11 10:30 iscsi-lun3
ラベルを用いてマウントを行う
作成したラベルを用いたマウントを試行してみます.
# mount /dev/label/iscsi-lun3 /iscsi/da1 # df Filesystem 1K-blocks Used Avail Capacity Mounted on /dev/da0p2 19279260 3141160 14595760 18% / devfs 1 1 0 100% /dev /dev/label/iscsi-lun3 10144028 8 9332500 0% /iscsi/da1
ラベル名によるデバイスの指定が無事出来ましたので,これを再起動後も動作するように /etc/fstab に反映します.
# cat /etc/fstab # Device Mountpoint FStype Options Dump Pass# /dev/da0p2 / ufs rw 1 1 /dev/da0p3 none swap sw 0 0 /dev/label/iscsi-lun3 /iscsi/da1 ufs rw,late 1 0
再起動後もこの状態で起動するのかを確認します.
正常に起動しました.また,マウントの状況も以下のとおり正常に行われています.
GEOM LABEL を管理する
glabel のオプション群について以下纏めていきます.
実際のオペレーションとしては glabel 単体よりも,gpart を使って.が多いかもしれませんが,自身の備忘録も兼ねて.
ラベルを付ける
上でも書きましたが,ラベルを付与するには glabel label [ラベル名] [デバイス名] という引数で実行します.
glabel create [ラベル名] [デバイス名] でも付与は可能ですが一時的なものとなります.
指定できるデバイス名は RW なデバイス (HDD,SSD 等) になります.
以下,未使用の da1 (ローカルディスク) でコマンドを実行,結果を見ていく形とします.
# glabel label local-hdd1 da1
ラベルの状態を確認する (status)
ラベルの状況を確認するコマンドとして status と list があります.status がサマリーで,list が詳細です.
status に渡せるものとしてデバイス名を渡すことができ,その場合はそのデバイスの情報だけが出力されます.
# glabel status Name Status Components gptid/e49c97b1-8d16-11ee-ad0a-0050568da523 N/A da0p1 label/iscsi-lun3 N/A da2 diskid/DISK-MYSERIAL0002 N/A da3 ufsid/6572f98e0f76158d N/A da4 diskid/DISK-MYSERIAL0000 N/A da4 diskid/DISK-MYSERIAL0001 N/A da5 label/local-hdd1 N/A da1 # glabel status da1 Name Status Components label/local-hdd1 N/A da1
ラベルの状態を確認する (list)
ラベルの状況を確認するコマンドとして status と list があります.status がサマリーで,list が詳細です.
list の場合はデバイスの容量やパーティション情報などのディスクの詳細も合わせて表示されます.
以下 list の結果ですが,長くなるのでローカルディスクとマウントしている iSCSI ボリュームのみ掲載しています.
# glabel list Geom name: da0p1 Providers: 1. Name: gptid/e49c97b1-8d16-11ee-ad0a-0050568da523 Mediasize: 524288 (512K) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r0w0e0 secoffset: 0 offset: 0 seclength: 1024 length: 524288 index: 0 Consumers: 1. Name: da0p1 Mediasize: 524288 (512K) Sectorsize: 512 Stripesize: 0 Stripeoffset: 20480 Mode: r0w0e0 Geom name: da2 Providers: 1. Name: label/iscsi-lun3 Mediasize: 10737414144 (10G) Sectorsize: 4096 Stripesize: 32768 Stripeoffset: 0 Mode: r1w1e1 secoffset: 0 offset: 0 seclength: 20971512 length: 10737414144 index: 0 Consumers: 1. Name: da2 Mediasize: 10737418240 (10G) Sectorsize: 4096 Stripesize: 32768 Stripeoffset: 0 Mode: r1w1e2 Geom name: da1 Providers: 1. Name: label/local-hdd1 Mediasize: 107374181888 (100G) Sectorsize: 512 Mode: r0w0e0 secoffset: 0 offset: 0 seclength: 209715199 length: 107374181888 index: 0 Consumers: 1. Name: da1 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r0w0e0
オプションとしてデバイス名を付与する事でそのデバイスだけの詳細を表示する事ができます.
# glabel list da1 Geom name: da1 Providers: 1. Name: label/local-hdd1 Mediasize: 107374181888 (100G) Sectorsize: 512 Mode: r0w0e0 secoffset: 0 offset: 0 seclength: 209715199 length: 107374181888 index: 0 Consumers: 1. Name: da1 Mediasize: 107374182400 (100G) Sectorsize: 512 Mode: r0w0e0
ラベルを削除する (stop/destroy)
ラベル情報を一時的に破棄したい場合 glabel destroy (または stop) コマンドを利用します.
渡す引数ですが,デバイス名ではなくラベル名である事に注意してください.
# glabel destroy label/local-hdd1 # glabel status Name Status Components gptid/e49c97b1-8d16-11ee-ad0a-0050568da523 N/A da0p1 label/iscsi-lun3 N/A da2 diskid/DISK-MYSERIAL0002 N/A da3 ufsid/6572f98e0f76158d N/A da4 diskid/DISK-MYSERIAL0000 N/A da4 diskid/DISK-MYSERIAL0001 N/A da5
このように status に表示されない状態となります.
ただ,destroy / stop はメタデータの削除までは行われませんので復旧する事が可能です.
ラベルを再開する (refresh)
destroy / stop で破棄したラベルを戻したい場合は glabel refresh コマンドを利用します.
この場合はラベル名ではなく,デバイス名である事に注意してください.
# glabel refresh da1 Metadata from da1 refreshed. # glabel status Name Status Components gptid/e49c97b1-8d16-11ee-ad0a-0050568da523 N/A da0p1 label/iscsi-lun3 N/A da2 diskid/DISK-MYSERIAL0002 N/A da3 ufsid/6572f98e0f76158d N/A da4 diskid/DISK-MYSERIAL0000 N/A da4 diskid/DISK-MYSERIAL0001 N/A da5 label/local-hdd1 N/A da1
ラベルを削除する (clear)
destroy / stop は一時的な破棄で,メタデータは維持されると説明しました.メタデータも消去する場合は glabel clear を利用します.
clear の場合,ラベル名ではなくデバイス名となり,複数のラベルを持っている場合はそれらすべてが消去されますのでその点を認識してください.
# glabel clear da1 # glabel status Name Status Components gptid/e49c97b1-8d16-11ee-ad0a-0050568da523 N/A da0p1 label/iscsi-lun3 N/A da2 diskid/DISK-MYSERIAL0002 N/A da3 ufsid/6572f98e0f76158d N/A da4 diskid/DISK-MYSERIAL0000 N/A da4 diskid/DISK-MYSERIAL0001 N/A da5
clear で消去した場合,refresh で戻す事は不可能ですので,ラベルを戻したい/別の名前を付けたい場合は glabel label コマンドで改めてラベルを付与してください.
以上で GEOM LABEL についての説明を終わりたいと思います.
コメント