zfs listがスナップショットの実際のサイズを出力しないのはなぜですか?

zfs listがスナップショットの実際のサイズを出力しないのはなぜですか?

そのため、zfsベースのバックアップサーバーの空き容量がなくなり、古いバックアップをいくつか削除しましたが、後でファイルシステムの空き容量が解放されませんでした。

最初の推測?まだ古いスナップショットが残っています。だから私は以下を実行しました。

zfs list -t snapshot | grep "pool/backups@"

実際にはいくつかあります:

NAME                                USED    AVAIL   MOUNTPOINT
pool/[email protected]  4.81M   0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0
pool/[email protected]  270K    0       0

ところで、先ほど削除した約400Gサイズのスナップショットが出ると予想しましたが、USED注目すべきサイズのスナップショットはまったくありません。

私は文字通り別の場所で問題を見つけるために数時間を費やし、ついに実行しました。

zfs destroy -nv pool/backups@

驚くべき結果は次のとおりです。

will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will destroy pool/[email protected]
will reclaim 421G

私の質問は:なぜzfs listスナップショットの実際のサイズが表示されないのですか?当初、スナップショットが消費する実際のスペースを取得するにはどうすればよいですか?

答え1

私も同じ問題がありましたが、答えを受けました。r/zfs。問題は、そのUSED列にそのスナップショットに固有のブロックのみが表示されることです。複数のスナップショット間でブロックが共有されている場合は、まったく表示されません。これにより、スナップショットを削除するときにUSED正しいスペースが再開され、そのスナップショットのブロックが他のスナップショットで引き続き使用される場合、スペースはゼロに近づきます。

スナップショットを順番に削除すると、最終的にそのブロックを参照するスナップショットが1つだけ残り、突然すべてのスペースが列に表示されますUSED

理想的ではありませんが、一理があると思います。 400 GB は複数のスナップショット間で共有されますが、そのうちの 1 つを削除しても空き領域がない場合はどのように表示しますか?

答え2

私が見るには、これがあなたのコマンドバージョンのバグのようですzfs。 FreeBSDのバグレポートを確認してください。

これはほぼ確実に出力/表示のバグです。 (ストレージ会計に関するより深い問題であれば、非常に奇妙な振る舞いが見つかります。)

zfsonlinux0.6.5.6 マイシステムのスペースを正しく表示このスナップショットは「使用済み」列から:

# zfs list -t snapshot -r backup/hosts/kali
NAME                           USED  AVAIL  REFER  MOUNTPOINT
[...deleted...]
backup/hosts/kali@2016-05-24   526M      -  44.1G  -
backup/hosts/kali@2016-05-25   162M      -  44.1G  -
backup/hosts/kali@2016-05-26   137M      -  44.1G  -
backup/hosts/kali@2016-05-27   116M      -  44.1G  -
backup/hosts/kali@2016-05-28   195M      -  44.0G  -
backup/hosts/kali@2016-05-29   528M      -  44.4G  -
backup/hosts/kali@2016-05-30      0      -  44.5G  -

ファイルbackup/hosts/kaliシステム自体は次のとおりです。

# zfs list backup/hosts/kali
NAME                USED  AVAIL  REFER  MOUNTPOINT
backup/hosts/kali  48.5G  4.06T  44.5G  /backup/hosts/kali

ファイルシステムとスナップショットについて、これらのフィールドが何を意味するのか、man zfs検索、Native Propertiesおよびreferenced/または詳細を確認してください。used

-oオプションを参照してくださいzfs list。これを使用してエラーをバイパスし、目的の出力を正確に取得できます。

例えば

# zfs list -o space backup/hosts/kali
NAME               AVAIL   USED  USEDSNAP  USEDDS  USEDREFRESERV  USEDCHILD
backup/hosts/kali  4.06T  48.5G     4.03G   44.5G              0          0

しかし、コマンドに従ってパイプする必要はありませんzfs list...。試してみてください。grepzfs list -t snapshot | grep "pool/backups@"zfs list -t snapshot -r pool/backups

関連情報