FreeBSD で ZFS を利用する – ZFS プールの機能について理解する

ZFS

今回は前回作成した ZFS プールを使用しつつ,プールが持つ機能について説明を行います.
正直,使った事がないものが多分に含まれているためマニュアルから抜粋した説明も多々含まれていますのでご容赦ください.
おいおいそれら機能を使いつつ自分としても理解を深めていきたいと考えています.

ZFSプールの機能

zpool の設定状態を確認するには zpool get all コマンドを利用します.多機能で長いですが貼り付けます.

# zpool get all pool0
NAME   PROPERTY                       VALUE                          SOURCE
pool0  size                           596G                           -
pool0  capacity                       2%                             -
pool0  altroot                        -                              default
pool0  health                         ONLINE                         -
pool0  guid                           3192878612692055508            -
pool0  version                        -                              default
pool0  bootfs                         -                              default
pool0  delegation                     on                             default
pool0  autoreplace                    off                            default
pool0  cachefile                      -                              default
pool0  failmode                       wait                           default
pool0  listsnapshots                  off                            default
pool0  autoexpand                     off                            default
pool0  dedupratio                     1.00x                          -
pool0  free                           581G                           -
pool0  allocated                      14.7G                          -
pool0  readonly                       off                            -
pool0  ashift                         0                              default
pool0  comment                        -                              default
pool0  expandsize                     -                              -
pool0  freeing                        0                              -
pool0  fragmentation                  0%                             -
pool0  leaked                         0                              -
pool0  multihost                      off                            default
pool0  checkpoint                     -                              -
pool0  load_guid                      16391984538007574658           -
pool0  autotrim                       off                            default
pool0  compatibility                  off                            default
pool0  feature@async_destroy          enabled                        local
pool0  feature@empty_bpobj            enabled                        local
pool0  feature@lz4_compress           active                         local
pool0  feature@multi_vdev_crash_dump  enabled                        local
pool0  feature@spacemap_histogram     active                         local
pool0  feature@enabled_txg            active                         local
pool0  feature@hole_birth             active                         local
pool0  feature@extensible_dataset     enabled                        local
pool0  feature@embedded_data          active                         local
pool0  feature@bookmarks              enabled                        local
pool0  feature@filesystem_limits      enabled                        local
pool0  feature@large_blocks           enabled                        local
pool0  feature@large_dnode            enabled                        local
pool0  feature@sha512                 enabled                        local
pool0  feature@skein                  enabled                        local
pool0  feature@userobj_accounting     enabled                        local
pool0  feature@encryption             enabled                        local
pool0  feature@project_quota          enabled                        local
pool0  feature@device_removal         enabled                        local
pool0  feature@obsolete_counts        enabled                        local
pool0  feature@zpool_checkpoint       enabled                        local
pool0  feature@spacemap_v2            active                         local
pool0  feature@allocation_classes     enabled                        local
pool0  feature@resilver_defer         enabled                        local
pool0  feature@bookmark_v2            enabled                        local
pool0  feature@redaction_bookmarks    enabled                        local
pool0  feature@redacted_datasets      enabled                        local
pool0  feature@bookmark_written       enabled                        local
pool0  feature@log_spacemap           active                         local
pool0  feature@livelist               enabled                        local
pool0  feature@device_rebuild         enabled                        local
pool0  feature@zstd_compress          enabled                        local
pool0  feature@draid                  enabled                        local

60行ほどの出力になります…
一部は現状のキャパシティや使用状況が表示されるフィールドになっていますが,多くは明示的に設定が可能な設定項目になっています.設定が可能なものについては以下に説明を入れていきます.
(表示のみの項目は除外しています)
また,自身も利用した事がない機能も含まれているため,ドキュメントベースの記載が多くなってしまっております.ご容赦ください.

altroot

