Интересный момент касательно thin дисков проясняют тут: Reclaiming unused VMDK space with storage thin provisioning.
Поясню, к чему это относится:
Когда мы создаем диск ВМ (например, в 100ГБ размером), мы выбираем тип файла-диска:
thick или thin.
В первом случае файл сразу резервирует под себя места на диске. 100 ГБ диск ВМ займет на системе хранения 100 ГБ.
Во втором случае файл создается нулевого размера, и растет по факту затребования места изнутри. Записали внутрь еще 500 мегабайт - он на них и вырос.
Это все хорошо. Плохо же то, что если мы внутри ВМ 500 МБ удалим, файл-диск не уменьшится. И если 5000 удалим, тоже не уменьшится. Сколько не удалим, не уменьшится, потому что с т.зрения схд удаления не происходила. Это гостевая ОС в своей файловой системе какие то блоки пометила как "их можно использовать". Получается, со стороны ESX(i) нельзя определить, какие из занятых блоков на самом деле свободны.
В общем, вот рецепт как отнять таки ранее востребованное, но потом освобожденное месте, т.е. как уменьшить vmdk файл в thin режиме:
- Скачиваем утилиту sdelete внутрь ВМ.
- Натравливаем ее на тот диск, где есть удаленные данные, командой
sdelete - c E:
это для диска E:\
- Теперь необходимо сделать Storage VMotion этой ВМ, и указав
Change to Thin Provisioned Disk даже если диск еще не thin но вы хотите его таким сделать
или можно указать
Keep Disk Format
если диск ВМ уже thin.
А каков глубокий смысл использования sdelete?
ОтветитьУдалитьЛично я эту проблему решаю следующим образом:
1) Если надо "пожать" машину в рамках одного стораджа:
#!/bin/sh
E_BADARGS=85
if [ $# -ne 1 ]
then
echo "usage : $0 VMname"
echo " VMname - name of VM"
exit $E_BADARGS
fi
VM=$1
VMDK=$VM.vmdk
FLAT=$VM-flat.vmdk
VMDKTHIN=$VMDK-thin
FLATTHIN=$FLAT-thin
vmkfstools -i $VMDK -d thin $VMDKTHIN
rm -rf $VMDK
rm -rf $FLAT
mv $VMDKTHIN $VMDK
mv $FLATTHIN $FLAT
sed -i -e "s/$FLATTHIN/$FLAT/g" $VMDK
2) Если попутно необходимо перенести VM на другой сторадж
ОтветитьУдалить#!/bin/sh
E_BADARGS=85
if [ $# -ne 3 ]
then
echo "usage : $0 vmname dstoresource dstoredest"
echo " vmname - name of VM"
echo " dstoresource - name of source datastore"
echo " dstoredest - name of destination datastore"
exit $E_BADARGS
fi
VMNAME=$1
DSTORESOURCE=$2
DSTOREDEST=$3
VMXPATH=`vmware-cmd -l | grep "/${VMNAME}.vmx"`
SOURCE=/vmfs/volumes/$DSTORESOURCE/$VMNAME
DESTINATION=/vmfs/volumes/$DSTOREDEST/$VMNAME
mkdir $DESTINATION
#unregister
vmware-cmd -s unregister $DSTORESOURCE/${VMNAME}.vmx
#migrate from source
cd $SOURCE
for file in *
do
if (echo $file | grep "flat.vmdk"); then
#-- flat vmdk file, no action
:
elif (echo $file | grep "vmdk"); then
#-- vmdk file : thin provisionning
vmkfstools -i $file -d thin $DESTINATION/$file
else
#-- other file : copy
cp -p $file $DESTINATION
fi
done
#register new location
vmware-cmd -s register $DESTINATION/${VMNAME}.vmx
спасибо.
ОтветитьУдалитьДа, забыл сказать, что скрипты сделаны под 3.5
ОтветитьУдалить