Instalei o Ubuntu 18.04 em um Dell PowerEdge R720xd usando o ZFS. Há duas unidades de inicialização de 1 TB em uma mirror
configuração ZFS. Eu segui as instruções no ZFS no Linux Wiki .
(Observação: meu sistema está usando um adaptador de barramento de host (HBA) LSI LSI LSI00244 (9201-16i) em vez da placa RAID integrada, pois o ZFS e esta placa RAID não se dão bem.)
Ao inicializar o Ubuntu, leva cerca de dez segundos para que as unidades sejam enumeradas pelo sistema (existem 14 unidades - duas para o SO e 12 para armazenamento de dados que serão configuradas em outros zpools posteriormente). No entanto, o processo de inicialização tenta importar o pool de inicialização antes que as unidades tenham sido enumeradas.
Uma mensagem de erro do BusyBox pisca na tela e basicamente diz:
O pool falhou ao importar.
Importe manualmente o pool neste shell BusyBox e digite
exit
para continuar o processo de inicialização.
Se eu esperar alguns segundos após essa mensagem, vejo que as 14 unidades são listadas.
Eu digito zpool import rpool
no prompt do BusyBox, que funciona (confirmado com zpool list
) e, em seguida, exit
para continuar o processo de inicialização. (Isso leva ao meu próximo problema, uma falha do Kernel, mas essa é uma pergunta separada.)
Tentei adicionar rootdelay=15
as opções de inicialização, mas isso não parece funcionar, pois parece querer executar esse atraso após a importação do pool ZFS.
Como posso fazer com que o processo de inicialização aguarde a exibição dos dispositivos antes de tentar importar o pool?
Finalmente encontrei isso em
/etc/default/zfs
:Veja como configurá-lo.
/mnt
usarzpool import rpool -R /mnt
mount --rbind /dev /mnt/dev; mount --rbind /proc /mnt/proc; mount --rbind /sys /mnt/sys
/mnt
:chroot /mnt /bin/bash --login
/etc/default/zfs
para alterar o valor acima de0
para15
update-initramfs
eupdate-grub
Atualização de 27 de maio de 2022:
Instalei e executei o Ubuntu 22.04 com ZFS-on-root (e uma
/boot
partição ext4).No entanto, com base nos problemas que encontrei, recomendo não usar o ZFS-on-root com o Linux.
Especificamente, parece que: Linux + ZFS-on-root + snapshots (possivelmente também em combinação com montagens e/ou contêineres de ligação) podem resultar em problemas. Mais especificamente: problemas com instantâneos.
É possível que esses problemas sejam mitigados ou evitados com a criação de um pool ZFS para o sistema de arquivos raiz e um pool ZFS separado para todo o resto. Mas eu não tentei isso.
Se você quiser tentar executar o ZFS-on-root no Linux, recomendo primeiro pesquisar por problemas abertos e fechados (!) no GitHub para se familiarizar com os problemas que você pode encontrar.
Os problemas que encontrei parecem ser mencionados nos seguintes relatórios de problemas do GitHub: 816 , 4514 , 9461 , 9479 , 9958 , 10348 , e possivelmente mais .
Devido a conflitos de licença, o OpenZFS (provavelmente) nunca será mesclado com o kernel do Linux. Conseqüentemente, suspeito que o OpenZFS nunca receberá tantos testes quanto um sistema de arquivos raiz no Linux como os sistemas de arquivos licenciados pela GPL que são construídos diretamente no kernel do Linux (por exemplo, ext4, Btrfs, XFS).
Resposta original de 20 de maio de 2022:
A partir do Ubuntu 22.04, adicionar ainda resolve o problema
ZFS_INITRD_POST_MODPROBE_SLEEP='15'
./etc/default/zfs
(Aparte: no meu caso, eu só precisei1
de um segundo de atraso.)No entanto, creio que vale a pena salientar que ambos ...
ZFS_INITRD_POST_MODPROBE_SLEEP
ZFS_INITRD_PRE_MOUNTROOT_SLEEP
... agora estão obsoletos e foram removidos de
/etc/default/zfs
( note1 , note2 , pull request ).A justificativa para a descontinuação é descrita aqui .
Em poucas palavras, parece que agora existe uma opção de linha de comando do kernel
rootdelay=n
que deve ser usada.Se você quiser ver o script real do initramfs do OpenZFS que usa essas variáveis, está aqui:
https://github.com/openzfs/zfs/blob/master/contrib/initramfs/scripts/zfs