ZVOLの奇妙なZFSディスク領域使用状況レポート


8

FreeBSD 10.0-CURRENTホストに100G ZVOLがあり、176Gのディスク容量を使用すると主張しています。

root@storage01:~ # zfs get all zroot/DATA/vtest
NAME              PROPERTY              VALUE                  SOURCE
zroot/DATA/vtest  type                  volume                 -
zroot/DATA/vtest  creation              Fri May 24 20:44 2013  -
zroot/DATA/vtest  used                  176G                   -
zroot/DATA/vtest  available             10.4T                  -
zroot/DATA/vtest  referenced            176G                   -
zroot/DATA/vtest  compressratio         1.00x                  -
zroot/DATA/vtest  reservation           none                   default
zroot/DATA/vtest  volsize               100G                   local
zroot/DATA/vtest  volblocksize          8K                     -
zroot/DATA/vtest  checksum              fletcher4              inherited from zroot
zroot/DATA/vtest  compression           off                    default
zroot/DATA/vtest  readonly              off                    default
zroot/DATA/vtest  copies                1                      default
zroot/DATA/vtest  refreservation        none                   local
zroot/DATA/vtest  primarycache          all                    default
zroot/DATA/vtest  secondarycache        all                    default
zroot/DATA/vtest  usedbysnapshots       0                      -
zroot/DATA/vtest  usedbydataset         176G                   -
zroot/DATA/vtest  usedbychildren        0                      -
zroot/DATA/vtest  usedbyrefreservation  0                      -
zroot/DATA/vtest  logbias               latency                default
zroot/DATA/vtest  dedup                 off                    default
zroot/DATA/vtest  mlslabel                                     -
zroot/DATA/vtest  sync                  standard               default
zroot/DATA/vtest  refcompressratio      1.00x                  -
zroot/DATA/vtest  written               176G                   -
zroot/DATA/vtest  logicalused           87.2G                  -
zroot/DATA/vtest  logicalreferenced     87.2G                  -
root@storage01:~ # 

これはバグのように見えますが、volsizeスナップショット、予約、および子がない場合、どのようにそれを消費できますか?または、何かが足りないのでしょうか?

更新:

の結果zpool status -v

root@storage01:~ # zpool status -v
  pool: zroot
 state: ONLINE
  scan: scrub repaired 0 in 0h6m with 0 errors on Thu May 30 05:45:11 2013
config:

        NAME           STATE     READ WRITE CKSUM
        zroot          ONLINE       0     0     0
          raidz2-0     ONLINE       0     0     0
            gpt/disk0  ONLINE       0     0     0
            gpt/disk1  ONLINE       0     0     0
            gpt/disk2  ONLINE       0     0     0
            gpt/disk3  ONLINE       0     0     0
            gpt/disk4  ONLINE       0     0     0
            gpt/disk5  ONLINE       0     0     0
        cache
          ada0s2       ONLINE       0     0     0

errors: No known data errors
root@storage01:~ # 

の結果zpool list

root@storage01:~ # zpool list
NAME    SIZE  ALLOC   FREE    CAP  DEDUP  HEALTH  ALTROOT
zroot  16.2T   288G  16.0T     1%  1.05x  ONLINE  -
root@storage01:~ # 

の結果zfs list

root@storage01:~ # zfs list
NAME                            USED  AVAIL  REFER  MOUNTPOINT
zroot                           237G  10.4T   288K  /
zroot/DATA                      227G  10.4T   352K  /DATA
zroot/DATA/NFS                  288K  10.4T   288K  /DATA/NFS
zroot/DATA/hv                  10.3G  10.4T   288K  /DATA/hv
zroot/DATA/hv/hv001            10.3G  10.4T   144K  -
zroot/DATA/test                 288K  10.4T   288K  /DATA/test
zroot/DATA/vimage              41.3G  10.4T   288K  /DATA/vimage
zroot/DATA/vimage/vimage_001   41.3G  10.5T  6.47G  -
zroot/DATA/vtest                176G  10.4T   176G  -
zroot/SYS                      9.78G  10.4T   288K  /SYS
zroot/SYS/ROOT                  854M  10.4T   854M  /
zroot/SYS/home                 3.67G  10.4T  3.67G  /home
zroot/SYS/tmp                   352K  10.4T   352K  /tmp
zroot/SYS/usr                  4.78G  10.4T   427M  /usr
zroot/SYS/usr/local             288K  10.4T   288K  /usr/local
zroot/SYS/usr/obj              3.50G  10.4T  3.50G  /usr/obj
zroot/SYS/usr/ports             895K  10.4T   320K  /usr/ports
zroot/SYS/usr/ports/distfiles   288K  10.4T   288K  /usr/ports/distfiles
zroot/SYS/usr/ports/packages    288K  10.4T   288K  /usr/ports/packages
zroot/SYS/usr/src               887M  10.4T   887M  /usr/src
zroot/SYS/var                   511M  10.4T  1.78M  /var
zroot/SYS/var/crash             505M  10.4T   505M  /var/crash
zroot/SYS/var/db               1.71M  10.4T  1.43M  /var/db
zroot/SYS/var/db/pkg            288K  10.4T   288K  /var/db/pkg
zroot/SYS/var/empty             288K  10.4T   288K  /var/empty
zroot/SYS/var/log               647K  10.4T   647K  /var/log
zroot/SYS/var/mail              296K  10.4T   296K  /var/mail
zroot/SYS/var/run               448K  10.4T   448K  /var/run
zroot/SYS/var/tmp               304K  10.4T   304K  /var/tmp
root@storage01:~ # 

