web-dev-qa-db-ja.com

VM)のディスク上の未使用スペースを自動クリーニング

KVMベースの仮想化サーバー(つまり、Proxmox)を実行します。DebianベースのマシンはKVM VMで実行されます。ProxmoxはVMのバックアップを作成でき、圧縮もできます。 VMディスクイメージ。

私たちが理解しているように、各VMディスクに保存されるデータが増え、VMディスクの「クリーン」ブロックが「ダーティ」になるため)バックアップサイズは時間の経過とともに増加しています。 (つまり、古いファイルの残りが含まれています)。したがって、そのような仮想ディスク上のすべてのファイルをrm -rfで削除しても、実際には、すべてのファイルがクリアされないため、バックアップは同じサイズになります。 VMディスクのブロック。

dd if=/dev/zero of=/BIG.txt、次にrm -f /BIG.txtのような操作を行うことで、VMディスクをクリア」できます。このようにして、すべてのディスクを使用するゼロでいっぱいの大きなファイルを作成します。スペースとそれを削除した後、その元ブロックにはゼロが含まれます。欠点は、ディスクが一瞬いっぱいになり、何かを書きたいすべてのプログラムに影響を与えることです。

しかし、バックアップがそのようなディスクをより良い速度で圧縮するように、未使用のディスクブロックをゼロでクリアする他の方法があるかもしれませんか?一部のWindowsベースのプログラムには、「未使用のディスク領域をクリアする」オプションがあります(CCleanerなど)が、Linuxでは必要です。

2
Alexander

最近のlibvirt/kvmバージョンは、discard vdiscオプションをサポートしています(SCSI vdiskタイプのみ)。このオプションを有効にすると、ゲストファイルシステムでfstrim /を発行でき、未使用のブロックはホストVMイメージによってすぐに破棄され、穴あけによって圧縮/縮小されます。

詳細については、 ここ (ドライバーセクション、「破棄」を検索)および ここ を参照してください。

トリム/破棄方法を使用できない場合は、現在のゼロ化方法(dd from /dev/zero)をひねりを加えて使用し続けることができます:issuetwo ddパス。それぞれ、空きディスク領域の半分強しかなく、fsync; rm BIG.txtコマンドで区切られています。これは、すべてを一度に埋めることなく、ほぼすべての空き領域を回復するのに十分なはずです。

2
shodanshok