O Arch não monta a matriz btrfs na inicialização

8

Como partição de dados, tenho um sistema de arquivos btrfs com vários discos. Meu disco raiz é ext4

Fstab:

UUID=290624c6-6b95-41fd-94a1-923ebca64b83   /           ext4        rw,relatime,data=ordered    0 1
/dev/sdc    /mnt/btrfs  btrfs   rw,relatime,compress-force=zlib,autodefrag  0   0

Quando eu inicializo a máquina, ela espera 1m30s com a mensagem

A start job is running for dev-sdc.device

E depois disso

Dependency failed for /mnt/btrfs

Quando faço o login, posso fazer

mount /mnt/btrfs
systemctl default

E vai funcionar. O sistema inicializará normalmente.

Primeiro, talvez eu precise fazer algo com um gancho mkinitcpio, mas esta página diz:

O pacote mkinitcpio padrão do Arch contém um gancho btrfs padrão, o suficiente para obter suporte a vários dispositivos (RAID). Além disso, o kernel é capaz de inicializar uma raiz btrfs de dispositivo único sem nenhum gancho

Portanto, tudo deve funcionar imediatamente.

Por que não funciona e o que devo fazer para corrigi-lo?

Peter Smit
fonte

Respostas:

8

Dois comentários Primeiro, tente montar por Label ou UUID em vez de por dispositivo. Às vezes, os nomes dos dispositivos podem mudar.

Caso contrário, é btrfsnecessário brtfs device scanligar antes de conhecer os btrfssistemas de arquivos em sua máquina. Eu esperava archlidar com isso, mas de alguma forma não funcionou até criar um arquivo de serviço e colocá-lo em /etc/systemd/system/local-fs-pre.target.wants/btrfs-dev-scan.service:

[Unit]
Description=Btrfs scan devices
Before=local-fs-pre.target
DefaultDependencies=false

[Service]
Type=oneshot
ExecStart=/usr/bin/btrfs device scan

[Install]
WantedBy=local-fs-pre.target

DefaultDependencies=falseé necessário, caso contrário, ele estraga a bota. (Usuários que não são do Arch podem ter btrfslocalizado em /sbinvez de /usr/bin)

Isso é o que deve ser tratado com btrfsgancho (imaginei isso um pouco mais tarde), mas ainda assim, é possível que haja um problema com isso.

No entanto, você pode ter algum outro problema. Isso Dependency failedsugere que algum serviço necessário anterior não foi iniciado. Eu não tenho idéia do que poderia ser, você deve verificar o seu journalctl -be procurar por reclamações de dependência, geralmente indica o que exatamente está faltando. Ou, pelo menos, você obtém uma cadeia de dependências que falharam - é possível que as falhas de dependência se propagem ...

Você também pode gerar systemd-analyze plot > boot.svge verificar a sequência o que exatamente inicializou em que ordem. Você pode adivinhar a partir disso o que exatamente deu errado - quem estava esperando por quem? E o que systemctl --faileddiz?

orion
fonte
3

Existe um gancho mkinitcpioque você pode incluir para garantir

btrfs device scan

será executado durante a inicialização antes da montagem do sistema de arquivos raiz.

Você pode incluir esse gancho modificando /etc/mkinitcpio.conf, procure a linha HOOKSe coloque btrfsna frente udev.

Após a modificação, certifique-se de regenerar o initramfs mkinitcpio -p linux

O Arch Wiki realmente recomenda o uso do udevgancho, no entanto, eu tenho o mesmo problema e é corrigido dessa maneira.

Michael Lam
fonte