Help us understand the problem. What is going on with this article?

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

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 の方が便利ですね。

Yack-Deculture
元々Z80/80x86のAssemblyとか組込系、C/C++、200人規模の職場のDNS/メールサーバ/Webサーバ運用、AWK/Perl、HTML/PHP/SQLとかをやってたLaTeX好きEmacs使いのロートルですが、最近ボケ防止と仕事上の実益も兼ねてPython3やJavaScript、VBScript/VBA、Git、Redmineを勉強中です。
https://github.com/katsuya1128
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away