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下が消えないのであれば、このままでいいのかも。
新しい環境を使う時は、いろいろ起きますな~。