前回からの続きです。
・swap領域をゼロクリアする
不要なファイルの削除が終わったので、ここからはシングルユーザーモードに移行して作業を続けます。次に実行するのはswap領域のゼロクリアです。
仮想マシンのメモリに余裕があってswap領域をほとんど使っていないような場合でも、ゲストOSでシステムのハイバネートを実行していれば、メモリイメージがswap領域に書き込まれます。
一度swap領域に書き込まれた内容は、明示的に消去しない限りそのまま残っていますので、それをゼロクリアすることで仮想ディスクのサイズを減らすことが可能です。
ただし、正確に言えばここでゼロクリアするのはswap領域ではなく、swapパーティション(またはswapファイル)全体です。
swapパーティション全体をゼロクリアすれば、スーパーブロックやswapヘッダもその対象になりますが、そこにはパーティションのUUIDやラベルが記録されています。
最近のLinuxは使用するswap領域をUUIDやラベルで判断するようになっていますので、ゼロクリアした後に元のUUIDやラベルを付け直しておかないと、swap領域として使用されなくなる場合があります。
それを避けるため、手順としては、wipefsコマンドで調べたUUIDとラベルをあらかじめメモしておいて、パーティション/ファイル全体をddコマンドを使ってゼロクリアした後にmkswapコマンドでUUIDやラベルを含めてswap領域として初期化することになります。
swapヘッダには他にもページサイズやswapバージョン等が記録されていますが、ページサイズはカーネル次第ですし、最近のカーネルはバージョン1のswap領域しか利用できなくなったので、メモする必要はありません。
なお、複数のOSでswapパーティションを共有している場合や、パーティションのサイズだけを後から変更してパーティションテーブルに誤った情報が記録されているような場合、swapパーティション全体をゼロクリアすることで問題が発生することがあります。
VirtualBoxの仮想ディスクでそのような運用をしていることはあまり無いだろうとは思いますが、心当たりがある方は一応ご注意ください。