Como inicializar o sistema de arquivos raiz ZFS após definir dnodesize = auto (tornando o grub incapaz de ler os discos)

Como inicializar o sistema de arquivos raiz ZFS após definir dnodesize = auto (tornando o grub incapaz de ler os discos)

Eu tenho uma instalação proxmox (v5.4, eu acho) em cima do ZFS em um servidor com 6 discos. Existem 2 pools: rpool em um espelho de dois SSDs que possui o sistema de arquivos raiz proxmox e alguns contêineres e zvols. E os outros 4 discos estão em outro pool (HDD) no raidz-1.

Há dois meses eu estava fazendo alguns trabalhos de otimização nos parâmetros do ZFS e ativei dnodesize = autoem todos os pools, incluindo pool rpool e pools filhos. Agora reiniciei o servidor e a seguinte mensagem dizia olá:

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

Com a pesquisa que fiz acho que está relacionado com o dnodesizeparâmetro (verifiqueaqui,aquieaqui). Citando diretamente do primeiro link:

Algum arquivo deve ter acionado um tamanho de dnode não legado (512 bytes) no conjunto de dados, o que significava que o GRUB não conseguia mais ler a unidade.

Agora tenho algumas idéias sobre por onde começar, mas também muitas dúvidas (sou um administrador não muito experiente), então queria perguntar a você primeiro, antes de chegar a um beco sem saída e/ou quebrar algo definitivamente.

Em primeiro lugar, eu poderia criar um live usb com um sistema operacional compatível com ZFS. Provavelmente a melhor opção seria usar o mesmo ISO 5.4 proxmox. Uma vez lá, seria possível carregar e manipular os antigos pools proxmox do USB ativo? Como?

O problema é que não basta definir, dnodesize = legacypois as alterações não são aplicadas retroativamente. Portanto, não sei exatamente como proceder aqui. As opções que tenho são as seguintes:

  1. Se houver uma maneira de detectar quais arquivos estão ultrapassando o limite padrão do dnode de 512 bytes. Em seguida, corte/mova-os para outro local e cole/mova-os de volta. Problema aqui, como detectar esses arquivos?
  2. Corte todo o conteúdo do rpool em um disco externo e cole-o novamente no rpool. O problema aqui é que não me sinto seguro em mover o sistema de arquivos raiz proxmox para frente e para trás e espero que funcione novamente. Talvez com cp -a?
  3. Parece que o único conteúdo que precisa ser lido pelo grub é o conteúdo dentro de/boot. Mas a pasta /boot está dentro do pool rpool e os pools zfs não podem ser reduzidos. Portanto, não posso reduzir nenhum dos pools atuais para criar um novo para inicialização e não posso adicionar nenhum disco extra ao servidor. A única opção seria mover o /boot para um pen drive e dizer ao grub para pesquisar lá. Mas não parece uma solução muito robusta ou definitiva.

Algum conselho?

EDIT: Que tal substituir o grub2 por um bootloader mais amigável ao zfs? Do wiki proxmox:

systemd-boot é um gerenciador de inicialização EFI leve. Ele lê as imagens do kernel e do initrd diretamente da partição de serviço EFI (ESP) onde está instalado. A principal vantagem de carregar diretamente o kernel do ESP é que não é necessário reimplementar os drivers para acessar o armazenamento. No contexto do ZFS como sistema de arquivos raiz, isso significa que você pode usar todos os recursos opcionais em seu pool raiz em vez do subconjunto que também está presente na implementação do ZFS no grub ou ter que criar um pequeno pool de inicialização separado.

Na verdade parece que:

O Proxmox VE atualmente usa um dos dois gerenciadores de inicialização, dependendo da configuração do disco selecionada no instalador. Para sistemas EFI instalados com ZFS como sistema de arquivos raiz systemd-boot é usado. Todas as outras implantações usam o bootloader grub padrão.

Então não sei por que ele foi instalado com o grub em vez do systemd-boot. É viável substituir o bootloader sem quebrar nada?

Obrigado pela ajuda.

informação relacionada