Arch stellt das btrfs-Array beim Booten nicht bereit

8

Als Datenpartition habe ich ein btrfs-Dateisystem mit mehreren Festplatten. Meine Root-Festplatte ist 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

Wenn ich den Computer starte, wartet er mit der Meldung 1:30 Minuten

A start job is running for dev-sdc.device

Und danach

Dependency failed for /mnt/btrfs

Wenn ich mich anmelde, kann ich tun

mount /mnt/btrfs
systemctl default

Und es wird funktionieren. Das System startet normal.

Ich muss zwar zuerst etwas mit einem mkinitcpio-Hook machen, aber diese Seite sagt:

Das Standardpaket mkinitcpio von Arch enthält einen Standard-btrfs-Hook, der ausreicht, um RAID-Unterstützung (Multi Device) zu erhalten. Außerdem kann der Kernel einen btrfs-Root eines einzelnen Geräts ohne Hook booten

Also sollte alles sofort funktionieren.

Warum funktioniert es nicht und was soll ich tun, um es zu beheben?

Peter Smit
quelle

Antworten:

8

Zwei Kommentare. Versuchen Sie zunächst, anstelle des Geräts nach Label oder UUID zu mounten. Gerätenamen können sich manchmal ändern.

Andernfalls ist btrfsein brtfs device scanAufruf erforderlich , bevor die btrfsDateisysteme auf Ihrem Computer bekannt sind. Ich hatte damit gerechnet arch, aber irgendwie hat es nicht funktioniert, bis ich eine Servicedatei dafür erstellt und in Folgendes eingefügt habe /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=falseist notwendig, sonst fickt es den Kofferraum auf. (Nicht-Arch-Benutzer haben möglicherweise btrfsin /sbinstatt statt /usr/bin)

Dies sollte per btrfsHook erledigt werden (das habe ich etwas später herausgefunden), aber dennoch ist es möglich, dass es ein Problem damit gibt.

Möglicherweise haben Sie jedoch ein anderes Problem. Dies Dependency faileddeutet darauf hin, dass ein früher erforderlicher Dienst nicht gestartet wurde. Ich habe keine Ahnung, was das sein könnte, Sie sollten Ihre überprüfen journalctl -bund nach Abhängigkeitsbeschwerden suchen, es gibt normalerweise an, was genau fehlt. Oder zumindest erhalten Sie eine Kette von Abhängigkeiten, die fehlgeschlagen sind - es ist möglich, dass sich Abhängigkeitsfehler ausbreiten ...

Sie können auch systemd-analyze plot > boot.svgdie Sequenz generieren und überprüfen, was genau in welcher Reihenfolge gestartet wurde. Daraus können Sie erraten, was genau schief gelaufen ist - wer hat auf wen gewartet? Und was systemctl --failedsagt das aus?

Orion
quelle
3

Es gibt einen Haken mkinitcpio, den Sie einschließen können, um sicherzustellen

btrfs device scan

wird während des Startvorgangs ausgeführt, bevor das Root-Dateisystem bereitgestellt wird.

Sie können diesen Haken umfassen durch Modifizieren /etc/mkinitcpio.conf, für die Linie suchen HOOKSund setzen btrfsvor udev.

Stellen Sie nach der Änderung sicher, dass initramfs von neu generiert wird mkinitcpio -p linux

Das Arch Wiki empfiehlt tatsächlich die Verwendung des udevHooks, jedoch habe ich das gleiche Problem und es wird auf diese Weise behoben.

Michael Lam
quelle