アップデート2:

さまざまなパラメーターで多数のZVOLを作成しdd、コンテンツを移動するために使用しました。別の奇妙なことに気づきました。ディスク使用量は、16kおよび128kのZVOLでは正常でありvolblocksize、8kのZVOL volblocksizeでも異常のままでしたdd(これは断片化の問題ではありません)。

root@storage01:~ # zfs get all zroot/DATA/vtest-3
NAME                PROPERTY              VALUE                  SOURCE
zroot/DATA/vtest-3  type                  volume                 -
zroot/DATA/vtest-3  creation              Fri May 31  7:35 2013  -
zroot/DATA/vtest-3  used                  201G                   -
zroot/DATA/vtest-3  available             10.2T                  -
zroot/DATA/vtest-3  referenced            201G                   -
zroot/DATA/vtest-3  compressratio         1.00x                  -
zroot/DATA/vtest-3  reservation           none                   default
zroot/DATA/vtest-3  volsize               100G                   local
zroot/DATA/vtest-3  volblocksize          8K                     -
zroot/DATA/vtest-3  checksum              fletcher4              inherited from zroot
zroot/DATA/vtest-3  compression           off                    default
zroot/DATA/vtest-3  readonly              off                    default
zroot/DATA/vtest-3  copies                1                      default
zroot/DATA/vtest-3  refreservation        103G                   local
zroot/DATA/vtest-3  primarycache          all                    default
zroot/DATA/vtest-3  secondarycache        all                    default
zroot/DATA/vtest-3  usedbysnapshots       0                      -
zroot/DATA/vtest-3  usedbydataset         201G                   -
zroot/DATA/vtest-3  usedbychildren        0                      -
zroot/DATA/vtest-3  usedbyrefreservation  0                      -
zroot/DATA/vtest-3  logbias               latency                default
zroot/DATA/vtest-3  dedup                 off                    default
zroot/DATA/vtest-3  mlslabel                                     -
zroot/DATA/vtest-3  sync                  standard               default
zroot/DATA/vtest-3  refcompressratio      1.00x                  -
zroot/DATA/vtest-3  written               201G                   -
zroot/DATA/vtest-3  logicalused           100G                   -
zroot/DATA/vtest-3  logicalreferenced     100G                   -
root@storage01:~ # 

そして

root@storage01:~ # zfs get all zroot/DATA/vtest-16
NAME                 PROPERTY              VALUE                  SOURCE
zroot/DATA/vtest-16  type                  volume                 -
zroot/DATA/vtest-16  creation              Fri May 31  8:03 2013  -
zroot/DATA/vtest-16  used                  102G                   -
zroot/DATA/vtest-16  available             10.2T                  -
zroot/DATA/vtest-16  referenced            101G                   -
zroot/DATA/vtest-16  compressratio         1.00x                  -
zroot/DATA/vtest-16  reservation           none                   default
zroot/DATA/vtest-16  volsize               100G                   local
zroot/DATA/vtest-16  volblocksize          16K                    -
zroot/DATA/vtest-16  checksum              fletcher4              inherited from zroot
zroot/DATA/vtest-16  compression           off                    default
zroot/DATA/vtest-16  readonly              off                    default
zroot/DATA/vtest-16  copies                1                      default
zroot/DATA/vtest-16  refreservation        102G                   local
zroot/DATA/vtest-16  primarycache          all                    default
zroot/DATA/vtest-16  secondarycache        all                    default
zroot/DATA/vtest-16  usedbysnapshots       0                      -
zroot/DATA/vtest-16  usedbydataset         101G                   -
zroot/DATA/vtest-16  usedbychildren        0                      -
zroot/DATA/vtest-16  usedbyrefreservation  886M                   -
zroot/DATA/vtest-16  logbias               latency                default
zroot/DATA/vtest-16  dedup                 off                    default
zroot/DATA/vtest-16  mlslabel                                     -
zroot/DATA/vtest-16  sync                  standard               default
zroot/DATA/vtest-16  refcompressratio      1.00x                  -
zroot/DATA/vtest-16  written               101G                   -
zroot/DATA/vtest-16  logicalused           100G                   -
zroot/DATA/vtest-16  logicalreferenced     100G                   -
root@storage01:~ # 

