目次

tips

ファイルシステムの内容をクローンで置き換える

クローンを作成したスナップショットの元ファイルシステムは、クローンを残して破棄することができません
例を挙げます
以下の様に作成されたzfsファイルシステムがあるとします

# zfs snapshot tank/origin@yesterday
# zfs clone tank/origin@yesterday tank/clone_fs
# zfs get origin tank/clone_fs
NAME           PROPERTY  VALUE                  SOURCE
tank/clone_fs  origin    tank/origin@yesterday  -

この時、tank/origin を削除することができません
そこで、zfs promoteコマンドでcloneで作成されたファイルシステムとクローン元を置き換えます

# zfs promote tank/clone_fs

# zfs get origin tank/clone_fs
NAME           PROPERTY  VALUE  SOURCE
tank/clone_fs  origin    -      -

# zfs get origin tank/origin
NAME           PROPERTY  VALUE                    SOURCE
tank/origin    origin    tank/clone_fs@yesterday  -

このコマンドを使用することで、クローンの親子依存関係が逆転し、元ファイルシステムが、指定されたファイルシステムのクローンになり、破棄することができるようになります

disk label指定してRaid-z

ここに情報はあるのでざっくり流れだけ

GPTでディスクを初期化

$ gpart destroy -F adaX ; gpart create -s gpt adaX
......
$ gpart destroy -F adaZ ; gpart create -s gpt adaZ

GPTでZFS用のパーティションを作成

$ gpart add -t freebsd-zfs -l diskX adaX
......
$ gpart add -t freebsd-zfs -l diskZ adaZ

ZFS用パーティションを作る場合、必ず -l オプションを指定し、それぞれのディスクに個別のラベルを作成しておく1)

RAIDZでZFSプールを作る

$ zpool create -O atime=off -O compression=lz4 ztank raidz# gpt/diskX ...... gpt/diskZ

その他の参考

HDD追加

HDD確認

# dmesg|grep ada

追加

# zpool create pool名 /dev/ada2
# zpool create pool名 raidz /dev/adaxx /dev/adaxx /dev/adaxx

poolが見つからない

再起動したが、以下の様にpoolがないと言われる2)

# zpool list
no pools available
# zfs list
no datasets available 

もともとあったのは間違いない
マウントされてない模様

# zpool import
  pool: zdata
    id: 4334033344455566677
 state: ONLINE
action: The pool can be imported using its name or numeric identifier.
config:
        zdata       ONLINE
          ada1      ONLINE

# zpool import zdata
rc.conf
zfs_enable="YES"

これでいけた3)

高速化

zfs set atime=off <プール名>

ファイルアクセス時間の記録を止める

ONだと読んだだけでスナップショットの容量が増えてしまいます。

性能もバンバン落ちるそうです。

atimeが使えなくなるが普通のファイル置き場では困らないはず。

メールスプール等には使用しないこと4)

値の確認は

zfs get atime

Dedup禁止!!

ZFSにはdedupという重複排除機能があります。

ブロック単位でハッシュをとって同じ内容のブロックか、判断してくれます。

なので、1bitだけ違う1GBのファイルが2つあった場合、消費されるディスクは1GBと128KBだけです。

なんて素晴らしい。夢のような機能です。

が、が、が、

ブロック単位でハッシュをとると言いました。

何処に? メモリです。

どれくらい? 1ブロックにつき320Bytes

では、3TBのディスクで計算してみます。

zfsのブロックサイズは512B~128KBで可変なので、ザックリ64Kで計算して見ます。

3TB=1024 * 1024 * 1024 * 3 = 3,221,225,472KB
3,221,225,472KB/64KB = 50,331,648Blocks
50,331,648 * 320Bytes = 16,106,127,360 = 約15GBytes

はい、終了。

と言うわけで、あり得ないくらい大量のメモリが必要になります。

ディスク容量が小さければ動くかもしれませんが、そもそもzfsを使う意味がない…

その上とどめです。設定したら戻せません5)。キリッ

後からzfsをOnにする

/boot/loader.conf
zfs_load="YES"

↑不要になった模様6)

/etc/rc.conf
zfs_enable="YES"
# service zfs start

ZFSのRAIDZの修復とついでに拡張する

zfsの活用とチューニング

1)
起動時に0,1,2の順番がどうなるか保証されないため、ラベルが無いと1台のディスクが故障した場合に、故障したディスクを特定するのがとても困難
2)
13.2へのUpdateで発生?
3)
rc.confにzfs_enable=“YES”必要
4)
Dovecotなど、noatmieに対応してる場合は大丈夫です
5)
データを書き直さないと元にもどりません
6)
2020.10.13 12.1-RELEASE-p9 で確認