今回は前回作成した ZFS プールを使用しつつ,プールが持つ機能について説明を行います.
正直,使った事がないものが多分に含まれているためマニュアルから抜粋した説明も多々含まれていますのでご容赦ください.
おいおいそれら機能を使いつつ自分としても理解を深めていきたいと考えています.
- ZFS に関するお話
- FreeBSD で ZFS を利用する – ZFS 概要
- FreeBSD で ZFS を利用する – ZFS プールの作成 (パーティション切らない編)
- FreeBSD で ZFS を利用する – ZFS プールの機能について理解する
- FreeBSD で ZFS を利用する – ファイルシステムを管理する
- FreeBSD で ZFS を利用する – send/recv を使い倒す
- FreeBSD で ZFS を利用する – RAWボリュームを切り出す & iSCSI として提供する
- FreeBSD で ZFS を利用する – ファイルシステムの圧縮を利用する・比較する
- FreeBSD で ZFS を利用する – ZFS のキャッシュの仕組みを理解する
- FreeBSD で ZFS を利用する – キャッシュを構成・設定する
- FreeBSD で ZFS を利用する – 重複排除を利用する・確認する
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (1)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (2)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (3)
- FreeBSD で ZFS を利用する – ZFS ファイルシステムの機能について理解する (4)
- ZFSプールの機能
- altroot
- bootfs
- delegation
- autoreplace
- cachefile
- failmode
- listsnapshots
- autoexpand
- readonly
- multihost
- autotrim
- compatibility
- feature@lz4_compress
- feature@multi_vdev_crash_dump
- feature@hole_birth
- feature@extensible_dataset
- feature@embedded_data
- feature@bookmarks
- feature@large_blocks
- feature@large_dnode
- feature@sha512
- feature@skein
- feature@encryption
- feature@device_removal
- feature@bookmark_v2
- feature@redaction_bookmarks
- feature@redacted_datasets
- feature@bookmark_written
- feature@zstd_compress
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 圧縮を有効にすることができます.
データ,パリティ,およびスペアは冗長グループに編成され,すべてのデバイスに均等に分散されます.
これだけでもかなりの量になってしまったので今回はこれで終わります.
次回は当初の予定どおりに各設定やメンテについて触れていこうと思います.
コメント