web-dev-qa-db-ja.com

btrfsシステムのすべてのスナップショットでファイルを削除するにはどうすればよいですか?

私は、毎時、毎日、毎週、毎月のバックアップで洗練されたバックアップスキームを設定しました。これは、(btrfs cow-filesystemの栄光のおかげで)デバイス上の余分なスペースをほとんど占有しません。

しかし、残念ながら、私は昔ながらの方法でスペースを使い果たしました(多くのものにコピーすることによって)。

すべてのスナップショットに保持されるため、何かを削除しても意味がありません。ディスク領域を解放するには、ファイルが最初にデバイスにコピーされてから、すべてのスナップショットを削除する必要があります。私はそれをしたくないので

  • これが正確にいつだったかを知るのは難しいです(特にファイルがそれ以降に変更された場合)
  • それらのスナップショット内の他のすべてのファイルの履歴を失いたくない
  • スナップショットへのアクセスは、スナップショットをマウントすることによってのみ実行できます。root-fsの場合は、rm -fを実行するよりも少し複雑です。

では、すべてのスナップショットで1つのファイルを削除するようにbtrfsに指示するにはどうすればよいですか?事実上、これは、スペースを解放できるように、内部参照カウンターをゼロに設定することを意味します。

これがbtrfsツール自体では不可能な場合(少し近視眼的です)、すべてのスナップショットでファイルの検索、マウント、削除のタスクを簡単にすることができるサードパーティのツールにも満足しています。

3
Chaos_99

回避策の1つは、スナップショットを一時的に書き込み可能に設定し、スナップショットが表示されるすべてのスナップショットのファイルを削除することです。

スナップショットを書き込み可能に設定するには( btrfsスナップショットを書き込み可能にする方法 ):

btrfs property set -ts <snapshot> ro false

ファイルを削除して空き容量を増やしてから、で読み取り専用に戻します。

btrfs property set -ts <snapshot> ro true

ファイルへのすべての参照がなくなるとすぐに、btrfsはより多くの空き領域があることを検出します。

残念ながら、この方法は、以前のファイルの名前がわからなくなった場合にはあまり役に立ちません。ただし、 Baobab または K4DirStat またはdu -h | sort -hを使用して、スナップショット内の大きなファイルの場所を見つけることができます。

また、スナップショットを含むディレクトリをマウントするだけであれば、すべてのスナップショットを個別にマウントする必要はありません。

7
Ziphilt