えちょ記

語らないブログ

初めてのFreeBSD・10日目:ZFS落とし穴&小技偏

とりあえず、鯖設定をいじろうとして落とし穴を2つほど踏み抜いたので議事録。今日はもう寝るからメモだけなんだぜ。
     かゆ
           う ま

4/2追記:小技もあわせて追記しておくよん。

pure zfs bootでzpool構成を弄ったら

zpool.cacheを作りなおさないとブートしないよ!

zpool attachとかで「permission denied」って怒られる

sysctl vfs.zfs.debug=1 ってしてデバッグモードにしてれば実行出来るよ!コマンド実行だけしたら0に戻すんだよ!

zpool createとかがどうしても失敗する。

上記の手段でもダメな場合。

  • シングルユーザモードにする
  • 可能であれば関係ないpoolを一旦exportする

1つの物理デバイスに複数のzpoolを割り当てようとすると失敗しやすい。これを避けるには、関係ないzpoolをexportして物理ドライブへのアクセスが行われないようにすると成功しやすい。トーゼン一連の作業が終わったらzpool.cacheを作りなおすべき。

freebsd-boot」のサイズ指定は -s 128じゃなくて -s 126

メインパーティションのアライアンスを4096byte境界に合わせるため。
最近の大容量HDDは、物理セクタサイズが512から4096に変更されている。パーテーション位置は論理セクタ(=512byte)単位で指定できるが、OSのファイルシステムに対するアクセス性能は物理セクタとのアライアンスが一致していないと極めて悪化する。
これを避けるにはパーティションの区切り位置を4096境界に合わせる必要があり、論理セクタ位置でいうと8の倍数で始まるようにしなければならない。そして、GPTフォーマットのヘッダ領域サイズは34論理セクタである。後は考えてみよう!

ちなみに、こんな感じ。zfs領域の開始セクタが8で割り切れるように。
# gpart show
=>        34  3907029101  ad16  GPT  (1.8T)
          34         126     1  freebsd-boot  (63K)
         160     2097152     2  freebsd-zfs  (1.0G)
     2097312  3904931823     3  freebsd-zfs  (1.8T)

さらにけちるなら128-34で94にする。これなら64KB境界にフィットする。ただし、あまりけちりすぎるとブートファイルがインストールできないとかなるかもしれないのでほどほどに。