VMwareToolが入ってない場合に、未使用領域をゼロ埋めしてshrinkできるようにする

  • 2012年頃に苦し紛れで実施。今となってはもう使わない方法。次のようなシェルを用意し、子ホストで動作させる。
    ## -------------------------------------------------------------------------
    ## Script Name  :
    ##  Created by  : T.Naritomi
    ##          on  : 2012.08.31
    ##  Updated by  :
    ##          on  :
    ##  Parameters  :
    ##  Return Code : 0=Normal End
    ##     Comments : shrink hdd image for vmware. count = ((availableSize) / 20480) - 1
    ## -------------------------------------------------------------------------

    ## ---detail----------------------------------------------------------------
    TMP_FILE=zero.fil
    LOG_FILE=$0.log

    rm -f ${LOG_FILE}

    dd if=/dev/zero         of=/${TMP_FILE} bs=20971520 count=870           >> ${LOG_FILE}
    sync ; sync ; sync ; rm -f /${TMP_FILE}                                 >> ${LOG_FILE}

    dd if=/dev/zero         of=/var/${TMP_FILE} bs=20971520 count=930       >> ${LOG_FILE}
    sync ; sync ; sync ; rm -f /var/${TMP_FILE}                             >> ${LOG_FILE}

    exit
  • dfコマンドで取得したマウントポイント単位でcount値をできるだけ空き領域サイズの計算値に近づける。/dev/zeroを空き領域に書き込んでおき、OS停止させたら親ホストのvmwareからshrinkさせる。
  • ゼロ値化:子OSのroot権限で以下を実行する。
# dd if=/dev/zero of=00temp bs=20971520 count=nnn
【count=nnn計算式】
nnn= (  使用可能サイズ[kb] / 20480[kb] ) -1
(nnnの小数部をカットして整数値とする)
[kb]:キロバイト
  • 例えば「df」コマンドの出力が以下だったとする。
# df
Filesystem           1K-ブロック    使用   使用可 使用% マウント位置
/dev/sda1             20125340   4351292  14751740  23% /
none                    247348       620    246728   1% /dev
none                    253964       236    253728   1% /dev/shm
none                    253964       112    253852   1% /var/run
none                    253964         0    253964   0% /var/lock

この場合「nnn」は、
nnn = ( 14751740 / 20480 ) -1
≒ 719
となるので、
 

# dd if=/dev/zero of=ZEROtemp bs=20971520 count=719

を実行する。(ディスク容量不足の警告が出る)これで、OS用に「約20Mバイト」残してあとは「ゼロ値化」ファイル”ZEROtemp”で埋まる。実行終了後、すぐに「ゼロ値化」ファイル”00temp”を削除する。

#  rm ZEROtemp

コメント