アメリエフの技術ブログ

Amelieff Staff Blog

余裕が大事

linuxには、処理中の一時ファイルを出力する/tmpや/var/tmpというディレクトリがあります。

巨大ファイルのソートなど、一時ファイルを大量に出力する処理では、/tmpディレクトリの空き容量が足りないと処理が止まります。

そんな時の解決策をまとめてみました。

解決策1./tmpディレクトリ内のファイルを削除して、空きを増やす

linuxには/tmp内の10日以上更新されていないファイルを自動的に削除するしくみがあります(/var/tmpは30日)。

通常はこれで十分なようですが、NGSのデータは大きいので、解析を続けていると自動削除が間に合わず/tmpがいっぱいになってしまう場合があります。
その場合、/tmp以下のファイルを手動で削除して容量を空けてあげます。

/tmp以下には基本的に「消されて困らないものしか置かない」ことになっていますので、基本的には削除してしまって大丈夫なのですが、怖い場合は他の場所(自分のホームディレクトリなど)に移動するのでもいいです。

ただし使用中のファイルがある可能性がありますので、実行中のプロセスを確認してから行いましょう。


解決策2.一時出力先を/tmp以外に変更する

コマンドによっては、一時出力先を変更できるものがあります。
例えば、sortでは「-T」オプション、javaでは「-Djava.io.tmpdir」オプションで任意出力先を指定できます。

$ sort -T /home/hat/mytmp IN.txt > OUT.txt

$ java -Djava.io.tmpdir=/home/hat/mytmp -jar SortSam.jar I=IN.bam O=OUT.bam SO=coordinate


これなら/tmpディレクトリの空きを気にしなくていいです。

注意点として、自分で指定した先に出力された一時ファイルは時間が経ってもlinuxに自動削除されませんので、不要になったら手動で消す必要はあります(一時ファイルは、処理が終わると削除されるものも多いですが)。

コマンドのオプションで変更できない場合は、以下のようにenvコマンドで環境変数TMPDIRを指定して実行することにより、実行中の間だけ一時出力先を変更することもできます。

$ env TMPDIR=mytmp samtools sort IN.bam OUT


解決策3.環境変数TMPDIRを設定する

~/.bashrcに
「export TMPDIR=/home/hat/mytmp」
のように設定すれば、以降は一時出力先としてそこが使われます。


この「/tmp空き不足」問題は、朝から晩まで熱心に解析されているお客様ほど発生しやすいので、こちらも最大限のサポートをご提供できるよう、対策ノウハウをためていきたいと思います。
もっと良い解決策をご存知の方はぜひご教示ください。