FreeBSDのディスクデバイスの指定の話。 NetBSDの場合の似た話は2016/3/3に。
複数台 HDD を繋いでると入れ換えなどによってデバイス番号がずれてく。たとえば 3台繋いでると ada0, ada1, ada2 となるが、2台目が壊れて認識しなくなったら ada2 だったのが ada1 になる。もし、2台目の第2パーティションを swap に指定するように、/etc/fstab に
/dev/ada1p2 none swap sw 0 0
なんて書いてたら2台目壊れたときに3台目の第2パーティションになる。 またかなしいのはzfsのデバイス表示がおかしくなっちゃう。たとえば最初、
        NAME        STATE     READ WRITE CKSUM
        zvz0        ONLINE       0     0     0
          raidz1-0  ONLINE       0     0     0
            ada0p3  ONLINE       0     0     0
            ada1p3  ONLINE       0     0     0
            ada2p3  ONLINE       0     0     0
みたいだったのが、デバイスずれるとこうなっちゃう(例は適当)。
   NAME        			STATE     READ WRITE CKSUM
   zvz0        			DEGRADED     0     0     0
     raidz1-0  			DEGRADED     0     0     0
       ada0p3  			ONLINE       0     0     0
       123456789  		OFFLINE      0     0     0 was /dev/ada1p3
       diskid/DISK-HOGE123p3  	ONLINE       0     0     0 was /dev/ada2p3
一度diskid認識になっちゃうともうたいへん(起動ディスクでないなら export/import で直るらしい)。さらになぜか、diskid 認識になるとそのHDDのgpart showができなくなる(なじぇ)。
ならばラベルを使おう。
FreeBSDの場合はglabelが使えるが、GPTラベルだと一手間減らせる。 GPTパーティションを作るときに
gpart add -t freebsd-swap -s 2g -l swap0 ada0 gpart add -t freebsd-swap -s 2g -l swap1 ada1 gpart add -t freebsd-zfs -s 2g -l zfsA ada0 gpart add -t freebsd-zfs -s 2g -l zfsB ada1 gpart add -t freebsd-zfs -s 2g -l zfsC ada2
などとしておいてzpool構築時にGPTラベルを使う。
zpool create -o mountpoint=/mnt pool0 raid gpt/zfs{A,B,C}
これでデバイス番号ずれてもzpoolの構成名がぶっ壊れない!
ちなみに個人的にはgptラベルにHDDのメーカ名を入れておいて、 交換時に分かりやすいようにした。