Ошибка virtual machine disks consolidation is needed в ESXI
Добрый день уважаемые читатели, сегодня расскажу как решается ошибка висящая на виртуальной машине в 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, причина это удаление snapshot. После его удаления остались файлы которые не смогли слиться с основным файлом виртуального диска, и требуется провести консолидацию. Выбираете нужную машину правым кликом меню Power-Consolidate.
После чего произойдет слияние дисков, и предупреждение пропадет. Сам процесс слияние или merge может идти долго, все будет зависеть от некоторых факторов
- Загруженность виртуальной машины
- Ее размер
- Количество снапшотов, которые нужно консолидировать
У меня были случаи в практике, что виртуалка так консолидировалась 3 дня.
Устраняем virtual machine disks consolidation is needed в vCenter 7
На текущий момент у меня гипервизоры ESXI 7, тут эта ошибка так же легко встречается.
Тут принцип устранения такой же, выключите виртуальную машину и откройте контекстное меню "Snapshot - Consolidate".
Дожидаемся когда закончиться наше задание консолидации.
После завершения задания убедитесь, что статус "virtual machine disks consolidation is needed" пропал.
Что делать, если штатная консолидация не помогла
Вот интересная ситуация, вроде бы задание отработало, но вот статус у виртуальной машины остался "Virtual machine disks consolidation is needed", лишь цвет предупреждения сменился на уведомительный.
Тут проблема в том, что если вы на уровне датастора посмотрите файлы виртуальной машины, то сможете обнаружить, что там много файлов от снимков.
Чтобы это поправить, вам необходимо в ручном режиме, создать снапшот и затем его просто удалить. Это позволит механизму обнаружить все имеющиеся снимки и объединить их.
Как объединить снимки из PowerCLI
Все эти же действия можно сделать и через PowerCLI, как его устанавливать смотрите по ссылке слева. Первое, что делаем, это подключаемся или к хосту или к vCenter серверу. Далее нам нужно получить список виртуальных машин с остатками от снимков. Чтобы получить список виртуальных машин, сообщающих о проблеме "Требуется консолидация дисков виртуальных машин", мы можем вызвать командлет Get-VM, чтобы определить, требуется ли консолидация виртуальных машин.
Далее выведем просто $VMs. В моем примере нашлось несколько виртуальных машин, где требуется консолидация.
Теперь, чтобы объединить диски, вам нужно выполнить:
или
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
На выходе вы будите получать вот такого рода таблицу.
Дополнительно
Может быть ситуация, что вы используете прокси Veeam, для ускорения резервного копирования и в нем могут застревать диски, которые будут приводить к проблеме консолидации.
Спасибо за информацию, только мне кажется не в пункте «Power», а в пункте «Snapshot».
Спасибо мне помогло исправить данную ошибку, после veeam осталось так
your blo was much interesting for me! I will say thanks u a lot to posting the interesting stuff.
Your blog is very useful to us! I’ll thank you you very much to posting the interesting information!
Да Помогла.Спасибо.
Это действие выполняется при выключенной виртуальной машине или можно при включенной???? Просто при включенной виртуалке выбивает ошибку
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.
В большинстве случаев можно на работающей машине, но бывает и таке, что только при выключенной. В вашем случае файлы заблокированы.
Можете подсказать, что делать в моём случае с заблокированными файлами, т.к eSXI я пока слабоват
Точный скриншот ошибки можете прислать
Отправил вам письмо на microsoftexam@yandex.ru
Спасибо. Оказалось, что проблема решается в 2 клика.
Что может быть причиной застревания консолидаци на 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 тоже завешивают консоль.
Вы смотрите по времени изменения файла, если оно не меняется то процесс завис, если меняется, то ждите, у меня на сайте есть про это статья, про снапшоты, прочитайте ее, будет полезно.
Ну, в общем я нашёл кое что, про что у Вас не читал — после застопорившегося 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 приводит к зависанию, но не консоли, как я думал, а тома.
Там ошибочка — без проблем удалялся файл без sesparse
Вышеописанные способы не помогли(
Мне помогло:
1) Выключить VM;
2) Удалить ее из перечня (Remuve from Inventory);
3) Зарегистрировать ее повторно (зайти через vCenter в папку с VM; найти файл с расширением VMX и зарегистрировать);
4) Повторить консолидацию.
Статья крут
Дополнительный вопрос как можно пропустить consolidation при выпадении данной ошибки. Что бы это сделать на выходных на пример.
Если только копаться в конфиге виртуальной машины, но вы должны понимать, что сервер будет дико тормозить по дисковой подсистеме из-за этого