web-dev-qa-db-ja.com

ZFS上のファイルを削除しても、ディスク領域は解放されません

ファイルを削除してZFSのスペースを解放しようとしています。それらは大きい(> 1GB)ので、数字で表示されるはずです。残念ながら、ファイルのリンクを解除した後、dfは使用可能なスペースの増加を示していません。削除されたファイルのどこかにハードリンクがあるように見えます(ただし、手動でハードリンクを作成しない限り、lsはすべてのファイルのハードリンクカウンターを_1_と表示します(テスト済み))。

ファイルを削除するスクリプトは、これらのファイルを開いたり、読み取ったり、閉じたりするため(確認しました)、開いているファイルハンドルはありません。その後、unlink()を使用してファイルを削除します。 lsもそれらを表示しなくなりました。使用可能なディスク容量だけは増加しません。

スナップショットのZFS機能を使用しています。たぶんこれが何も解放されない理由ですか?

私の問題に関するアイデアやドキュメントへのヒントは大歓迎です。

2
Alfe

Oracleの zfsドキュメント によると、

スナップショットは、ファイルシステムまたはボリュームの読み取り専用コピーです。スナップショットはほぼ瞬時に作成でき、最初はプール内の追加のディスク領域を消費しません。ただし、アクティブなデータセット内のデータが変更されると、スナップショットは古いデータを参照し続けることでディスクスペースを消費するため、ディスクスペースが解放されなくなります。

ディスクスペースを解放したい場合は、そのファイルを参照しているスナップショットをクリアする必要があります。 copy-on-write を読むこともできます。これは、 zfsの動作 です。

私は実際にはzfsの経験はありませんが、 btrfs を利用しています。 btrfsはzfsと同様の方法でスナップショットを作成し、まったく同じ「問題」がそこに表示されます。もちろん、現在のワーキングセットで削除されたファイルをスナップショットから削除したくないので、使用可能なディスク容量を期待しますファイルを削除するときは一定のままです。結局のところ、(すべてのスナップショットにわたる)すべての参照が削除されるまで、ファイルは実際には削除されません。

2
ChrisInEdmonton