Второй раз за месяц словил ошибку «Heartbeat corruption on esxi 5.5» (corrupt metadata consistency of a file system).
Инфраструктура состоит из нескольких Esxi 5.5 (240361) и СХД презентованной по iSCSI. Сетевая связность задублирована, все системы имеют по два независимых источника питания.
В ходе работы кластера одна или несколько VM, как правило в рамках одного LUN, зависают, при этом не vSphere Client ни с консоли сбить виртуалку не получается.
Штатная перезагрузка (если получается) ESXi приводит к тому, что файлы виртуальной машины оказываются залоченными:
~ # for file in $(ls /vmfs/volumes/Qsan3-2Tb/srv-1c-doc-sql); do echo $file; vmkfstools -D /vmfs/volumes/Qsan3-2Tb/srv-1c-doc-sql/$file | grep owner; done srv-1c-doc-sql-dfb3797e.hlog gen 1371, mode 0, owner 00000000-00000000-0000-000000000000 mtime 49043 srv-1c-doc-sql-dfb3797e.vswp gen 35, mode 1, owner 55fa89b8-1d2b79d0-9eb0-9c8e99190026 mtime 53508 srv-1c-doc-sql-flat.vmdk gen 35, mode 1, owner 55fa89b8-1d2b79d0-9eb0-9c8e99190026 mtime 53490 srv-1c-doc-sql.nvram gen 35, mode 1, owner 55fa89b8-1d2b79d0-9eb0-9c8e99190026 mtime 53497 srv-1c-doc-sql.vmdk ... |
Mode в статусе 1 означает, что виртуальная машина запущена, однако это не так.
mode 0 = no lock mode 1 = is an exclusive lock (vmx file of a powered on VM, the currently used disk (flat or delta), *vswp, etc.) mode 2 = is a read-only lock (e.g. on the ..-flat.vmdk of a running VM with snapshots) mode 3 = is a multi-writer lock (e.g. used for MSCS clusters disks or FT VMs). |
Перезагрузка хоста, который лочит файлы не помогает. Кроме того, при обращении к залоченному файлу с другого хоста в логах можно увидеть попытку лока с другим маком. В качестве подтверждения проблемы можно пропарсить логи vmkernel.log по ключевой фразе «Corrupt heartbeat detected» или «Corrupt HB»
~ # cat /var/log/vmkernel.log 2015-10-27T10:35:01.722Z cpu9:36497)WARNING: HBX: 616: Volume 5626440d-cba576ba-bfc2-9c8e99190026 ("Qsan3-2Tb") may be damaged on disk. Corrupt heartbeat detected at offset 3272704 2015-10-27T10:35:01.722Z cpu9:36497)WARNING: Corrupt HB: [HB state 17ef348 offset 1744972198020096 gen 1968009849602048 stampUS 1919751598305861 uuid 0015c20c-00000000-0000-0000c8ea0000 jrnl drv 0.0] 2015-10-27T10:35:04.731Z cpu10:36506)WARNING: HBX: 616: Volume 5626440d-cba576ba-bfc2-9c8e99190026 ("Qsan3-2Tb") may be damaged on disk. Corrupt heartbeat detected at offset 3272704 2015-10-27T10:35:04.731Z cpu10:36506)WARNING: Corrupt HB: [HB state 17ef348 offset 1744972198020096 gen 1968009849602048 stampUS 1919751598305861 uuid 0015c20c-00000000-0000-0000c8ea0000 jrnl drv 0.0] |
Решение подробно описано в мануале и заключается в выполнении на поврежденном LUN команд:
voma -m vmfs -f check -d /vmfs/devices/disks/naa.600508e000000000b367477b3be3d703:3 voma -m vmfs -f fix -d /vmfs/devices/disks/naa.600508e000000000b367477b3be3d703:3 |
Есть три момента, которые необходимо учесть при проведении работ:
1. Команды необходимо выполнять под ESXi6. Если у вас его нет, то можно сделать виртуалку, не забыв включить «Hardware Virtualization» (сделать это можно только через web версию сферы)
Сразу после данного экрана нажимаем «shift+o»
И стираем параметры запуска.
2. Обратите внимание на то, как оформлено обращение к диску!
В случае использования в качестве параметра ссылки на диск расположенной в «/vmfs/volumes/» получите ошибку вида:
# voma -m vmfs -f check -d /vmfs/volumes/xxxx-xxxxx-xxxx-xxxx Checking if device is actively used by other hosts ERROR: Failed to check for heartbeating hosts on device'/vmfs/volumes/xxxx-xxxxx-xxxx-xxxx' |
3. Lun перед началом операции проверки и восстановления должен быть отмонтирован, т.е. если у вас остались какие-либо рабочие VM на Lun, их необходимо мигрировать в другое место.