Eu tenho uma instalação root-on-zfs herdada que já foi feita instalando em um ext4 / com /boot em uma partição ext4 separada e, em seguida, movendo o conteúdo de / para um pool ZFS.
Eu tive várias instalações *BSD no mesmo disco, o que nunca causou nenhum problema, mas agora estou pensando em fazer uma instalação do Devuan em uma partição não utilizada. Para ser mais preciso: copie uma instalação já configurada de outra máquina (que usa XFS) para um novo pool na partição em questão.
Vou seguir a abordagem com um /boot em sua própria partição e acho melhor não usar um único /boot para ambas as distros. Então, duas partições /boot.
Nunca fiz isso antes, nem mesmo sem o ZFS na equação. Como isso funcionará com o grub, esp. dado que serão 2 versões diferentes e cada distro em algum momento desejará gerar uma nova configuração do grub? Ele descobrirá qual partição de inicialização combina com qual pool com base na correspondência dos kernels (na inicialização) com os módulos do kernel (no pool) ou terei que verificar a concordância manualmente (em grub.cfg) após cada atualização do grub ? Vejo que grub.cfg apenas faz referência ao UUID da partição que contém/boot, além do nome do pool como argumento do kernel.
FWIW, a máquina em que isso estaria tem suporte UEFI, mas não parece me dar a opção de inicializar a partição EFI (no rEFInd, por exemplo), possivelmente porque o gerenciador de inicialização grub também está instalado.
Eu não teria problemas em ter que passar por alguns obstáculos para inicializar a distribuição secundária.
Acontece que isso é possível, mas dá um pouco de trabalho.
O próprio Grub não detectará a segunda instalação do Linux se não compartilhar o mesmo diretório /boot (ou partição). Lembro-me que isso também era um problema para detectar as instalações BSD que eu costumava ter ao lado de uma instalação Linux.
A boa notícia é que isso significa que o grub pode ser executado em cada instalação sem risco de atrapalhar a outra, desde que não seja instalado no setor de inicialização do MBR, é claro.
A parte complicada é fazer com que o rEFInd detecte os diferentes kernels que cada distribuição pode ter instalado e também inicie o initrd selecionado com os parâmetros corretos para que ele carregue o pool ZFS correto. A maneira mais fácil que conheço de conseguir isso para uma distribuição é usar o grub e o
ubuntu/grubx64.efi
. Acontece que este carregador tem o caminho para grub.cfg codificado; deve ser/EFI/ubuntu/grub.cfg
assim, copiá-lo para um diretório adicional não resolverá nada do jeito que eu esperava. Felizmente, o Debian (e, portanto, também o Devuan) tem sua própria versão do carregador que espera o grub.cfg no/EFI/debian/grub.cfg
, então isso resolveu o problema para mim. (NB: a versão Devuan criou um diretório /EFI/$HOSTNAME então tive que renomeá-lo.)Meu problema não está totalmente resolvido. Atualmente, posso inicializar minha segunda instalação por meio de uma VM com acesso rawdisk à partição EFI e às partições de pool /boot e ZFS dessa instalação. Meu laptop não me dá a opção de abrir um gerenciador de inicialização na inicialização; ele sempre inicializa diretamente no grub que eu instalei no setor de inicialização do MBR. Eu adicionei uma estrofe grub para localizar e iniciar o rEFInd na partição EFI, mas isso ainda não funciona - é possível fazer isso?