Ошибка virtual machine disks consolidation is needed в ESXI

Обновлено 17.10.2023

virtual machine disks consolidation is needed

Добрый день уважаемые читатели, сегодня расскажу как решается ошибка висящая на виртуальной машине в ESXi 5.5 и звучит она virtual machine disks consolidation is needed. Если перевести это дословно, то вас культурно просят восстановить целостность виртуальной машины, так как это не совсем хорошо, из за этого она может очень сильно проседать по производительности, и как следствие все сервисы в ней.

Устраняем virtual machine disks consolidation is needed в ESXI 5

Вот так вот выглядит эта ошибка, некое такое предупреждающее сообщение на вкладке Summary.

Ошибка virtual machine disks consolidation is needed в ESXI 5.x.x-01

Ошибка virtual machine disks consolidation is needed в ESXI 5.x.x-01

Возникла ошибка virtual machine disks consolidation is needed в ESXI 5.x.x, причина это удаление snapshot. После его удаления остались файлы которые не смогли слиться с основным файлом виртуального диска, и требуется провести консолидацию. Выбираете нужную машину правым кликом меню Power-Consolidate.

Ошибка virtual machine disks consolidation is needed в ESXI 5.x.x-02

Ошибка virtual machine disks consolidation is needed в ESXI 5.x.x-02

После чего произойдет слияние дисков, и предупреждение пропадет. Сам процесс слияние или merge может идти долго, все будет зависеть от некоторых факторов

У меня были случаи в практике, что виртуалка так консолидировалась 3 дня.

Устраняем virtual machine disks consolidation is needed в vCenter 7

На текущий момент у меня гипервизоры ESXI 7, тут эта ошибка так же легко встречается.

virtual machine disks consolidation is needed в vCenter 7

Тут принцип устранения такой же, выключите виртуальную машину и откройте контекстное меню "Snapshot - Consolidate".

Консолидация диска в vCenter 7

Дожидаемся когда закончиться наше задание консолидации.

Процесс консолидации дисков

После завершения задания убедитесь, что статус "virtual machine disks consolidation is needed" пропал.

Успешная консолидация дисков

Что делать, если штатная консолидация не помогла

Вот интересная ситуация, вроде бы задание отработало, но вот статус у виртуальной машины остался "Virtual machine disks consolidation is needed", лишь цвет предупреждения сменился на уведомительный.

Еще если у вас есть Veeam и с его помощью производятся резервные копии, то там в Proxy могут застрять виртуальные диски

Virtual machine disks consolidation is needed

Тут проблема в том, что если вы на уровне датастора посмотрите файлы виртуальной машины, то сможете обнаружить, что там много файлов от снимков.

Список снапшотов в файлах виртуальной машины

Чтобы это поправить, вам необходимо в ручном режиме, создать снапшот и затем его просто удалить. Это позволит механизму обнаружить все имеющиеся снимки и объединить их.

Создание снапшота в vCenter 7

Как объединить снимки из PowerCLI

Все эти же действия можно сделать и через PowerCLI, как его устанавливать смотрите по ссылке слева. Первое, что делаем, это подключаемся или к хосту или к vCenter серверу. Далее нам нужно получить список виртуальных машин с остатками от снимков. Чтобы получить список виртуальных машин, сообщающих о проблеме "Требуется консолидация дисков виртуальных машин", мы можем вызвать командлет Get-VM, чтобы определить, требуется ли консолидация виртуальных машин.

$VMs = Get-VM | Where-Object {$_.ExtensionData.RunTime.ConsolidationNeeded}

Далее выведем просто $VMs. В моем примере нашлось несколько виртуальных машин, где требуется консолидация.

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

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

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

или
ForEach ($VM in $VMs)

{ (Get-VM $VM).ExtensionData.ConsolidateVMDisks() }


Надеюсь вам помогла эта заметка и вы смогли устранить ошибку virtual machine disks consolidation is needed

Скрипт PowerShell для проверки и уведомлений по данной ошибке

Описанный ниже скрипт выполняет такие задачи:

  • 1️⃣Ведет лог с долгохранящимися снапшотами и дисками в статусе "disks consolidation is needed"
  • 2️⃣Проверяет снапшоты старше 30 дней
  • 3️⃣Проверяет виртуальные машины на предмет статуса "disks consolidation is needed"
  • 4️⃣отправляет на почту таблицу с результатами критериев

# Создаем папку с логами если ее нет и будим писать лог файл с датой в виде имени сюда
function Date {Get-Date -Format "yyyy.MM.dd HH:mm:ss"}

$log_folder = "$PSScriptRoot\Logs\" + $($MyInvocation.MyCommand.Name -replace (".ps1", ""))
$log = "$log_folder\$(Get-Date -Format "yyyy_MM_dd_HH_mm_ss").txt"

# Объявляем имя vCenter сервера
$viserver = "vcenter.root.pyatilistnik.org"

###

