
を使用してzpool
空き容量を一覧表示すると、空き容量は270 GB以上と表示されますが、実際の空き容量(およびで示すdf
)zfs list
はわずか40 GBで、ほぼ10倍少なくなります。
$ zpool list
NAME SIZE ALLOC FREE CKPOINT EXPANDSZ FRAG CAP DEDUP HEALTH ALTROOT
ssdtank 7.25T 6.98T 273G - - 21% 96% 1.00x ONLINE -
$ zpool iostat -v
capacity operations bandwidth
pool alloc free read write read write
---------------------------------- ----- ----- ----- ----- ----- -----
ssdtank 6.98T 273G 1 15 365K 861K
ata-Samsung_SSD_860_QVO_4TB_S123 3.49T 136G 0 7 182K 428K
ata-Samsung_SSD_860_QVO_4TB_S456 3.49T 137G 0 8 183K 434K
$ zfs list
NAME USED AVAIL REFER MOUNTPOINT
ssdtank 6.98T 40.6G 32K /srv/tank
この違いはどういう意味ですか?これら2つのユーティリティが異なる空き領域を表示するのはなぜですか?もっと重要なのは、「追加」200GBが存在する場合はどのようにアクセスできますか?
プールはRAIDや他の設定なしで2つの同じディスクで構成され、上部にファイルシステムが作成された通常のvdevとしてプールに追加されます。 (表示されたルートには複数のファイルシステムがありますが、すべて同じルートを共有し、同じ40.6Gの空き容量を持つため、互いに関連性がないと思います。)
要求に応じて、出力は次のようになりますzfs get all
。 (今日の空きディスク容量は変更されているため、理解できるように上記の数字も更新しました。以前の数字は257 GB / 27 GBで、現在は273 GB / 40 GBです。)量だけ増えました。つまり、zpoolは他のすべてより約270GB多いと報告されているようですが、当時の実際の空き容量よりも常に270GB多いです。
NAME PROPERTY VALUE SOURCE
ssdtank aclinherit restricted default
ssdtank acltype off default
ssdtank atime off received
ssdtank available 40.6G -
ssdtank canmount on default
ssdtank casesensitivity sensitive -
ssdtank checksum on default
ssdtank compression off default
ssdtank compressratio 1.00x -
ssdtank context none default
ssdtank copies 1 default
ssdtank createtxg 1 -
ssdtank creation Sat Oct 26 21:53 2019 -
ssdtank dedup off default
ssdtank defcontext none default
ssdtank devices on default
ssdtank dnodesize legacy default
ssdtank encryption off default
ssdtank exec on default
ssdtank filesystem_count none default
ssdtank filesystem_limit none default
ssdtank fscontext none default
ssdtank guid 12757787786185470931 -
ssdtank keyformat none default
ssdtank keylocation none default
ssdtank logbias latency default
ssdtank logicalreferenced 16K -
ssdtank logicalused 6.98T -
ssdtank mlslabel none default
ssdtank mounted yes -
ssdtank mountpoint /srv/tank local
ssdtank nbmand off default
ssdtank normalization none -
ssdtank objsetid 54 -
ssdtank overlay off default
ssdtank pbkdf2iters 0 default
ssdtank primarycache all default
ssdtank quota none default
ssdtank readonly off default
ssdtank recordsize 128K default
ssdtank redundant_metadata all default
ssdtank refcompressratio 1.00x -
ssdtank referenced 32K -
ssdtank refquota none default
ssdtank refreservation none default
ssdtank relatime off default
ssdtank reservation none default
ssdtank rootcontext none default
ssdtank secondarycache all default
ssdtank setuid on default
ssdtank sharenfs [email protected]/24 received
ssdtank sharesmb off default
ssdtank snapdev hidden default
ssdtank snapdir hidden default
ssdtank snapshot_count none default
ssdtank snapshot_limit none default
ssdtank special_small_blocks 0 default
ssdtank sync standard default
ssdtank type filesystem -
ssdtank used 6.98T -
ssdtank usedbychildren 6.98T -
ssdtank usedbydataset 32K -
ssdtank usedbyrefreservation 0B -
ssdtank usedbysnapshots 0B -
ssdtank utf8only off -
ssdtank version 5 -
ssdtank volmode default default
ssdtank vscan off default
ssdtank written 0 -
ssdtank xattr on default
ssdtank zoned off default
答え1
ZFSは、使用可能なスペースが非常に少なくても、いくつかの重要なZFS操作を完了するために内部的に小さなスペース(スキューされたスペース)を予約します。
金額は3.2%総プール容量。 zfs-0.6.5
7.25Tの3.2% = 235GB
実際、ファイルシステムには40.6GBの空き容量しかありません。
zpoolはrawディスク容量を報告し、利用可能なスペースは40 + 235 = 275Gです。
答え2
Binarystaの回答に追加するには、次のように予約されている( "slop")スペースの量を調整できます。spa_slop_shift
基準寸法オプション。
これZFS-on-Linuxモジュールのドキュメントデフォルト値 5 は、大規模な配列に対してあまりにも保守的であることが多すぎる可能性があるため、より少ないスペースが予約されるように増やしてもかまいません。 (ZFSを実行している他のオペレーティングシステムにも同様のオプションがあります。)
デフォルト値 5 は 2^5 = 32 と解釈されます。これはプール容量の 1/32 です。spa_slop_shift
6(以前のZFSバージョンで使用されていた値)に設定すると、プール容量の1/64のみが予約されることを意味します。
少ないスペースを確保すると、断片化が増加し、多数の異なるブロックを管理するためにより多くのメモリが必要になる場合があります。したがって、ドキュメントでは、4 TB RAM を搭載したシステムの実際の上限として 15 (プールスペースの 1/32768) をお勧めします。ファイルシステムがいっぱいになっても断片化されないことを保証することができれば、メモリ要件はより低くなる可能性があります。
絶対最小スロップスペースは128MiBなので、200GBはちょっと無理のようで、spa_slop_shift
一応は6に変更させていただきます。各増分は予約済みスペースの量を半分に減らすため、私の場合、5から6に増やすと、予約済みスペースが200 GBから100 GBに半分に減ります。もちろん、これはすぐに100GiBの空き容量をさらに提供しました。
Linuxで実行中に値を一時的に変更したい場合は、再起動せずにモジュールパラメータを変更できます。
echo 6 > /sys/module/zfs/parameters/spa_slop_shift
これはすぐに適用され、追加のdf
スペースがすぐに表示されます。
変更を永久に適用するには、以下を作成、編集、追加し/etc/modprobe.d/zfs.conf
ます。
options zfs spa_slop_shift=6