zpool create で作成すると,プール名のディレクトリーがルート (/) 直下に作成されます.
zpool create -R を指定するもしくは作成後の場合はインポートの際に指定をすることでプールのルートディレクトリーの変更が行えます.
この機能を利用するシチュエーションですが,移行などの際に別のホストに持って行った際にルート直下にインポートされる事が都合が悪い場合などに用いられるケースが多いのかなと思います.

bootfs

ZFS Root (起動ドライブ/OS 全体の ZFS化) を行っている場合,どのファイルシステムからブートさせるのかを指定するプロパティです.
OS 領域が ZFS でない場合は弄る事はありません.
OS 領域が ZFS の場合,バックアップ側ディスクに対してこの設定を行い起動するシチュエーションが考えられます.

delegation

ZFS 操作を委任するかどうかの設定になります.デフォルトが on なので委任を行うつもりが無ければプールで off にしてもよいと思います.
on のままでも,委任は別途設定が必要なので特段の影響はありません.

autoreplace

ディスクの障害,交換後に自動でリプレース処理を走らせるかどうかの設定です.
autoreplace が自動処理する対象は,交換時同じスロット (ケーブル) 上のディスクに限定されるようです.
ただ,このようなケースにおいては状況確認も含めて行いたいケースが多いと思いますのでデフォルトの off のままの方が都合がよいと思います.

cachefile

プールの構成情報を自プール以外のどこかに保持する場合に使用します.
が,公式 (Oracle) のドキュメントでも通常は利用されませんとありますので明示的に別の所に保持するメリットは低いと思います.

failmode

プールに壊滅的な障害が生じた際のシステムの挙動を制御します.壊滅的とはRAIDZ 構成時に2個のディスクが故障した場合などの状態です.
ディスクの破損だけではなく,バスが故障して見えなくなった場合なども含まれます.
デフォルト値は wait のようで,これを変える必要はないかと思います.
このような状態が発生した場合,設定値により次の挙動となります.

wait

デバイスの接続が復元され,zpool clear によりエラーをクリアーされるまでプールの全ての IO 要求をブロックします.

continue

新しい書き込み要求はエラーを返します.正常なデバイスに対する読み取り要求は許可されます.デバイスの接続復元,zpool clear を行い解消後は通常動作に戻ります.

panic

コンソールにメッセージを出力し,クラッシュダンプを生成します.

listsnapshots

zfs list コマンド実行時にスナップショットを一緒に表示するかどうかの設定です.デフォルト値は off です.
on にすることでスナップショットも見えますが,多分うざったいです.

autoexpand

容量の大きいディスクに入れ替えていった際,自動で拡張するかどうかの設定です.デフォルト値は off です.
off の場合は明示的にコマンドを実行することで拡張を行うことが可能です.
autoreplace 同様,前後に状況確認も含めたいケースが多いと思いますので off のままの方が都合がよいと思います.

readonly

プールのインポート時に読み取り専用としてインポートすることで,書き込み不可のプールとすることができます.
別のホストに繋いでデータを吸い上げたい.などの場合に利用することになるかと思います.

multihost

HA クラスターなどの Active/Standby ホストでこの領域を共有する場合に利用する設定です.デフォルト値は off です.
HA クラスターを構成する場合は on にしつつ色々と条件が必要なようです.

autotrim

TRIM を自動で行うかどうかの設定です.デフォルト値は off です.
SSD で構成している場合は TRIM は有効だと思いますが,自動で行うメリットはあまりないようです.
手動で zpool trim [pool名] として実行することが可能です.

compatibility

機能セットを過去のバージョンに合わせることでの互換性を得るための設定になります.
/usr/share/zfs/compatibility.d/ 以下に指定可能な設定値 (ファイル) とファイルの内容として機能が記載されています.
明示的に固定したいシチュエーションが無ければ利用することはないと思います.
ホスト間の ZFS レプリケーションを行う場合にもしかしたら関係するかもしれません.

feature@lz4_compress