if (! (Test-Path $log_folder -ErrorAction SilentlyContinue))
{
New-Item $log_folder -ItemType D -Force
}

### Подгружаем VMware.PowerCLI модуль

"$(Date) Start Processing" | Tee-Object $log -Append

"$(Date) Trying to import VMware.PowerCLI module" | Tee-Object $log -Append
try {
Import-Module VMware.PowerCLI -ErrorAction Stop
}
catch {
"$(Date) $($_.exception.message)" | Tee-Object $log -Append
Break
}

# Соединяемся с vCenter сервером
"$(Date) Trying to connect to VIServer $viserver" | Tee-Object $log -Append

# New-VICredentialStoreItem -Host $viserver –User "pyatilistnik\Admin" –Password "*****"
# Get-VICredentialStoreItem
try {
Connect-VIServer -Server $viserver -Force -ErrorAction Stop #-User pyatilistnik\Admin
}
catch {
"$(Date) $($_.exception.message)" | Tee-Object $log -Append
Break
}

### Получаем виртуальные машины у которых снапшоту более 30 дней

"$(Date) Trying to get list of VM Snapshots older than 30 days" | Tee-Object $log -Append
$snapshots = $null
try {
$snapshots = Get-VM | Get-Snapshot | ? {$_.created -le (Get-Date).AddDays(-30)}
}
catch {
"$(Date) $($_.exception.message)" | Tee-Object $log -Append
Break
}

"$(Date) Total snapshots: $($snapshots.Length)" | Tee-Object $log -Append

### Проверка дисков на предмет необходимости консолидироваться

"$(Date) Trying to get list of VM where disk consolidation is needed" | Tee-Object $log -Append
$vms_cons_needed = $null
try {
$vms_cons_needed = Get-VM | ? {$_.Extensiondata.Runtime.ConsolidationNeeded}
}
catch {
"$(Date) $($_.exception.message)" | Tee-Object $log -Append
Break
}

###

$snapshots_data = @()

foreach ($snapshot in $snapshots)
{
$snapshot_data = New-Object PSObject

$snapshot_data | Add-Member -MemberType NoteProperty -Name "VM" -Value $snapshot.VM
$snapshot_data | Add-Member -MemberType NoteProperty -Name "Description" -Value $snapshot.Description
$snapshot_data | Add-Member -MemberType NoteProperty -Name "Created" -Value $(Get-Date $snapshot.Created -Format "dd.MM.yyyy")
$snapshot_data | Add-Member -MemberType NoteProperty -Name "Size, GB" -Value $([math]::Round($snapshot.SizeGB, 1))

# $snapshots | select VM, Description, Created, SizeGB | ConvertTo-Html

$snapshots_data += $snapshot_data
}

###

$vms_cons_needed_out = @()

foreach ($vm in $vms_cons_needed)
{
$vm_consolitation_needed = New-Object PSObject

$vm_consolitation_needed | Add-Member -MemberType NoteProperty -Name "Name" -Value $vm.Name

$vms_cons_needed_out += $vm_consolitation_needed
}

### Формируем список получателей

