Да оптимизираме дисковете на виртуалните ни машини
|Ако ви се налага да работите с виртуални машини, със сигурност ви се е искало да позабързате стартиран ето или изпълнението на процесите в тях. Ако погледнем реално, това, което бави най-много нашите виртуални PC-та, са дисковите операции. За жалост, стартирането на няколко инстанции във VPC , Hyper-v или Virtual Server 2005 генерира множество, паралелни, дискови операции, които се конкурират за дисков ресурс. Едно от решенията е да се закупи по-бърз диск, да се конфигурират няколко в RAID 0 (stripe) или да се инвестира в хардуерно решениe (NAS, SAN). Разбира се, изборът на който и да е от тези варианти е съпътстван с допълнителни разходи в националната или пък други валути.
Нещо, което може да направим съвсем безплатно, е да се оптимизира достъпът до диска. Как да стане това? Решението е просто, но ефективно – да пишем по-малко и по възможност последователно по диска. Един от вариантите, за да накараме виртуалната операционна система да пише по-малко, е да повишим оперативната памет и забраним Page файла. Друг вариант е да отделим виртуалните дискове на различен от системния за реалната операционна система диск. Това са прости и ефективни начини да оптимизираме достъпа до диска, но това, поради което започнах да пиша тази статия, е да ви разкажа как да оптимизирате самите виртуални дискове.
Тук вариантите също са няколко. Първо, може да използваме виртуални дискове с фиксирана големина на файла. Предимството пред динамично нарастващите виртуални дискове е по-малката фрагментация и съответно по-бързият достъп. Негативите са заемане на излишно дисково пространство, което може да бъде използвано за други цели, както и по-дълъг процес на backup и restore. Ако това е наклонило везните в полза на по-гъвкавите, динамично нарастващи дискове (Dynamically expanded ), то пред нас стоят две задачи: да държим размера на .vhd файла минимален и възможно най-дефрагментиран. По-надолу ще разгледаме какви инструменти са предоставили Microsoft за тази цел, както в Hyper-v, така и във Virtual PC и Virtual server 2005.
За да имаме оптимален като големина и разположение на физическия диск .vhd файл, трябва да се направят няколко манипулации.
Първата ни задача е да се изтрият всички ненужни файлове от виртуалната машина. Disk Cleanup е един полезен инструмент за тази цел.
Следващата стъпка е да се стартира процес, който маркира свободните сектори от виртуалния диск и ги занулява. Това се налага, тъй като след изтриване на файл, файловата система на виртуалната машина не занулява освободените сектори. Ако това не се направи, впоследствие няма как да се разграничат свободните от заетите сектори в конкретния .vhd файл и да се отстранят в процеса на свиване размера на файла. За целта се използва инструментът Precompactor. Той е наличен след инсталация на Microsoft Virtual PC 2007 SP1 или Virtual Server 2005 R2 SP1. Ако не сте променили пътя за инсталиране, то файлът Virtual Disk Precompactor.iso се намира в папката C:\Program Files\Microsoft Virtual PC\Virtual Machine Additions. Заредете .iso файла в CD-то на работещата все още виртуална машина и стартирайте precompact.exe. Изчакайте процеса да приключи,след което изгасете виртуалната машина.
За да се намали реално размерът на самия .vhd файл, имаме различни подходи. Например, в Hyper-v може да използваме Edit Disk от лентата Action на Hyper-V Manager и след като посочим .vhd файла, да маркираме Compact от екрана с манипулации.
При Microsoft Virtual PC за тази цел може да се използва Virtual Disk Wizard от менюто File на конзолата.
След като изберете Edit an existing virtual disk, а на следващия екран – Compact it, може да запишете намаления виртуален диск върху стария или като нов.
Ето какъв е резултатът от тази процедура:
Разбира се, ако не ползвате Hyper-V или Virtual PC, трябва да потърсите къде са аналогичните команди в продукта за виртуализация, с който работите.
Последното нещо, което трябва да се направи, е да се оптимизира достъпът до .vhd файла във файловата система на физическия компютър. Това може да стане или чрез дефрагментиране на целия физически диск, или чрез дефрагментиране само на конкретния .vhd файл. За да дефрагментирате само конкретен файл, може да използвате безплатния инструмент на Sysinternals – Contig , който може да свалите от тук. Ето например, как изглежда при мен командата за дефрагментиране на файла XPDisk.vhd.
Сега вече може да направите Backup или да стартирате отново виртуалната машина. Има ли разлика?
Господин Йончев,
Вие сериозно ли съветвате администраторите да конфигурират дисковете на production системите ви в RAID 0 ? Ако някой от дисковете съхраняващи ценна корпоративна информация се повреди, тогава последната грижа ще са I/O операциите (ако нямате backup, разбира се).
Поздрави
Боян
Здравейте, Боян,
Разбира се, че не съветвам важни данни да се съхраняват върху единични дискове, камо ли пък върху чист RAID 0, където възможността за загуба на информация расте с броя дискове. В статията обсъждам не много подробно, методи за оптимизация на входно-изходните операции и едно такова решение, предполагам знаете, представлява RAID 0. Истината е, че то рядко се използва самостоятелно, освен за информация, която лесно може да се възстанови, като например за съхранение на временни файлове (temp) или за лабораторни постановки. За съхранение на важна информация с оптимизиран достъп се използват решения от сорта на RAID 1+0 или RAID 0+1. Разбира се, има и други чисто хардуерни технологии за оптимизиране на достъпа, които също струват допълнителни разходи, както съм описал. Съжалявам, че съм оставил грешно впечатление у вас, взимам си бележка. Успешен ден.