• 2012年頃に苦し紛れで実施。今となってはもう使わない方法。次のようなシェルを用意し、子ホストで動作させる。
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
## -------------------------------------------------------------------------
## 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権限で以下を実行する。

1
# dd if=/dev/zero of=00temp bs=20971520 count=nnn
1
2
3
4
【count=nnn計算式】
nnn= (  使用可能サイズ[kb] / 20480[kb] ) -1
(nnnの小数部をカットして整数値とする)
[kb]:キロバイト
  • 例えば「df」コマンドの出力が以下だったとする。
1
2
3
4
5
6
7
# 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

となるので、

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

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

1
# rm ZEROtemp