FreeBSD 13.1: ディスクラベルが /dev/gpt に現れない

FreeBSD 13.1 を STCK1A32WFC スティックPCにインストールしたところ、いろんな不都合が現れています。
恐らく、2GBメモリと非力なためだと思いますが、高いパフォーマンスは不要なところに使う予定なので、最大5V, 2.4A で動かせるというのはとっても魅力的。10W以下ですからね。
最大のデメリットは、SDカードスロットが認識されない点ですが、そこは、USBメモリで代替する予定でいました。

一つ目に発生した小さな問題が、systat → io コマンドがコアダンプすること。大きな問題ではない。

そして、二番目の問題が発生。インストール時に、指定したディスクラベルが /dev/gpt に現れないこと。OSインストール時のファイルシステムカスタマイズ時に、ラベル指定したはずなのに /dev/gpt に名前が現れない。ufs指定したファイル名は現れず、swapに指定したラベル名だけがgpt下に現れました。このディスクラベル付け作業、サーバービルド時、短期間に何度も行うので、記憶が混濁してラベルを付けたかどうか自信がありません。ディスクラベルが使えなくても、fstabにファイルシステム名をデバイスファイル名で指定すれば解決するので、OSインストール時に私がミスしたのだと思っていました。
ところが、OSにマイナー更新をかけて、FreeBSD13.1 p1 にしたところ、ファイルシステムに使用していたUSBメモリの認識される順番が変わってしまい、OS起動に失敗。/dev/da0 と /dev/da1 が逆になってしまった。

ディスクラベルの確認方法と付け替え方法がわからなかったので、私の操作ミスだと思って我慢していましたが、こうなったらディスクラベルの手動変更方法を調べるしかない!

余談ですが、なぜ、ディスクラベルによるファイルシステムが重要かというと、複数のHDD(やSSD、USBメモリ)を使用してファイルシステムを構成する場合、OSから見えるデバイスファイル名は、HDDが追加されたり、接続ポートが替わったり、取り除かれたりすると、名称が変わってしまうためです。なので、fstabに登録するUSBディスクパーティションはデバイスファイル名ではなく、ディスクラベルで指定するべきです。

SATAにHDDだけを接続して、必ず sata0、sata1、sata2、sata3 の順に拡張するHDDを増やしてゆく場合はデバイスファイル名を使い続けても問題ありませんが、複数のUSBメモリをファイルシステムとして使う場合は、上記のような問題がいつ発生するかわかりません。ハードウェア構成は変えていないのに、freebsd-update コマンドでOSにパッチを当てるだけでも起こりえます。実際今回これが起きた。

こういう現象を避けるために、今回、fstab はディスクラベルを使うようにします。

さて、ディスクラベルの確認方法。badlabel コマンドじゃないかと思っていましたが、違いました。gpart みたい。bsdlabelだろうと勝手に思い込んでて時間をロスしてしまった。。。。。

gpart show -l とやってみると、付け忘れたと思っていたラベル、ちゃんと付いてるじゃん!

% gpart show -l
=>      40  59768752  mmcsd0  GPT  (29G)
        40    532480       1  (null)  (260M)
    532520  58187775       2  internal_root  (28G)
  58720295   1048497          - free -  (512M)

=>       40  122019760  da0  GPT  (58G)
         40  117440512    1  64g-home  (56G)
  117440552    4579248       - free -  (2.2G)

=>      40  62128048  da1  GPT  (30G)
        40   8388608    1  32g-usb-swap  (4.0G)
   8388648  13115392    2  32g-usr_ports  (6.3G)
  21504040  39845888    3  32g-var  (19G)
  61349928    778160       - free -  (380M)

なのに、/dev/gpt 下には、ファイルは一つしかない!

~ % ll /dev/gpt
total 0
crw-r-----  1 root  operator  0x92 Aug 11 02:54 32g-usb-swap

どういうこと?

これも主記憶が小さいため?

USBメモリ上のファイルシステムって、HUBへの抜き差しで/dev下にファイルが現れたり消えたりするはずだよね?

/home の方は、ダイナミックに抜き差ししても問題ないはずだから、試してみたところ。ラベルが現れました!
/var の方は、スワップもあるので、抜き差しはちょっと怖いけど、1秒程度で抜き差ししてみたところ、こっちもgpt下に現れましたわ。

:/ % ll /dev/gpt/
total 0
crw-r-----  1 root  operator  0x96 Aug 11 00:05 32g-usb-swap
crw-r-----  1 root  operator  0x98 Aug 11 00:05 32g-usr_ports
crw-r-----  1 root  operator  0x9b Aug 11 00:05 32g-var
crw-r-----  1 root  operator  0x7d Aug 11 00:04 64g-home

ということは、FreeBSDカーネルが初回 USBメモリ上のファイルシステムを認識にしに行くタイミングが悪いってことのようですね。USBメモリをシステム用のファイルシステムとして使うような想定していないのかな?

一度、/dev/gpt/* にディスクラベルが認識された状態で、fstab をデバイスファイル名からラベル名に書き換えて、再起動してみたところ、、、、、無事にラベル名でファイルシステムにマウントされました。

:~ % df
Filesystem             1K-blocks    Used    Avail Capacity  Mounted on
/dev/mmcsd0p2           28169368 3625120 22290700    14%    /
devfs                          1       1        0   100%    /dev
/dev/mmcsd0p1             262129    1747   260382     1%    /boot/efi
/dev/gpt/64g-home       56871324   35216 52286404     0%    /home
/dev/gpt/32g-usr_ports   6336540 1141760  4687860    20%    /usr/ports
/dev/gpt/32g-var        19279772  577468 17159924     3%    /var

OS入れ直ししながら試さないといけないかと思いましたけど、再起動しても/dev/gpt下が消えないのであれば、このままでいいのかも。

新しい環境を使う時は、いろいろ起きますな~。

コメントを残す