LZ4 圧縮アルゴリズムを使用するかどうかの設定です.デフォルト値は active なので利用可能な状態です.
後々で解説すると思いますが,LZ4 か ZSTD のいずれかを用いる場合が多いと思いますので無効にする必要はないと思います.

feature@multi_vdev_crash_dump

クラッシュダンプの保存先として複数のボリュームを持つプールを指定できます.
ですが,FreeBSD では enable ですが active にはならないようです (使えない)

feature@hole_birth

feature@extensible_dataset

この機能により,ZFS のデータをより柔軟に使用できるようになります.
構造体であり,他の機能が依存するために存在します.

feature@embedded_data

高圧縮性ブロックのパフォーマンスと圧縮率が向上します.
コンテンツを 112 バイト以下に圧縮できるブロックは,この機能を利用できます.
この機能が有効になっている場合,高圧縮性ブロックの内容はブロックの「ポインター」自体に保存されます.

feature@bookmarks

zfs ブックマーク コマンドが使用できるようになります.
zfs list -t Bookmark -r poolname を実行すると,プール内のすべてのブックマークを一覧表示できます.

feature@large_blocks

データセットのレコードサイズを 128 KiB より大きく設定できます.

feature@large_dnode

データセット内の dnode のサイズを 512 B より大きく設定できます.
(dnode は inode みたいなものと覚えておけばよいと思います)

feature@sha512

チェックサムと重複排除のためのアルゴリズムとして SHA-512/256 ハッシュの使用が有効になります.
SHA-512 は,64 bit ハードウェアで SHA-256 に比べてパフォーマンスが約 50% 向上するため,最小限の変更で十分な代替候補となります.

feature@skein

チェックサムと重複除去に Skein ハッシュ アルゴリズムを使用できるようになります。
Skein は、NIST SHA-3 コンペティションのファイナリストに選ばれた高性能セキュア ハッシュ アルゴリズムです。
非常に高いセキュリティマージンと高いパフォーマンスを提供します。
64 ビット ハードウェアの場合 SHA-256 より 80% 高速 です.

feature@encryption

ネイティブに暗号化されたデータセットの作成と管理が可能になります.

feature@device_removal

zpool delete コマンドでトップレベルの vdev を削除し,それらをまっさらにしてプールの合計サイズを削減できるようになります.

feature@bookmark_v2

ZFS の他の機能に必要なより大きなブックマークの作成と管理が可能になります.

feature@redaction_bookmarks

改訂された zfs 送信の使用が可能になり,ブロックを作成した送信によって編集されたブロックのリストを保存する編集ブックマークが作成されます.
改定された送信の詳細については、zfs-send(8) を参照してください.

feature@redacted_datasets

改訂された zfs 送信ストリームの受信が可能になり,受信時に改定されたデータセットが作成されます.
改定された受信の詳細については、zfs-send(8) を参照してください.

feature@bookmark_written

追加のブックマーク アカウンティング フィールドが有効になり,write#bookmark プロパティ (ブックマーク以降に書き込まれたスペース) とブックマークからの増分の送信ストリームサイズの推定が有効になります.

feature@zstd_compress

zstd は,高い圧縮率と高速性の組み合わせを特徴とする高性能圧縮アルゴリズムです.
gzip と比較すると,zstd ははるかに高い速度でわずかに優れた圧縮を実現します.
lz4 と比較すると,zstd は圧縮率がはるかに優れていますが,速度はわずかに遅いだけです.
通常,zstd の圧縮速度はスレッドあたり 250 ~ 500 MB/秒の範囲で,解凍速度はスレッドあたり 1GB/秒を超えます.
zstd 機能が有効に設定されている場合,管理者は zfs set compress=zstd を使用して任意のデータセットの zstd 圧縮を有効にすることができます.
データ,パリティ,およびスペアは冗長グループに編成され,すべてのデバイスに均等に分散されます.

これだけでもかなりの量になってしまったので今回はこれで終わります.
次回は当初の予定どおりに各設定やメンテについて触れていこうと思います.

コメント

タイトルとURLをコピーしました