Эта инструкция предназначена для администраторов любого уровня (включая новичков). Она решает проблему, когда замена диска через веб-интерфейс TrueNAS завершается ошибкой [EINVAL] Failed to find vdev, поскольку старый диск уже извлечён, а система потеряла связь с его логическими разделами.

В TrueNAS замена неисправного диска в зеркальном пуле данных выполняется стандартно: вы физически меняете накопитель, загружаете систему, переходите в настройки пула, выбираете повреждённый диск и запускаете процедуру замены, указав новый накопитель. После этого диски синхронизируются и пул возвращается в штатный режим работы. Однако при попытке аналогичным образом заменить диск в загрузочном пуле (boot-pool) система выдаёт ошибку

[EINVAL] Failed to find vdev for ТУТ-ИМЯ-ВАШЕГО-ДИСКА

Диск заменить не получается. Почему? Это связано с принципиальным различием в том, как TrueNAS управляет этими пулами. Пул данных хранит исключительно разделы ZFS. При замене диска данных TrueNAS не нужно выполнять сложные системные сценарии разметки — он просто отдаёт команду ZFS привязать новый накопитель к существующему виртуальному устройству (vdev). В загрузочном пуле системе требуется создавать загрузочные разделы (EFI/GRUB).

В этом случае нам поможет ручное вмешательство через CLI — это специфика, присущая загрузочному пулу (boot-pool).

Подготовка к работе

1. Откройте веб-интерфейс TrueNAS SCALE.

2. Перейдите в раздел Система Командный интерпретатор или подключитесь к серверу по SSH.

3. Все команды выполняются с правами суперпользователя (root).

Сопоставление текстовых имён и числовых GUID дисков

Попытка заменить диск по его текстовому имени (например, nvme-SAMSUNG_…-part2) часто вызывает ошибку no such device in pool, если накопитель физически отключен. Использование уникального числового идентификатора (GUID) — самый надёжный способ.

Чтобы не ошибиться и определить GUID именно сломанного диска, мы выполним проверку в два этапа, сравнивая текстовый вывод и числовой по порядку устройств в списке.

Сначала выведите статус пула, чтобы увидеть, какой именно диск по счёту (верхний или нижний в зеркале) помечен как REMOVED или UNAVAIL:

zpool status boot-pool

Здесь мы четко видим: первый диск в зеркале работает (ONLINE), а второй (нижний) — вышел из строя (REMOVED).

Теперь выведите тот же статус пула, но с флагом -g, чтобы текстовые имена заменились на числовые GUID:

zpool status -g boot-pool

Ориентируясь по порядку в списке (вторая строка), найдите числовой ID напротив статуса REMOVED. Полностью скопируйте это число. Это и есть GUID вашего вышедшего из строя диска.

Определение точного пути нового диска

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

ZFS в TrueNAS требует использования стабильных путей через серийные номера устройств (by-id). Использовать стандартные имена Linux (такие как /dev/nvme1n1) нельзя: после перезагрузки эти имена могут измениться, и пул «развалится».

Выведите список всех подключенных дисков по их постоянным идентификаторам:

ls -l /dev/disk/by-id/

Внимательно изучите список и найдите ваш новый диск. Скопируйте название. Ориентируйтесь на модель и серийный номер (например, nvme-Samsung_SSD_980_250GB_S64BNL0YC07250P).

Важное правило: Имя диска не должно заканчиваться на -part1, -part2 и т.д. Вам нужен диск целиком, а не его разделы. TrueNAS разметит его автоматически. Пример:

Подготовка (очистка) нового диска (Рекомендуется)

Если новый диск ранее где-то использовался или на нем осталась заводская разметка, ZFS может заблокировать операцию замены. Чтобы этого избежать, затрите служебную область диска:

dd if=/dev/zero of=/dev/disk/by-id/ПОЛНОЕ_ИМЯ_НОВОГО_ДИСКА bs=1M count=10

# пример: dd if=/dev/zero of=/dev/disk/by-id/nvme-Samsung_SSD_980_250GB_S64BNL0YC07250P bs=1M count=10`

Выполнение замены диска

Теперь объедините полученные данные в одну команду. Флаг -f (force) заставит ZFS принудительно начать замену на указанный чистый накопитель.

zpool replace -f boot-pool <ЧИСЛОВОЙ_GUID_СТАРОГО_ДИСКА> /dev/disk/by-id/<ПОЛНОЕ_ИМЯ_НОВОГО_ДИСКА>

# пример: zpool replace -f boot-pool 15696509188538032599 /dev/disk/by-id/nvme-Samsung_SSD_980_250GB_S64BNL0YC07250P

После нажатия Enter команда должна выполниться без вывода ошибок, вернув вас на новую строку ввода.

Контроль синхронизации

Процесс переноса операционной системы на новый диск начинается автоматически в фоновом режиме. Проверьте текущий статус:

# Уже без флага `-g`, чтобы видеть привычные имена

zpool status boot-pool

В строке scan: вы увидите статус resilver in progress и процент выполнения. Дождитесь окончания процесса. Когда процедура завершится, статус сменится на ONLINE, ошибки будут равны нулю (0 errors), а старый диск полностью исчезнет из списка устройств. Пул снова станет отказоустойчивым. Пример:

Устранение рассинхронизации Middleware и GUI после замены диска

После всех операций в командной строке в интерфейсе в разделе Хранилище вы можете увидеть, что есть один неиспользуемый диск и из него можно создать новый пул-данных. Это наш с вами новый диск:

Прямой вызов команды zpool replace меняет накопитель на уровне файловой системы ZFS , но выполняется в обход базы данных TrueNAS SCALE. В результате ZFS считает пул здоровым, а веб-интерфейс продолжает видеть новый диск как «Неиспользуемый» (Unused Disks). Если вы выполнили замену диска через терминал и столкнулись с тем, что диск завис в списке неиспользуемых, то чтобы вернуть накопитель в исходное состояние и заставить TrueNAS подхватить его корректно, необходимо удалить его из пула и снова добавить. Выведем структуру пула с числовыми идентификаторами дисков:

# понятные имена дисков
zpool status boot-pool

# числовые идентификаторы дисков
zpool status -g boot-pool

Найдите в зеркале mirror-0 числовой GUID вашего нового диска. Он будет находиться в статусе ONLINE. Исключите диск из пула командой отсоединения по его GUID:

zpool detach boot-pool <ЧИСЛОВОЙ_GUID_НОВОГО_ДИСКА>

Служба-посредник TrueNAS (middlewared) блокирует повторные действия с этим диском, пока не перезагрузим систему. Перезагружаем систему.

После перезагрузки система заново опросит дисковые контроллеры. TrueNAS увидит абсолютно чистый, освобожденный от ZFS диск.

  1. Откройте веб-интерфейс TrueNAS.
  2. Перейдите по пути: Система Загрузка Состояние загрузочного пула.
  3. В списке дисков найдите ваш единственный оставшийся системный диск.
  4. Нажмите на три точки напротив него и выберите появившийся пункт Присоединить.
  5. В выпадающем меню выберите ваш чистый и подтвердите операцию.

При запуске процедуры именно через графическое меню система выполняет операцию «по-честному»:

  • TrueNAS автоматически создает на диске загрузочную область EFI и ZFS-раздел.
  • Уникальный стабильный серийный номер (ID) диска намертво записывается во внутреннюю базу данных конфигурации.
  • Сообщение о свободном диске (Unused Disks) полностью исчезает.
  • Система работает корректно.