GEOM LABEL で名前による管理を行う

GEOM

今回は GEOM によるデバイスへのラベル付けが可能になる GEOM LABEL について纏めてみたいと思います.
ラベル (名前付け) による管理を用いる事で人間が分かりやすくなる.また,デバイス番号が変わった際にも気にする必要がなくなるというメリットがあります.
例えば,デバイスが追加されたおかげで元々のデバイス番号順が変わってしまった場合,/etc/fstab の修正が必要になったりしますが,これらもラベルを用いた設定にしておく事で修正が必要ない環境にする事ができます.

ラベル名での管理の利点

前書きでも書きましたが,ラベル名による管理のメリットについて以下記載します.

ラベルは,デバイス名やパーティション名に名前を付け,マウント時にラベル名を指定したマウントが出来るようになり,デバイス名を意識しなくてもよくなります.自分や自分の環境がそうなのですが,ディスクが何個もあり,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)

ラベルの状況を確認するコマンドとして statuslist があります.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)

ラベルの状況を確認するコマンドとして statuslist があります.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 についての説明を終わりたいと思います.

コメント

タイトルとURLをコピーしました