長年にわたり、ストレージシステムは改訂版のバックアップから17億のファイルを収集し、すでにある程度いっぱいです。
それで、5年以上のファイルをすべて削除し始めました。私は約90TByteのデータを含む約17億(!!!)のファイルがあると仮定します。 find または du だけが数週間または数ヶ月かかるため、推定する必要があります。バックエンド自体(mdraid、ext4)はとにかく変更したいので、実際にはそれほど重要ではありません。
一日中ファイルをrm削除するようにしましたが、ファイル全体の約0.1%だけが削除されました。このようにしてすべてを削除するには1〜2年ほどかかることが予想されます。この操作中に一部のドライブがシャットダウンする可能性があります。あまり心配ではありません。 Hotswap RAIDです。
私は通常、ドライブが1日1〜2時間過負荷になっているため、ディスクスラッシングを防ぐためにドライブが使用されていない場合にのみファイルが削除されるように、ionice -c3を使用してきました。やや興味深い点は、私が最初にrmを実行しようとしたときに、数百万のハードリンクが原因でメモリ使用量が約100GByteに増加し、次にコアダンプが発生したことです。だから、タスクをより小さな部分に分割し、単一のサブディレクトリだけを削除すると、ファイルは機能しますが、まだ最高値は20-30GByteです。
私の2つの質問:
- 何年もかからない方法で、このシステムの古いファイルをどのように削除しますか?
たとえば、ファイルは消えたがスペースは返されないようにInode-Structuresを手動で編集し、fsckにシステムを回復させることを検討しました。
他のクレイジーなアイデアも歓迎します。 LVMスナップショットを撮っていつでも復元できます。
- 後で同じ問題が発生しないようにするにはどのような設定がありますか?例えば。さまざまなファイルシステム、さまざまなツールチェーンを使用し、SSDにメタデータ(inode、割り当てテーブルなど)を配置します。データ自体はさまざまな理由でHDに保存する必要があります。
誰もより良いアイデアを持っていない場合は、私が作成したリビジョンの数を大幅に減らし、/または1か月以上のすべてを外部USBドライブにtar / xzします。ユーザーは実際にリビジョンの古いコンテンツにアクセスするのが好きなので、これは悪いことです。
ベストアンサー1
システムにアクセスして実験しないと、何がうまくいくのか、何が役立つのか、何がうまくいかないのかを確認するのは難しいです。しかし、以下はこれを行う方法です。
つまり、不要なファイルを削除せずにディレクトリから削除しmv
(このタスクはクイックタスクである必要があります)、ファイルをゼロサイズに切り捨てます(スペースを確保するため)。rm
ディレクトリを見ることができます。後で(ファイルを完全に削除してinodeを再インポートするために)、このステップ3はシステムの負荷に応じて並列にまたは順次に完了できます。
詳細:
Xディレクトリを作成します。
シェルスクリプトS1では、mv
約N = 500個の不要なファイルをX / latestに入れ、X / X1に名前を変更し、mv
次のN個の不要なファイルをX / latestに入れて名前を変更します。 X / X2の場合は、mv
次のN個の不要なファイルを
挿入してください。 X/latest に入れて X/X1、X/X2、X/X3 に名前を変更し、ファイルを 0 のサイズに切り、ディレクトリ名を X/0X1
に変更します。rm
ここで、ディレクトリの命名は、各シェルスクリプトが独立しており、他のスクリプトを妨げないようにします。 S1はX / latestで動作し、S2はX / X1、X / X2、X / X3 ...で動作します。 /0X1、X/0X2、X/0X3…:競合はありません!
システムの負荷に応じて、手順3を並列に完了できること、および順番に完了できることを確認してください。 Nを変更し、nice
&を使用してionice
システムsleep
の負荷を制御します。
代替提案:
新しい場所を使用して最新バージョンを保存し、デフォルトでユーザーがそこに表示できるようにします。この新しい場所(cp
または)を過去1ヶ月間に作成された修正で埋めることもできます。ユーザーが「すべてのリビジョン」を希望する場合は、以前の場所にのみアクセスできます。これにより、以前の位置が大きくなりません。その後、システムに負荷をかけずに不要な非常に古いリビジョンを簡単に削除できます。mv
rm