Поиск по сайту:

VMWare: необходима консолидация дисков виртуальных машин


Предупреждение «Необходима консолидация дисков виртуальной машины» на вкладке «Сводка» виртуальной машины в консоли VMware vSphere Client означает, что при удалении снимков (с использованием параметров «Удалить» или «Удалить все») остались файлы. на диске, который не удалось объединить (зафиксировать) с основным файлом виртуального диска (vmdk). В результате вы не сможете выполнить резервное копирование такой виртуальной машины, и ее производительность ухудшится.

Virtual machine Consolidation Needed status.
Virtual Machine disks consolidation is needed.

Наиболее типичными причинами ошибки «Необходима консолидация дисков виртуальной машины» являются:

  • Низкая производительность хранилища, из-за которой снимки невозможно удалить/объединить из-за таймаута или большого размера снимка;

  • В хранилище данных VMFS недостаточно свободного места для выполнения консолидации, должно быть не менее 1 ГБ свободного места (см. как увеличить емкость хранилища данных VMFS в VMware ESXi);

  • Файлы моментальных снимков блокируются vSphere или сторонним приложением (обычно приложением резервного копирования, например HP DataPtotector, Veeam или Netapp VSC). Убедитесь, что не запущены процессы резервного копирования ВМ;

    Проблема может быть вызвана добавлением дисков виртуальной машины (горячее добавление) к устройству резервного копирования при выполнении резервного копирования. В некоторых случаях необходимо вручную отключить виртуальные диски проблемных ВМ в настройках устройства резервного копирования (это происходит в Veeam Backup Proxy, Symantec NetBackup и CommVault Media Agent).

  • ВМ имеет более 32 снимков (максимальное количество, рекомендованное VMware);

  • Запущен фоновый процесс консолидации больших снимков;

  • Проблемы с подключением (возможно, временные) между сервером vCenter и хостом ESXi.

Как объединить диски в VMware?

Чтобы исправить ошибку «Требуется консолидация виртуальной машины», щелкните правой кнопкой мыши виртуальную машину и выберите VM -> Действия -> Снимки -> Объединить.

Появится окно со следующим запросом:

Confirm Consolidate
This operation consolidates all redundant redo logs on your virtual machine. Are you sure you want to continue?

Подтвердите, что вы хотите удалить избыточные журналы. Затем vCenter объединит диски и очистит журналы. Процесс консолидации может занять много времени в зависимости от размера виртуальной машины, количества снимков и текущей нагрузки хоста/хранилища данных. Во время консолидации производительность виртуальной машины может ухудшиться. Дождитесь завершения задачи «Объединить файлы диска виртуальной машины».

При выполнении консолидации данные с дельта-дисков объединяются с основным диском и удаляются ненужные файлы из хранилища. После этого предупреждение об объединении ВМ исчезнет.

Ошибки блокировки файлов консолидации дисков

В некоторых случаях при выполнении консолидации вы можете увидеть эту ошибку в консоли vSphere:

Unable to access file since it is locked. An error occurred while consolidating disks: Failed to lock the file. Consolidation failed for disk node ‘scsi0:0’: Failed to lock the file.

или

Consolidate virtual machine disk files - Unable to access file since it is locked.

В этом случае VMware рекомендует перезапустить агенты управления на сервере ESXi. Для этого подключитесь к хосту ESXi через SSH и выполните следующую команду:

services.sh restart

Если это не помогло, проверьте, кто заблокировал файлы виртуальной машины.

  1. Перейдите в каталог виртуальной машины в хранилище данных VMFS:

    # cd /vmfs/volumes/xxxxxx-xxxxxx-xxxx-xxxxxxx/WINSRV1
  2. Перечислите заблокированные файлы виртуальных машин и укажите, какие хосты ESXi содержат эти файлы:

    # for i in `ls`; do vmfsfilelockinfo -p $i ;done|grep 'is locked in\|Host owning the lock\|Total time taken' | sed 's|Host owning the lock on file is||g'|sed 's|Total time|---|g' | awk '{print $1}' |uniq
  3. Предыдущая команда вернет что-то вроде этого:

    ---
    "WINSRV1-bf11abd3.vswp"
    Esxi01,
    ---
    "WINSRV1-flat.vmdk"
    Esxi02,
    Esxi01
  4. В этом примере вы можете видеть, что файл WINSRV1-flat.vmdk заблокирован двумя хостами. Чтобы снять блокировку файла со второго хоста, подключитесь к Esxi02 через SSH и выполните команды:

    # /etc/init.d/hostd restart
    # /etc/init.d/vpxa restart
  5. Запустите консолидацию из интерфейса клиента vSphere.

Также вы можете попробовать разблокировать файлы ВМ следующим образом:

  1. Выключите виртуальную машину, если это возможно;

  2. Создайте новый снимок;

  3. Удалите все снимки виртуальных машин, используя опцию «Удалить все»;

  4. Переместите работающую ВМ на другой ESXi с помощью vMotion;

  5. Попробуйте объединить снимки, как описано выше.

Если опция «Объединить» в меню виртуальной машины неактивна (кнопка неактивна), а в хранилище данных все еще имеется большое количество файлов дельта-снимков, скорее всего целостность цепочки снимков нарушена (ошибка:

Unable to enumerate all disks

).

Попробуйте вручную удалить виртуальную машину из списка (Удалить из инвентаря) и перерегистрировать VMX-файл виртуальной машины в браузере хранилища данных. Если это не помогло, проверьте и исправьте ошибки в цепочке снимков, как описано здесь:

The parent virtual disk has been modified since the child was created

(https://kb.vmware.com/s/article/1007969).

Консолидация снимков виртуальной машины с помощью PowerCLI

Найти все виртуальные машины, требующие консолидации, можно с помощью PowerCLI (этот модуль позволяет управлять инфраструктурой VMware). Для этого подключитесь к вашему серверу vCenter или хосту ESXi:

Connect-VIServer mun_vsphere.active-directory.ru

Получите список всех ВМ со статусом «Необходима консолидация дисков виртуальных машин»:

Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded}

Теперь вы можете объединить диски всех виртуальных машин в списке:

Get-VM | Where-Object {$_.Extensiondata.Runtime.ConsolidationNeeded} | foreach {$_.ExtensionData.ConsolidateVMDisks_Task()}

Вы можете автоматически консолидировать снимки виртуальных машин старше 30 дней с помощью следующего сценария PowerShell:

$VMName = Get-VM | Get-Snapshot |
Where {$_.Created -lt (Get-Date).AddDays(-30)} | select VM |
ForEach-Object {
$VMName.ExtensionData.ConsolidateVMDisks()
}

Статьи по данной тематике