これは断片化の可能性があると思われますが、それを証明する方法はわかりません
Alex

スナップショットに関連しているのでしょうか?
スティーブウィルズ2013年

いいえ、このボリュームにスナップショットはありません
Alex

ZFSボリューム/ファイルシステムで圧縮が無効になっているのを見ると悲しいです。とにかく、あなたが投稿できるzpool status -vzpool listzfs list
ewwhite 2013年

1
これでわかるすべてから、それはバグのように見えます。子供や予約などがない場合、ボリュームサイズが100Gのzvolの「使用済み」は、100Gをはるかに超えてはなりません。おそらく、実際には200 GB以上のvolsizeであり、volsizeパラメータを変更したのでしょうか。そうでない場合、FreeBSD-10.0はまだ製品リリースではありません。バグを報告してください。
Nex7 2013年

回答:


2

VOLSIZEは、クライアントに表示されるボリュームのサイズを表し、プールに格納されているボリュームのサイズではありません。

この違いは、複数のソースから生じている可能性があります。

  • メタデータに必要なスペース
  • 複数のコピーを保存するために必要なスペース(「コピー」パラメータ)
  • 「volblocksize」サイズのブロックをvdev構造に位置合わせする際のパディングが原因で「無駄なスペース」。vdev構造とは、2つのパラメーターを意味します。raidz-N内のディスク数とデバイスの物理ブロックサイズです。

ボリュームを作成する場合、ZFSはなり見積もり、そのクライアントに「VOLSIZE」のボリュームを提示することができるようにするために使用する必要がありますどのくらいのスペース。vtest-16とvtest-3のボリュームに違いがあることがわかります(refreservationは102GB、volsizeは100GBです)。計算はlibzfs_dataset.cにあります(zvol_volsize_to_reservation(uint64_t volsize、nvlist_t * props))

その計算で考慮されていないのは3番目のソースです。3番目のソースは、512バイトのセクターを持つディスクで作成されたvdevにほとんど影響を与えません。私の実験から(チェックするためにzvol全体を埋めることでテストしました)、vdevが新しい4Kセクターディスク上に作成されると、かなりの違いが生じます。

私の実験でもう1つわかったことは、ミラーを使用しても、計算された予約と最終的に何が使用されるかの違いが示されないことです。

これらは、デフォルトのvolblocksize(8K)のボリュームを持つ4Kドライブを使用した場合の私の結果です。最初の列は、vdev内のディスクの数を表します。

    raidz1  raidz2
3   135%    101%
4   148%    148%
5   162%    181%
6   162%    203%
7   171%    203%
8   171%    217%
9   181%    232%
10  181%    232%
11  181%    232%
12  181%    232%

これらは、512バイトのセクタードライブとデフォルトのvolblocksizeが8Kの場合の私の結果です。最初の列は、vdev内のディスクの数を表します。

    raidz1  raidz2
3   101%    101%
4   104%    104%
5   101%    113%
6   105%    101%
7   108%    108%
8   110%    114%
9   101%    118%
10  102%    106%
11  103%    108%
12  104%    110%

私の結論は次のとおりです:

  • 4Kドライブを使用しない
  • それらを本当に使用する必要がある場合は、32K以上のvolblocksizeを使用してボリュームを作成してください。パフォーマンスへの影響はごくわずかで、スペース使用量のオーバーヘッドはごくわずかです(ブロックサイズが大きいほど、適切に調整するために必要なパディングが少なくなります)。
  • プールにはミラーのストライプを優先します。このレイアウトには、パフォーマンス上の利点と、このようなスペースに関連する驚きが少ない利点があります。
  • 上記で概説したケースでは推定が明らかに間違っており、これはzfsのバグです。

2
のあるプールで4kドライブを使用ashift=9すると、問題が発生することがわかっています。これは新しいことではありません。ブロックサイズを変更しても、ドライブは整列しません。正しい解決策は、でプールを作成することashift=12です。
クリスS

ashift=124Kドライブではこれを解決しません。実際、ashift=125個の4Kドライブとraidzを備えたzpoolでは、消費されるスペースは上記に近く、たとえば7Tボリュームは11Tを消費します。
drookie 2017

-1

私がこれを正しく読んでいる場合、実際logicalreferencedにはボリューム上に87.6 GBのデータがあります。あなたが見ている170 GBの数値は、データが使用する物理スペースの量です。したがって、ドライブをミラーリングしている場合、私はreferenced約2倍になると予想しますlogicalreferenced


HMM、同じプールに別のFSを有し、referenced 3.50Gそしてlogicalreferenced 3.00Gそう2X比がプールにFSes間で一貫していません。
Alex

ちなみに、プールはraidz2プレーンミラーではありません
アレックス

ええ、VMで簡単なテストをいくつか行っただけで、私の理論は成り立ちませんでした。
ロングネック、2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.