Nome da partição previsível para a partição squashfs no initramfs

2

TL; DR : Como posso inicializar uma partição squashfs do initramfs com um nome de partição previsível? /dev/sda2 não funciona porque os nomes dos dispositivos são reordenados aleatoriamente e, às vezes, são inicializados da partição errada.

Nós usamos uma instalação personalizada do Gentoo que se parece com isso:

/dev/sda1: /boot   ext4 (unencrypted)
/dev/sda2: /       squashfs (unencrypted)
/dev/sda3: /home   ext4 (dm-crypt)
/dev/sda4: -       swap

Criamos um script initramfs personalizado que monta a partição raiz e um tmpfs sobre ela como um sistema de arquivos de sobreposição. Usamos este guia e é assim:

#!/bin/busybox sh
mount -t proc none /proc
mount -t sysfs none /sys

# Mount the root filesystem.
mount -t squashfs -o ro /dev/sda2 /mnt/overlay
# (some stuff to set up the overlay with tmpfs is done here)

# Clean up. 
umount /proc
umount /sys

# Boot the real thing.
exec switch_root /mnt/overlay /sbin/init

Ele inicializa normalmente e tudo funciona desde que este seja o único disco no sistema, já que /dev/sda2 é sempre a partição raiz em um sistema com apenas um disco.

Estamos trabalhando em um sistema de atualização automática, pois essa instalação personalizada será enviada para outras cidades e, idealmente, nossos clientes devem poder atualizar o sistema simplesmente inserindo um dispositivo USB e aguardando a atualização. Atualizações pela Internet não são uma opção. Manter os nossos dados seguros é uma prioridade e acreditamos que o esquema de partição que escolhemos é suficientemente seguro para as nossas necessidades, embora estejamos abertos a novas ideias, se isso significar a resolução do nosso problema:

O sistema de atualização do pendrive é uma cópia da instalação original do Gentoo e usa exatamente o mesmo esquema de partição. No entanto, o script initramfs no pendrive USB fica confuso e geralmente escolhe a raiz da instalação original, não a raiz do atualizador USB. Obviamente, o programa de atualização (que está na raiz do pen drive) nunca será executado assim.

Tentamos substituir /dev/sda2 no script initramfs do pendrive USB por

  1. /dev/disk/by-id/usb*part2 , que já funciona no menu do GRUB2 mas não funciona no script initramfs porque /dev/disk não existe neste ponto (a propósito, por que existe no GRUB?)
  2. $(findfs PARTUUID="partid-of-usb-squashfs-root") , não funcionou
  3. $(findfs UUID="x") , que funcionaria se as partições do squashf tivessem um UUID do sistema de arquivos (isso funciona com o ext4 e outros sistemas de arquivos)

O guia sugere o uso de devtmpfs ou mdev para preencher /dev no momento do init, mas não sabemos como isso ajuda porque /dev/disk parece ser o trabalho do udev e iniciar um devtmpfs do script initramfs não parece ajudar.

Como podemos obter nomes de partição previsíveis / persistentes em um script initramfs quando a partição raiz não tem um UUID de sistema de arquivos?

É um pouco difícil mudar nosso esquema de particionamento e não queremos que nossa raiz squashfs ou nossa partição / home fique visível para um usuário casual do Windows, mas tentaremos fazer algo se houver algo que nos permita para inicializar de forma confiável a partir da mesma partição toda vez, como LVM ou algo que não tenhamos pensado.

    
por satori 23.07.2016 / 01:07

2 respostas

1

Não houve necessidade de contar com ferramentas especiais para isso.

Saber que a partição squashfs é sempre a segunda no esquema de partição é suficiente: basta definir o UUID da primeira partição do pendrive, usar $(findfs UUID=first-pendrive-partition) e fazer sed s/1/2/ no resultado.

O sistema sempre detecta a partição correta agora.

    
por 28.03.2017 / 19:17
1

O LVM é um candidato neste caso, mas adiciona complexidade no bootloader / initramfs.

Você pode garantir que há apenas um sistema de arquivos squashfs presente como um dispositivo de bloco? Em caso afirmativo, você poderia usar findfs TYPE=squashfs para encontrar o sistema de arquivos raiz correto.

No entanto, você nota que a sua chave USB é quase idêntica, portanto, também contém um sistema de arquivos squashfs . Portanto, você precisa começar a procurar por locais alternativos para colocar informações de rastreamento. Seu /boot volume parece um bom candidato; na chave USB, pode ter algo que o sinaliza como um dispositivo removível; no disco rígido, pode ter algo que o sinalize como uma instalação real.

    
por 28.03.2017 / 08:09