シェルのコード
set +e
dd if=/dev/zero of=zero bs=4k ; rm -f zero
使った理由
Windows上にHyperVでLinux/ubuntuを構築して、Trac/SVN/Jenkinsなサーバを動かしてるんですが、(少し古い)Windowsをベースにしたせいもあって、ハードディスクの空きに余裕がない。
これ自体は、数か月を目途に交換予定ですが、とりあえず、HyperVの仮想ハードディスクを「容量可変」にして運用し始めました。
数週間後、仮想ubuntuのハードディスクの空き領域は十分なのに、仮想ハードディスクファイルの容量が肥大化していました。どうやら仮想領域の「ゼロじゃない」領域も仮想ハードディスクファイルに含まれているようです。
つまり、一度ファイルが出来て、それを消してもその領域はファイル化されたまま残っていくようなのです。
そういうことなら、領域をゼロフィルすればいいのですが、linuxでゼロフィルする上のコードの2行目は、いったん残り容量一杯のゼロで埋められたファイルを作って、それを削除する挙動なので、Jenkinsで動かすとファイルを作った時点で「ディスクの空きがありません」エラーで止まってしまいます。実行が止まらないように、1行目を追加しています。
jenkinsのジョブが途中で止まってしまうと、ゼロフィルしたファイルが残ってディスクの空きがない状態になってしまうので、結構面倒です。