LoginSignup
0
0

More than 3 years have passed since last update.

VirtualBox の VMI の不使用部分を一括で圧縮する

Last updated at Posted at 2019-01-26

VirtualBox の Guest OS 上で不使用部分を 0 で埋めてから、Host OS 上で VBoxManage.exe を使って不使用部分を圧縮することにより、Host OS 上の VMI のファイルサイズを縮小する事ができます。
ただ、UUID を調べたりなんやりで結構面倒です。そこで、私の環境では Bash on Git for Windows があったので、ここで動作する Shell Script を作成してみました。
存在する VMI をすべて一括で圧縮します。

vmi-compact.sh
#!/bin/bash
#
# Vurtula Box のドライブの 空白部分を圧縮する。
#
# Guest OS (Linux) で以下のコマンドを実行し、未使用領域を 0 で埋めてから実行
# もしも、細かくパーティションを分けていたら、それぞれのパーティション上で
# 実行が必要になる
#
# dd if=/dev/zero of=/tmp/zero bs=4k; rm /tmp/zero
#
#   bs の値はファイルシステムに依る

# 環境に合わせて実行ファイルへのパスを調整
VMAN='/c/Program Files/Oracle/VirtualBox/VBoxManage.exe'

uuids=`"${VMAN}" list hdds | sed -n 's/^UUID:[ ]*//p' | xargs`

for id in ${uuids[@]}; do
    "${VMAN}" showmediuminfo $id
    "${VMAN}" modifymedium $id --compact
    "${VMAN}" showmediuminfo $id
done

要は VBoxManage list hdds で取得した UUID で modifymedium を回しているだけですが。
私は、Windows PowerShell は思想が違いすぎてついて行けないので、自動化についてはやっぱり MS-Windows よりも Unixen の方が便利ですね。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0