Оптимизация виртуальных дисков Linux/Windows для виртуальных машин VMware

archive view archive save

article Оптимизация виртуальных дисков Linux/Windows для виртуальных машин VMware подразумевает под собой снижение размера виртуального диска, а значит и некоторое повышение производительности.

Сначала нам нужно зачистить свободное место нулями в самой виртуальной машине, а потом уже выполнять оптимизацию виртуального диска vmware-vdiskmanager -k F:\my-virtual-disk.vmdk

Иногда это даст снижение в размере диска с 3.900 МБ до 2.700 МБ, а также повысит производительность виртуальной машины

В самой виртуальной машине Windows выполняем заполнение свободного пространства нулями - это можно сделать консольной программой sdelete, которая входит в состав пакета "СисьИнтэрналс" от Марка РабРусиновича:)

C:\>sdelete -h
 
SDelete - Secure Delete v1.61
Copyright (C) 1999-2012 Mark Russinovich
Sysinternals - www.sysinternals.com
 
usage: sdelete [-p passes] [-s] [-q]  ...
       sdelete [-p passes] [-z|-c] [drive letter] ...
   -a         Remove Read-Only attribute
   -c         Clean free space
   -p passes  Specifies number of overwrite passes (default is 1)
   -q         Don't print errors (Quiet)
   -s or -r   Recurse subdirectories
   -z         Zero free space (good for virtual disk optimization)
 

После того как забили нулями свободное место на диске, выполняем:

C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager \
    -k F:\my-virtual-disk.vmdk

Перед выполнением vmware-vdiskmanager, виртуальную машину нужно выключить, а иначе vmware-vdiskmanager не сможет получить доступа к файлу виртуального диска:

C:\Program Files\VMware\VMware Workstation>vmware-vdiskmanager \
    -k F:\my-virtual-disk.vmdk
FILE: FileIO_Lock on 'F:\my-virtual-disk.vmdk' failed: Lock timed out
FILE: FileIO_Lock on 'F:\my-virtual-disk.vmdk' failed: Lock timed out

ВНИМАНИЕ!!! Важно сохранять порядок действий:

  1. Забиваем свободное место виртуального диска нулями;
  2. Оптимизируем (уменьшаем размер) виртуальный диск.

Linux

В ОС Linux для заполнения нулями свободного пространства на диске есть некая утилита zerofree, например "Debian -- Details of package zerofree in squeeze", но для её использования требуется отмонтировать диск или чтобы он был смонтирован в режиме read-only (только чтение).

Второй способ, менее геморройный, использование стандартной программы "dd", с помощью которой можно создать файл забитый нулями на все свободное место на диске, а потом удалить его:

dd if=/dev/zero of=null.file
dd: writing to 'null.file': No space left on device
4978617+0 records in
4978616+0 records out
2549051392 bytes (2.5 GB) copied, 128.901 seconds, 19.8 MB/s
rm -Rf null.file

После этого выключаем виртуальную машину и выполняем:

vmware-vdiskmanager -d /path/to/my-virtual-disk.vmdk

Для Debian-а и Ubunt-ы есть некая прога Ubuntu Manpage: sfill - secure free disk and inode space wiper (secure_deletion toolkit).

Итоги

Подобную процедуру я выполняю для всех своих виртуальных машин с интервалом в 3-6 мес., когда вижу что .vmdk начал неоправданно занимать в два размера больше всех файлов реально хранящихся на самом виртуальном диске, после чего виртуальные .vmdk диски местами худеют почти в два раза!

Что касается "Zero free space (good for virtual disk optimization)" от sdelete, то я думаю, что это относится только к виртуальным дискам, которые крутятся на виртуальных машинах и не имеет никакого отношения к остальным виртуальным дискам, например шифрованным виртуальным дискам и иже с ними, а значит следовало бы перефразировать так "Zero free space (good for virtual disk optimization in virtual machine)"..

Если у кого есть дополнения по оптимизации виртуальных дисков, тогда пишем в комментарии...

Ссылки по теме

Олег Головский


Комментарии в блоге
Новое на форуме