Способы сжатия виртуального диска. Различные подходы, плюсы и минусы

Сегодня хотелось бы поговорить об операции сжатия виртуального диска (Compact Disk). Это процедура уменьшения размера, который файл динамического виртуального диска (Dynamic VHD) занимает на файловой системе родительского раздела (физическом диске). Ведь как только на физическом диске закончится свободное место — все виртуальные машины, работающие на этом диске, перейдут в состояние «Paused/Critical» и прекратят свою работу.

Иногда администраторы настолько обеспокоены этой угрозой, что заранее распределяют и ограничивают размер диска каждой виртуальной машины. Для этого используются фиксированные виртуальные диски (Fixed VHD). Они занимают на физическом диске весь указанный объем сразу на этапе создания. Это удобно для тех ситуаций, когда один вместительный физический диск (или LUN) используется для запуска большого количества виртуальных машин. При этом суммарный размер виртуальных дисков может приближаться к объему физического диска. Однако фиксированные виртуальные диски занимают много места и крайне неудобны при копировании и переносе. Кроме того, это не всегда спасает от вышеуказанной проблемы. Ведь помимо собственно виртуальных дисков, место может запросто оказаться занято снимками (Snapshot). Или всё место займёт одна виртуальная машина, к которой подключён единственный динамический диск . Тех, кого беспокоит именно такой случай, жду в комментариях к статье. Если эта проблема окажется актуальна — поговорим о квотировании дискового пространства для виртуальных машин.

Для динамических виртуальных дисков характерна и другая проблема. Зачастую размеры файла виртуального диска на физическом диске вырастают до большого значения. Тогда как в действительности на этом виртуальном диске остаётся много свободного места. Которое, однако, остаётся занятым с точки зрения родительской системы. Такое может случиться, например, если вы провели в виртуальной машине операцию резервного копирования. В процессе этого на виртуальном диске создаётся временный файл резервной копии, что влечёт за собой рост динамического диска. Затем резервная копия переносится в специализированное хранилище или на ленту, из виртуальной машины файл удаляется, место на файловой системе гостевой ОС освобождается. Но, разумеется, виртуальный диск при этом не уменьшается. Он продолжает занимать много места — тогда как объём полезной информации, которая на нём хранится, остаётся небольшим.

Решением обеих только что описанных проблем как раз и является операция сжатия виртуального диска. Она позволяет уменьшить размер файла с виртуальным диском до минимально возможного, освобождая место на физическом диске и облегчая процесс переноса. Как же следует выполнять операцию сжатия? Существует два подхода к решению этой задачи.

Способ первый. Virtual Server, Virtual PC, Windows Virtual PC

Это более старый способ. Он использует API таких продуктов, как Virtual Server 2005, Virtual PC 2004/2007 или Windows Virtual PC для Windows 7. При запуске операции сжатия производится поблочное сканирование файла виртуального диска на наличие полностью пустых блоков. Если блок целиком заполнен только нулями, то при операции сжатия этот блок не копируется. Да, именно не копируется. Для сжатия дисков фактически создаётся новый виртуальный диск, в который последовательно копируются все ненулевые блоки из исходного (сжимаемого) диска.

Для повышения эффективности этой процедуры в Virtual Server и Virtual PC существовала утилита «Disk Pre-Compactor». Она занимается тем, что «зануляет» (т.е. заполняет нулями) неиспользуемое место на диске. Ведь, как известно, при удалении файла в ОС обычно удаляется лишь ссылка на сам файл в файловой таблице. По соображениям производительности ОС не удаляет сами данные с диска. Но поскольку информация об использовании ранее занятой области диска удаляется, это место теперь считается незанятым — и виртуализация тут ни при чем. Очевидно, что раз на диске фактически остались данные, они вряд ли являются сплошными нулями. В результате при сжатии виртуального диска это место не будет считаться свободным и не будет освобождено. Отдельно скажу, что предварительная дефрагментация диска (перед запуском Disk Pre-compactor) позволяет добиться ещё меньшего размера результируемого диска.

Итак, чем достоинства и недостатки такого подхода?

Плюсы:

  • Работает с любой файловой системой внутри виртуального диска, так как анализирует диск поблочно. Ведь очевидно, что блок, заполненный нулями, остаётся таковым при использовании любой файловой системы. (Однако Pre-compactor оптимизирует только диски с файловой системой FAT и NTFS).
  • Может сжимать дифференциальные виртуальные диски (только при использовании Windows Virtual PC в Windows 7).
  • Работает на любой ОС, где возможна установка Virtual Server или Virtual PC.

Минусы:

  • Для достижения эффективного результата требуется предварительный запуск утилиты Disk Pre-compactor.
  • Для достижения оптимального результата требуется предварительная дефрагментация всех томов внутри виртуального диска.
  • Требует дополнительного дискового пространства на физическом диске для создаваемой копии со сжатым виртуальным диском.
  • Читает и записывает все данные поблочно, что является не очень быстрым процессом и требует определенного времени для больших дисков.

Способ второй. Hyper-V Manager и Native VHD в Windows 7

Это новая технология сжатия. Он используется в Hyper-V Manager и в консоли Disk Administrator в Windows 7 и Windows Server 2008 R2 (так называемая «встроенная поддержка виртуальных дисков» — Native VHD). Вначале для всех разделов, расположенных внутри виртуального диска, из файловой таблицы NTFS считывается информация о расположении файлов и папок. Затем блоки, не содержащие файлов, перечисленных в таблице, просто удаляются из виртуального диска. Операция проводится напрямую над исходным виртуальным диском без создания второго файла и копирования информации. В чем же достоинства и недостатки нового подхода?

Плюсы:

  • Не требуется предварительной подготовки диска. Единственное требование (справедливое, впрочем, и для первого способа) — сжимаемый в настоящий момент виртуальный диск не должен использоваться запущенными виртуальными машинами или быть подключен к родительской ОС через консоль Disk Administrator.
  • Не требует дополнительного пространства на физическом диске, так как не копирует данных.
  • Работает значительно быстрее старого метода сжатия.

Минусы:

  • Поддерживается лишь файловая система NTFS.

Пользователи Windows 7, установившие себе Windows Virtual PC, могут использовать любой из этих способов или попробовать оба. Расскажите нам о результатах!