Montagem de encadernação de sombra no fstab

0

Eu tenho uma instalação personalizada e não padrão do Ubuntu, onde eu uso o gerenciador de inicialização da minha outra distribuição Linux (rEFInd). Como tal, não quero que o Ubuntu veja a minha partição EFI, com base no princípio de que não tem nada a ver com o que existe (que já salvou a minha bunda ontem à noite quando fiz um rm -rf /* ...). No entanto, como estou usando o btrfs como meu sistema de arquivos, meu diretório /boot precisa estar em uma partição legível por UEFI, como a partição EFI. Então, a minha solução para este enigma é a sombra de montagem de um subdiretório da partição EFI, esp:\EFI\ubuntu , para /boot através de comandos como estes:

mount /dev/sdb2 /boot
mount --bind /boot/EFI/ubuntu /boot

Isso funciona perfeitamente. O Ubuntu tem acesso a uma partição / boot que pode liberar livremente seu vmlinuz e initramfs e meu gerenciador de boot detecta automaticamente a instalação. Inicializar e atualizar funciona conforme o esperado. A única ressalva é, até agora, que eu precisava usar os comandos para montar / boot. Então, como qualquer administrador de sistema responsável, eu fiz uma entrada fstab:

UUID=XXXX-XXXX      /boot   vfat    rw,relatime 0 0
/boot/EFI/ubuntu    /boot   none    bind        0 0

Apesar de ser análogo aos comandos acima, na inicialização, toda a partição EFI permanece montada. A segunda linha, executando a montagem de ligação de sombra, parece não executar. Existe uma maneira de fazer isso funcionar no fstab e, se não, qual seria uma maneira confiável de executar a montagem de ligação o mais rápido possível após a montagem inicial?

    
por detuur 29.03.2018 / 14:39

1 resposta

0

Como sugerido pelo @RamanSailopal, a resposta foi (obviamente) no dmesg. A raiz do problema é que o systemd cria arquivos unitários a partir de entradas fstab e, por qualquer motivo, eles devem ter um nome de arquivo que mapeie para o ponto de montagem. Em outras palavras, várias montagens por ponto de montagem não são permitidas.

Eu trabalhei em torno disso, criando um arquivo de serviço systemd que se auto-injeta como uma dependência de local-fs.target , agindo como uma unidade de montagem normal do systemd:

/etc/systemd/system/boot-shadow-mount.service :

# Performs the shadow bind mount to hide the ESP at /boot
# and instead expose the ubuntu subdirectory.

[Unit]
Description=/boot shadow bind mount
Requires=boot.mount
Conflicts=umount.target

[Service]
Type=oneshot
ExecStart=/bin/mount --bind /boot/EFI/ubuntu /boot
ExecStop=/bin/umount /boot
RemainAfterExit=True

[Install]
RequiredBy=local-fs.target unattended-upgrades.service
    
por 29.03.2018 / 16:06