再帰的に巡回せずにZFSから大規模ディレクトリを一括削除します。

再帰的に巡回せずにZFSから大規模ディレクトリを一括削除します。

zfsデータセットサブディレクトリのコンテンツを削除したいと思います。これは大量のデータです。プール「nas」の場合、パスは次のようになります。/nas/dataset/certainFolder

$ du -h -d 1 certainFolder/
1.2T    certainFolder/

待たなければならない代わりに、rm -rf certainFolder/ディレクトリへのハンドルを削除して上書きできるようにすることはできません(再作成として選択した場合は、ディレクトリ名が同じでも)。

たとえば、zfsファイルシステムの内部、特にファイルの記録方法がわからない場合は、そのログ/マップに直接アクセスして、ディレクトリが表示されなくなるように正しいエントリを削除できるかどうかを知りたいと思います。 。スペースディレクトリもある種の監査から削除する必要があります。

見つけることができるショートカットがありますか?でも外部3fs、またはこれが再帰削除コマンドが実行する最初の操作、つまりログを盗んで編集することですか?

kill thisDir私は一種のIDを削除し、ディレクトリが表示されなくなった同様のことをしたいと思いますls -la。明らかに、データはまだドライブにありますが、ZFSはとてもクールなので、スペースは再利用(上書き)されます。

私の言葉は私の考えではジブス本当に素敵ですね。私たちはどうですか?理想的には?両手をこすります:-)

私の特定のユースケース(私の好きなものに加えてzfs)はバックアップ/アーカイブ管理です。データは、SMBを介してWin Boxのfreefilesync(AWESOME PROG)を介してzfsプールにzfsにプッシュされます。長い間使用できなかったrm -rf /nas/dataset/certainFolder用語が削除されると停止します。puttyもちろん、続行するには別の端末を開く必要があります。それは時代遅れであり、rm -rfを監視するのは楽しいことではなく、数時間かかることがあります。

たとえば、ハンドルを解放するコマンドを設定して&からstdoutとして印刷する必要があります。それではよさそうです。 もっと現実的にzfs destroy nas/dataset; zfs create -p -o compression=on nas/dataset、@Gilles の応答を考慮した後、数秒でデータセットを再生成します。

ベストアンサー1

まともなファイルシステムでは、解放されたブロックを追跡することは避けられません。例外なくしかし、ZFSでは、ほとんどすぐにディレクトリを削除する簡単な方法があります。基本的なクリーンアップを「延期」します。技術的には、Gilesの提案と非常に似ていますが、本質的に健全であり、追加のコードは必要ありません。

ディレクトリを削除する前にファイルシステムのスナップショットを作成すると、その下で何も検索/解除する必要はなく、すべてがスナップショットによって参照されるため、ディレクトリの削除は非常に高速です。その後、スペースが徐々に回復するようにバックグラウンドでスナップショットを削除できます。

d=yourPoolName/BackupRootDir/hostNameYourPc/somesubdir
zfs snapshot ${d}@quickdelete && { 
    rm -rf /${d}/certainFolder
    zfs destroy ${d}@quickdelete & 
}

おすすめ記事