O ZFS no Linux suporta as partições de inicialização em vários dispositivos?

2

Estou lendo sobre o tópico se o ZFS no Linux puder ser usado para o próprio sistema de arquivos raiz e houver um interessante artigo wiki disponível. Mas o layout da partição no exemplo é não está claro para mim.

# sgdisk     -n1:0:0      -t1:BF01 /dev/disk/by-id/scsi-SATA_disk1
Run this if you need legacy (BIOS) booting:
# sgdisk -a1 -n2:34:2047  -t2:EF02 /dev/disk/by-id/scsi-SATA_disk1
Run this for UEFI booting (for use now or in the future):
# sgdisk     -n3:1M:+512M -t3:EF00 /dev/disk/by-id/scsi-SATA_disk1
Run this in all cases:
# sgdisk     -n9:-8M:0    -t9:BF07 /dev/disk/by-id/scsi-SATA_disk1

O que não entendo neste exemplo é a primeira partição. Lendo através da página man do sgdisk não está claro para mim se a primeira partição é apenas do tamanho um bloco ou se Abrange essencialmente todo o dispositivo. No último caso, isso significaria que todas as outras partições criadas são criadas dentro da primeira? O que me faz pensar é a seguinte frase na man page:

A start or end value of 0 specifies the default value, which is the start of the largest available block for the start sector and the end of the same block for the end sector.

"O mesmo bloco" soa como um bloco do dispositivo físico, então, por exemplo, 512 Byte ou 4k Byte de dados? Ou significa alguma quantidade contígua de armazenamento, abrangendo vários blocos lógicos / físicos no final?

É importante entender isso para mim por causa da seguinte frase no wiki:

The root pool does not have to be a single disk; it can have a mirror or raidz topology. In that case, repeat the partitioning commands for all the disks which will be part of the pool. Then, create the pool using zpool create ... rpool mirror /dev/disk/by-id/scsi-SATA_disk1-part1 /dev/disk/by-id/scsi-SATA_disk2-part1 (or replace mirror with raidz, raidz2, or raidz3 and list the partitions from additional disks).

Como você pode ler, somente a primeira partição é colocada no pool, as outras criadas acima não são mencionadas. O que não estou entendendo é se as outras partições são parte de part1 e, portanto, estão implicitamente disponíveis no conjunto ou não são usadas para o conjunto. Por exemplo, o GRUB é instalado em uma das outras partições, sem referência ao pool do ZFS neste caso:

# mkdosfs -F 32 -n EFI /dev/disk/by-id/scsi-SATA_disk1-part3
[...]
# echo PARTUUID=$(blkid -s PARTUUID -o value \
      /dev/disk/by-id/scsi-SATA_disk1-part3) \
      /boot/efi vfat nofail,x-systemd.device-timeout=1 0 1 >> /etc/fstab

Isso me diz que part3 não faz parte do pool do ZFS e, portanto, é usado individualmente. Mas como isso se ajusta ao tamanho de part1 ? Uma partição de apenas um bloco não parece fazer muito sentido, enquanto se part3 estiver contido em part1 de alguma forma, isso significaria que é parte do pool do ZFS, mas endereçado sem ele também?

Eu preciso entender como a redundância é fornecida para as partições de inicialização em uma configuração com vários dispositivos e partições, como no exemplo acima. Em comparação com mdadm , o objetivo geral é uma configuração RAID10, em que sempre dois dispositivos são espelhados e as partições desses dispositivos são distribuídas em todos os espelhos. No final, com 6 discos, um seria 3 vezes o armazenamento das partições de inicialização e do pool raiz. O ZFS é capaz de fazer isso em geral, eu não tenho certeza do que é parte do pool e se a redundância cobre também as partições de inicialização.

Meu sentimento atual é que não é o caso e eu precisaria de mdadm para tornar as partições de inicialização redundantes. Simplesmente porque o exemplo do GRUB acima acessa algum disco e partição específicos, um dispositivo físico, e não algum espelho lógico criado pelo ZFS. Além disso, essa partição é formatada com FAT32 em vez de ZFS. Isso não parece que o ZFS esteja se importando com qualquer uma dessas partições.

Então, no final, o ZFS suporta uma configuração RAID10 comparável a essa possível com mdadm incluindo todas as partições de inicialização, raiz e tal, realmente tudo?

    
por Thorsten Schöning 17.06.2017 / 14:56

1 resposta

2

Cada disco (pelo menos dois, de qualquer forma) precisará ter uma partição de inicialização que seja não parte do pool do ZFS para fornecer redundância em caso de falha de hardware.

Nas instruções acima, está criando uma partição de inicialização EFI como um tipo de medida pró-ativa contra alterações futuras (as partições de inicialização EFI são sistemas de arquivos FAT FAT de pequeno porte que carregam drivers basicamente).

Em qualquer caso, nenhuma dessas três primeiras partições pertencerá ao zpool - apenas a última (maior).

Este HOWTO para ZFS em Root para FreeBSD explica isso em mais detalhes. (Mas os diferentes comandos podem apenas tornar mais confuso ...)

Considere o seguinte:

  • Seu firmware (BIOS, EFI, qualquer coisa) não conhece nada , mas sim como encontrar uma bota
  • Não há nada além de JBOD (apenas um monte de discos)

Você não pode inicializar a partir do ZFS diretamente porque seu firmware não sabe o que é o ZFS. Portanto, é necessário que haja uma partição não-ZFS da qual o firmware possa ser inicializado e, como isso não será protegido pela redundância do ZFS, faz sentido ter cópias dela em muitos lugares.

    
por 17.06.2017 / 16:31