Как загрузить корневую файловую систему ZFS после установки dnodesize = auto (что делает grub неспособным читать диски)

Как загрузить корневую файловую систему ZFS после установки dnodesize = auto (что делает grub неспособным читать диски)

У меня установлена ​​proxmox (v5.4, я думаю) поверх ZFS на сервере с 6 дисками. Есть 2 пула: rpool в зеркале из двух SSD, на котором находится корневая файловая система proxmox и несколько контейнеров и zvols. А остальные 4 диска находятся в другом пуле (HDD) в raidz-1.

Два месяца назад я занимался оптимизацией параметров ZFS и активировал dnodesize = autoвсе пулы, включая пул rpool и children pools. Теперь я перезагрузил сервер и вот такое сообщение:

error: no such device: 40d7d14f38cc...
error: unknown filesystem
Entering rescue mode...
grub rescue>

Проведенное мной исследование показало, что это связано с dnodesizeпараметром (проверьтездесь,здесьиздесь). Прямая цитата из первой ссылки:

Какой-то файл, должно быть, привел к появлению нетрадиционного (512 байт) размера dnode в наборе данных, что означало, что GRUB больше не мог читать диск.

Теперь у меня есть некоторые идеи, с чего начать, но также и много сомнений (я не очень опытный админ), поэтому я хотел сначала спросить вас, прежде чем зайду в тупик и/или окончательно что-то сломаю.

В первую очередь я мог бы создать live usb с ОС, поддерживающей ZFS. Вероятно, лучшим вариантом было бы использовать тот же ISO proxmox 5.4. А там, можно ли будет загрузить и управлять старыми пулами proxmox с live USB? Как?

Проблема в том, что этого недостаточно, dnodesize = legacyтак как изменения не применяются задним числом. Поэтому я не знаю, как именно действовать здесь. У меня есть следующие варианты:

  1. Если есть способ определить, какие файлы нарушают стандартный лимит dnode в 512 байт. Затем вырежьте/переместите их в другое место и вставьте/переместите их обратно. Проблема здесь, как определить эти файлы?
  2. Вырежьте все содержимое rpool на внешний диск и вставьте его снова в rpool. Проблема в том, что я не чувствую себя в безопасности, перемещая корневую файловую систему proxmox вперед и назад и ожидая, что она снова заработает. Может быть, с cp -a?
  3. Похоже, что единственный контент, который должен быть доступен для чтения grub, — это контент внутри /boot. Но папка /boot находится внутри пула rpool, а пулы zfs не сжимаются. Поэтому я не могу сжать ни один из текущих пулов, чтобы создать новый для загрузки, и не могу добавить дополнительный диск на сервер. Единственным вариантом было бы переместить /boot на флешку и указать grub искать там. Но это не кажется очень надежным или окончательным решением.

Любой совет?

EDIT: А как насчет замены grub2 на более дружественный загрузчик zfs? Из proxmox wiki:

systemd-boot — это легкий загрузчик EFI. Он считывает образы ядра и initrd напрямую из сервисного раздела EFI (ESP), где он установлен. Главное преимущество прямой загрузки ядра из ESP заключается в том, что не нужно повторно реализовывать драйверы для доступа к хранилищу. В контексте ZFS как корневой файловой системы это означает, что вы можете использовать все дополнительные функции в вашем корневом пуле вместо подмножества, которое также присутствует в реализации ZFS в grub, или необходимости создания отдельного небольшого загрузочного пула.

На самом деле кажется, что:

Proxmox VE в настоящее время использует один из двух загрузчиков в зависимости от выбранной в установщике конфигурации диска. Для систем EFI, установленных с ZFS в качестве корневой файловой системы, используется systemd-boot. Все остальные развертывания используют стандартный загрузчик grub.

Так что я не знаю, почему он был установлен с grub вместо systemd-boot. Возможно ли заменить загрузчик, ничего не сломав?

Спасибо за вашу помощь.

Связанный контент