Arch ne monte pas le tableau btrfs au démarrage

8

En tant que partition de données, j'ai un système de fichiers btrfs multi-disques. Mon disque racine est 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

Lorsque je démarre la machine, elle attend 1m30 avec le message

A start job is running for dev-sdc.device

Et après ça

Dependency failed for /mnt/btrfs

Quand je me connecte, je peux le faire

mount /mnt/btrfs
systemctl default

Et ça marchera. Le système démarrera normalement.

J'ai d'abord pensé que je devrais peut-être faire quelque chose avec un crochet mkinitcpio, mais cette page dit:

Le package mkinitcpio par défaut d'Arch contient un hook btrfs standard, ce qui est suffisant pour obtenir une prise en charge multi-périphérique (RAID). En plus de cela, le noyau est capable de démarrer une racine btrfs sur un seul appareil sans aucun hook

Donc, tout devrait fonctionner hors de la boîte.

Pourquoi cela ne fonctionne-t-il pas et que dois-je faire pour y remédier?

Peter Smit
la source

Réponses:

8

Deux commentaires. Tout d'abord, essayez de monter par Label ou UUID au lieu de périphérique. Les noms des appareils peuvent parfois changer.

Sinon, btrfsnécessite un brtfs device scanappel avant de connaître les btrfssystèmes de fichiers sur votre ordinateur. Je m'attendais archà gérer cela, mais d'une manière ou d'une autre, cela n'a pas fonctionné jusqu'à ce que je crée un fichier de service pour cela et que je le mette /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=falseest nécessaire, sinon il fout la botte. (Les utilisateurs non-Arch peuvent avoir btrfslocalisé à la /sbinplace de /usr/bin)

C'est ce qui devrait être géré par btrfshook (je l'ai pensé un peu plus tard), mais il est possible qu'il y ait un problème avec cela.

Cependant, vous pouvez avoir un autre problème. Cela Dependency failedsuggère que certains services requis antérieurs n'ont pas démarré. Je n'ai aucune idée de ce que cela pourrait être, vous devriez vérifier votre journalctl -bet rechercher des plaintes de dépendance, il indique généralement ce qui manque exactement. Ou du moins, vous obtenez une chaîne de dépendances qui a échoué - il est possible que les échecs de dépendance se propagent ...

Vous pouvez également générer systemd-analyze plot > boot.svget vérifier la séquence de ce qui a démarré exactement dans quel ordre. Vous pouvez en déduire ce qui s'est exactement passé - qui attendait qui? Et que systemctl --faileddit-on?

orion
la source
3

Il y a un crochet mkinitcpioque vous pouvez inclure pour vous assurer

btrfs device scan

s'exécutera pendant le démarrage avant le montage du système de fichiers racine.

Vous pouvez inclure ce crochet en le modifiant /etc/mkinitcpio.conf, recherchez la ligne HOOKSet placez-le btrfsdevant udev.

Après la modification, assurez-vous de régénérer les initramfs en mkinitcpio -p linux

L'Arch Wiki recommande en fait d'utiliser le udevcrochet, mais j'ai le même problème et est résolu de cette façon.

Michael Lam
la source