2010年12月13日月曜日

VirtualBoxで仮想ディスクのサイズを減らしてみた(3)

前回前々回からの続きですので、先にそちらをご覧ください。

・空き領域をゼロクリアする。

swap領域のゼロクリアが完了しましたので、次は既にインストール済みのzerofreeコマンドを使ってディスクの空き領域をゼロクリアします。

zerofreeはext2/ext3ファイルシステムに対応したツールと紹介される事が多いので、ext4ファイルシステムには未対応という誤解もあるようですが、実際には作者であるR M Yorston氏のページにも記載があるように、ext4にも対応しています。

ただし、ext4への対応は、zerofreeが依存しているe2fslibsパッケージがext4にも対応していることが前提になります。今回はUbuntu 10.10のzerofreeパッケージを使用していますので、その点については問題はありません。

次に、zerofreeの実行対象となるパーティションは、マウントが解除されているか、読み込み専用でマウントされている必要があります。逆に言えば、元々マウントされていなかったパーティションをzerofreeを実行するためにわざわざ読み込み専用でマウントする必要はありません。

読み込み専用で再マウントが必要なのは、コマンドの実行のためにマウントを解除できないパーティションに対してzerofreeを実行したい場合です。この場合、事前にいくつかのサービスを停止しておかないと再マウントが失敗することがあります。

実際の作業はイカの通りです。

  1. blkidコマンドでzerofreeを実行する対象パーティションのデバイスファイル名を確認します。
    # blkid
    /dev/sda1: UUID="2e1f4c48-20b5-4967-99ef-71bccbda3955" TYPE="ext4"
    /dev/sda5: UUID="ba2bcc50-0d11-4dfc-a8b9-9c1a2faabc77" TYPE="swap"
    zerofreeはパーティションのUUIDやラベルを壊すことはありませんので、末尾が「TYPE="swap"」ではないデバイスファイル名だけメモしてください。
  2. パーティションの再マウントのために、rsyslog、network-manager、DHCPクライアントを終了します。
    # service rsyslog stop
    rsyslog stop/waiting
    # service network-manager stop
    stop: Unknown instance:
    # killall dhclient
    dhclient: no process found
    今回はnetwork-managerとDHCPクライアントが動作していなかったのでエラーが表示されましたが、気にしないでください。
  3. 読み書き可能な状態でマウント中のパーティションを読み込み専用で再マウントします
    # mount -n -o remount,ro /dev/sda1
    もし再マウントに失敗した場合は、
    mount: / is busy
    のようなエラーが表示されますので、「service --status-all」コマンドで実行中のサービスを確認して適宜停止してください。
  4. 再マウントしたパーティションの空き領域をゼロクリアします。
    # zerofree -v /dev/sda1
    
    進行中の状態がパーセンテージで表示され、最終的に/で区切られた3つの数字が表示されます。最初の数字がゼロクリアされたブロック数になります。
  5. 24.から25.の作業をゼロクリアが必要なパーティションの数だけ繰り返します。
  6. 「shutdown -h now」コマンドで仮想マシンを終了します。
    # shutdown -h now

続く

0 件のコメント:

コメントを投稿