Что делать, если датастор на ESXi 7/8 заблокирован (Reason: Busy)

Автор George, Июль 09, 2026, 11:18

« назад - далее »

George

Шпаргалка: Что делать, если датастор на ESXi 7/8 заблокирован (Reason: Busy)

При попытке размонтировать датастор через SSH хоста командой
Код: bash
esxcli storage filesystem unmount
часто возникает ошибка «Volume cannot be unmounted. Reason: Busy». Это означает, что ядро ESXi использует диск под свои системные нужды.

Ниже описано, как узнать UUID дисков, найти виновника блокировки и безопасно перенести службы на другое хранилище.



Шаг 0. Как узнать UUID и точное имя датасторов
Перед началом работы нужно получить список всех подключенных хранилищ, их текстовых имен и UUID. Выполните команду:
Код: bash
esxcli storage filesystem list

В выводе вы увидите таблицу. Ищите нужный диск в колонке Volume Name, а его уникальный идентификатор для команд — в колонке UUID (например, 6828d469-70d71be0-b4f3-70106f49b6a2).



Шаг 1. Проверка и отключение дампа памяти (Coredump)
Если на диске активен системный coredump, ядро никогда не отпустит файловую систему.

1. Проверяем статус coredump на проблемном датасторе:
Код: bash
esxcli system coredump file list
Если в колонках Active и Configured стоит true, отключаем его:
Код: bash
esxcli system coredump file set --unconfigure



Шаг 2. Проверка системного Scratch-диска (.locker)
ESXi любит складывать логи и временные файлы во внутреннюю папку на свободный SSD.

1. Смотрим, куда сейчас указывает путь логов:
Код: bash
vim-cmd hostsvc/advopt/view ScratchConfig.ConfiguredScratchLocation
2. Если там прописан UUID удаляемого диска, переносим его на живой рабочий датастор (внутренней командой API):
Код: bash
vim-cmd hostsvc/advopt/update ScratchConfig.ConfiguredScratchLocation string "/vmfs/volumes/UUID_РАБОЧЕГО_ДИСКА/.locker-Folder"
Важно: Изменения scratch-пути вступят в силу только после перезагрузки хоста ESXi!



Шаг 3. Поиск скрытых процессов через fuser
Если прошлые шаги чистые, но диск всё еще Busy, ищем конкретный процесс (PID), который держит файлы:

1. Вызываем утилиту fuser (укажите UUID заблокированного диска):
Код: bash
fuser -m /vmfs/volumes/UUID_ПРОБЛЕМНОГО_ДИСКА
2. Команда выведет ID процессов через пробел. Смотрим, что это за процесс:
Код: bash
ps -s | grep <PID_из_вывода>
3. Если это не критичный агент, его можно «прибить», чтобы освободить диск:
Код: bash
kill -9 <PID>



Шаг 4. Возвращаем Coredump на новое безопасное место
Оставлять хост без дампа памяти нельзя (при фиолетовом экране смерти не запишется лог). Настроим его на рабочем диске:

1. Создаем файл дампа на новом рабочем датасторе (в ESXi 7/8 имя файла генерируется автоматически):
Код: bash
esxcli system coredump file add -d "UUID_РАБОЧЕГО_ДАТАСТОРА"
2. Смотрим и копируем сгенерированный системой путь:
Код: bash
esxcli system coredump file list
3. Активируем новый coredump-файл, вставив скопированный путь:
Код: bash
esxcli system coredump file set -p "СКОПИРОВАННЫЙ_ПУТЬ_ИЗ_ПРИМЕРА_ВЫШЕ"

После этого в списке
Код: bash
esxcli system coredump file list
статус нового файла изменится на true / true. Проблемный диск можно извлекать или разбирать на нем RAID.
  •  

George



Вариант 5. Радикальный: Стирание разметки VMFS через dd (Только для пустых дисков!)
ВНИМАНИЕ: Этот метод уничтожает заголовок файловой системы на горячую. Используйте его ТОЛЬКО если вы на 100% уверены, что на диске нет нужных виртуальных машин, а стандартные методы выше не сработали. В продакшене применять с огромной осторожностью!

Если ядро ESXi намертво заблокировало пустой диск и отказывается его отпускать, можно стереть таблицу разделов. ОС потеряет заголовок VMFS, сбросит все блокировки и «забудет» датастор без перезагрузок.

1. Найдите точное системное имя дискового устройства (Device Name):
Код: bash
esxcli storage vmfs extent list
Ищите строку с именем вашего датастора. В колонке Device Name будет длинный ID, начинающийся на naa...., t10.... или nvme.... (например, naa.600508b1001c...). Скопируйте его.

2. Занулите первый сектор диска (замените ИМЯ_УСТРОЙСТВА на скопированную строку, сохранив префикс /dev/disks/):
Код: bash
dd if=/dev/zero of=/dev/disks/ИМЯ_УСТРОЙСТВА bs=512 count=1 conv=notrunc
Команда должна вернуть отчет в стиле: 1+0 records in, 1+0 records out.

3. Заставьте подсистему хранения ESXi пересканировать железки:
Код: bash
esxcli storage core adapter rescan --all

После сканирования хост увидит, что файловой системы больше нет, и датастор мгновенно исчезнет из списков vCenter и ESXi.
  •  

🡱 🡳

Отметьте интересные вам фрагменты текста и они станут доступны по уникальной ссылке в адресной строке браузера.