GPTラベルの活用

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のメーカ名を入れておいて、 交換時に分かりやすいようにした。