Arch não monta o array btrfs no boot

8

Como partição de dados, eu tenho um sistema de arquivos multi-disco btrfs. 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 por 1m30s com a mensagem

A start job is running for dev-sdc.device

E depois disso

Dependency failed for /mnt/btrfs

Quando faço login, posso fazer

mount /mnt/btrfs
systemctl default

E vai funcionar. O sistema inicializará normalmente.

Em primeiro lugar, posso precisar fazer algo com um gancho mkinitcpio, mas esta página diz:

Arch's default mkinitcpio package contains a standard btrfs hook, which is enough to get multi-device (RAID) support. Beside that, the kernel is capable of booting a single-device btrfs root without any hook

Então, tudo deve funcionar imediatamente.

Por que não funciona e o que devo fazer para corrigir isso?

    
por Peter Smit 22.03.2014 / 09:12

2 respostas

7

Dois comentários. Primeiro, tente montar por Label ou UUID em vez de dispositivo. Nomes de dispositivos podem, às vezes, mudar.

Caso contrário, btrfs requer brtfs device scan de chamada antes de saber sobre btrfs filesystems em sua máquina. Eu esperava arch para lidar com isso, mas de alguma forma não funcionou até que eu criei um arquivo de serviço para isso e coloquei 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 consome a bota. (Os usuários que não usam o Arch podem ter btrfs localizado em /sbin em vez de /usr/bin )

Isto é o que deve ser tratado por btrfs hook (eu percebi isso um pouco mais tarde), mas ainda assim, é possível que haja um problema com isso.

No entanto, você pode ter algum outro problema. Esse Dependency failed sugere que algum serviço anterior não foi iniciado. Eu não tenho idéia do que isso poderia ser, você deve verificar o seu journalctl -b e procurar por reclamações de dependência, geralmente afirma o que está faltando. Ou, pelo menos, você obtém uma cadeia de dependências que falharam - é possível que falhas de dependência se propaguem ...

Você também pode gerar systemd-analyze plot > boot.svg e verificar a sequência exatamente o que foi inicializado em que ordem. Você pode adivinhar o que exatamente deu errado - quem estava esperando por quem? E o que diz systemctl --failed ?

    
por 22.03.2014 / 12:15
3

Existe um gancho para mkinitcpio que você pode incluir para garantir

btrfs device scan

será executado durante a inicialização antes que o sistema de arquivos raiz seja montado.

Você pode incluir esse gancho modificando /etc/mkinitcpio.conf , pesquisar a linha HOOKS e colocar btrfs na frente de udev .

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

O Arch Wiki, na verdade, recomenda usar o udev hook, no entanto, tenho o mesmo problema e é corrigido dessa maneira.

    
por 28.07.2014 / 10:45