if ($snapshots.Length -gt 0)
{
$from = "tech@tech.pyatilistnik.org"
$to = "semin@pyatilistnik.org"#
# $cc1 = "test2@pyatilistnik.org"
# $cc2 = "semin@pyatilistnik.org"
# $cc3 = "test2@pyatilistnik.org"
$Subject = "Check important VM Info"
$smtpserver = "tech.pyatilistnik.org"
$secure = $true
$port = 587 # TLS, for SSL use 465
$username = "tech"
$password = '*********'

$Header = @"

# Формируем таблицу с данными
<style>
TABLE {border-width: 1px; border-style: solid; border-color: black; border-collapse: collapse;}
TD {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
TH {border-width: 1px; padding: 3px; border-style: solid; border-color: black;}
</style>
"@
$body = $null
$body += "<p>VM Snapshots older than 30 days:"

$body += $snapshots_data | select VM, Description, Created, "Size, GB" | ConvertTo-Html -Head $Header

$body += "<p>Also check VMs where disk consolidation is needed:"

$body += $vms_cons_needed_out | select Name | ConvertTo-Html -Property "Name" -Head $Header

$body += "<p>Generated on $($env:COMPUTERNAME + "." + $((Get-WmiObject Win32_ComputerSystem).Domain))"

$message = New-Object System.Net.Mail.MailMessage
$message.From = $from
$message.To.Add($to)
# $message.CC.Add($cc1)
# $message.CC.Add($cc2)
# $message.CC.Add($cc3)
# $message.CC.Add($cc4)
$message.Subject = $Subject
$message.Body = $body
$message.IsBodyHtml = $true

$smtp = New-Object Net.Mail.SmtpClient($smtpserver, $port)
$smtp.EnableSsl = $secure
$smtp.Credentials = New-Object System.Net.NetworkCredential($username, $password)

"$(Date) Trying to send e-mail notification" | Tee-Object $log -Append

try {
$smtp.Send($message)
}
catch {
"$(Date) $($_.exception.message)" | Tee-Object $log -Append
}
}

###

"$(Date) End Processing" | Tee-Object $log -Append

На выходе вы будите получать вот такого рода таблицу.

скрипт disks consolidation is needed

Дополнительно

Может быть ситуация, что вы используете прокси Veeam, для ускорения резервного копирования и в нем могут застревать диски, которые будут приводить к проблеме консолидации.

Автор - Сёмин Иван

19 Responses to Ошибка virtual machine disks consolidation is needed в ESXI

  1. Alex:

    Спасибо за информацию, только мне кажется не в пункте «Power», а в пункте «Snapshot».

  2. art:

    Спасибо мне помогло исправить данную ошибку, после veeam осталось так

  3. gratissex:

    your blo was much interesting for me! I will say thanks u a lot to posting the interesting stuff.

  4. nu:

    Your blog is very useful to us! I’ll thank you you very much to posting the interesting information!

  5. Федор:

    Да Помогла.Спасибо.

  6. Дмитрий:

    Это действие выполняется при выключенной виртуальной машине или можно при включенной???? Просто при включенной виртуалке выбивает ошибку
    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.

  7. Иван Семин:

    В большинстве случаев можно на работающей машине, но бывает и таке, что только при выключенной. В вашем случае файлы заблокированы.

  8. Дмитрий:

    Можете подсказать, что делать в моём случае с заблокированными файлами, т.к eSXI я пока слабоват

  9. Иван Семин:

    Точный скриншот ошибки можете прислать

  10. Дмитрий:

    Отправил вам письмо на microsoftexam@yandex.ru

  11. Валентин:

    Спасибо. Оказалось, что проблема решается в 2 клика.

  12. Кирилл:

    Что может быть причиной застревания консолидаци на 100% в ESXi 5.5
    Как через CLI проконтролировать закончился процесс и висит или что-то происходит.
    По состоянию на сейчас — в клиенте внизу прогрессиндикатор стоит на 100%
    VM не стартует. При вводе ls /vmfs/volumes -lah очень длительная пауза, после которой
    ls: /vmfs/volumes/59fc7957-0a74399d-fab7-001e67a1b700: Device or resource busy
    и это как раз проблемный datastor
    Я уже экспериментировал — если хост перегрузить, всё заработает и консолидация больше не потребуется, но, подозреваю, остануться не удалёнными ненужные файлы и я не знаю какие.
    Кстати попытки удалить файлы через cli с этого datastore тоже завешивают консоль.

  13. Иван Семин:

    Вы смотрите по времени изменения файла, если оно не меняется то процесс завис, если меняется, то ждите, у меня на сайте есть про это статья, про снапшоты, прочитайте ее, будет полезно.

  14. Кирилл:

    Ну, в общем я нашёл кое что, про что у Вас не читал — после застопорившегося consolidate любые попытки просмотреть внутренности каталога данного datastore приводят к подвисам или ошибкам, что device busy. Попытка перезагрузки хоста сопровождается евентом в консоли, что есть проблема с power off проблемной машины, хотя она не была запущена. После чего клиент отваливается, хост пинговаться перестаёт, но на экране самого хоста висит штатная заставка, а он сам на клики на клаве не реагирует. Делаем аппаратный poweroff, хост нормально поднимается и проблемная машина нормально стартует. Сообщение о необходимости консолидации не появляется, НО в каталогес VM помимо имяVM-00000x.vmdk есть ещё и имяVM-00000x-sesparse.vmdk. Создаётся впечатление, что подвис происходит на этапе удаления указанных файлов (в основе предположения — когда при первой попытке удалял папку проблемной машины из CLI — тоже всё подвисло). Останавливаем машину, заходим в CLI и переносим все имяVM-00000x.vmdk и имяVM-00000x-sesparse.vmdk в другой каталог на этом же томе (это чтоб прошло банальное переименование без фактического удаления источника). Машина нормально стартует и очень быстро работает. Врзвращаемся к CLI, переходим в каталог, куда мувнули файлы и пробуем удалять — имяVM-00000x-sesparse.vmdk удаляются без проблем, а вот попытка удалить эти sesparse приводит к зависанию, но не консоли, как я думал, а тома.

  15. Кирилл:

    Там ошибочка — без проблем удалялся файл без sesparse

  16. solegg:

    Вышеописанные способы не помогли(
    Мне помогло:
    1) Выключить VM;
    2) Удалить ее из перечня (Remuve from Inventory);
    3) Зарегистрировать ее повторно (зайти через vCenter в папку с VM; найти файл с расширением VMX и зарегистрировать);
    4) Повторить консолидацию.

  17. Eldar:

    Статья крут

  18. Игорь:

    Дополнительный вопрос как можно пропустить consolidation при выпадении данной ошибки. Что бы это сделать на выходных на пример.

  19. Иван Семин:

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

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *