ディスク容量不足によるソート競合を正しく処理します。

ディスク容量不足によるソート競合を正しく処理します。

sortHPCシステムで大容量ファイル(500 GB以上)を実行しています。sorts複数のジョブが単一ノードで実行でき、ジョブのsort370 GB RAM制限を超えると、そのノードの1 TBディスクsortに移動されます。スペースが不足する/scratchと、期待どおりに並べ替えが中断されます。他のインスタンスのスペースを解放する/scratchために、このインスタンスで生成された特定のファイルをクリーンアップしたいと思います。どのファイルが作成されたかを確認する方法はありますか?sortsortsort

答え1

実行失敗後にクリーンアップするには、sortユーティリティが終了した後に残された一時ファイルが何であるかを正確に知る必要があります。一時ファイルの生成を後で削除されるディレクトリに制限する方が簡単です。

を使用して一時ディレクトリを作成し、パス名を設定してmktempそのsortディレクトリを使用できます。TMPDIR

tmpdir=$( mktemp -d /scratch/sort-XXXXXXXX )
trap "rm -rf '$tmpdir'" EXIT

TMPDIR=$tmpdir sort -t$'\t' -k1,1 -k2,2 -k5,5nr -o sorted.tab --parallel=4 unsorted.tab

これは下に一時ディレクトリを作成し、/scratchそのパス名をシェル変数に割り当て、tmpdir呼び出しTMPDIR時に環境変数をこの値に設定しますsort

ユーティリティにはとして使用できるオプションがsortありますが、環境内で設定することは移植可能です。-T-T "$tmpdir"TMPDIRsort

呼び出し後に設定したトラップは、スクリプトがmktemp終了するたびにディレクトリが削除されることを保証します。明らかにトラップを使用する代わりに、rm -rf "$tmpdir"呼び出し後にこれを行うことができます。sort

関連情報