Arch не монтирует массив btrfs при загрузке

В качестве раздела данных у меня есть многодисковая файловая система btrfs. Мой корневой диск – 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 

Когда я загружаю машину, она будет ждать 1m30s с сообщением

 A start job is running for dev-sdc.device 

И после этого

 Dependency failed for /mnt/btrfs 

Когда я вхожу в систему, я могу сделать

 mount /mnt/btrfs systemctl default 

И это сработает. Система загрузится нормально.

Сначала, хотя мне может понадобиться сделать что-то с крюком mkinitcpio, но на этой странице написано:

Пакет по умолчанию mkinitcpio от Arch содержит стандартный крюк btrfs, которого достаточно, чтобы получить поддержку нескольких устройств (RAID). Кроме того, ядро ​​способно загружать корневой узел btrfs без устройства

Так что все должно работать из коробки.

Почему это не работает, и что мне делать, чтобы исправить это?

Два комментария. Сначала попробуйте установить ярлык или UUID вместо устройства. Имена устройств могут иногда меняться.

В противном случае brtfs device scan требует brtfs device scan вызова brtfs device scan прежде чем он узнает о файловых brtfs device scan на вашем компьютере. Я ожидал, что arch обработает это, но каким-то образом это не сработало, пока я не создала для него служебный файл и не поместил его в /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 , в противном случае он загружает загрузку. (У пользователей, не относящихся к Arch, могут быть btrfs расположенные в /sbin вместо /usr/bin )

Это то, что нужно обработать с помощью btrfs hook (я понял, что немного позже), но все же возможно, что есть проблема с этим.

Однако у вас может быть и другая проблема. Эта Dependency failed обусловлена ​​тем, что некоторая ранняя требуемая служба не запускалась. Я понятия не имею, что это может быть, вы должны проверить свой journalctl -b и искать жалобы о зависимости, обычно указывается, чего именно не хватает. Или, по крайней мере, вы получаете цепочку зависимостей, которые не удались – возможно, что ошибки отказа распространяются …

Вы также можете создать systemd-analyze plot > boot.svg и проверить последовательность, которую точно загрузили в каком порядке. Вы можете догадаться, что именно пошло не так – кто ждал кого? И что говорит systemctl --failed ?

Существует крючок для mkinitcpio который вы можете включить для обеспечения

 btrfs device scan 

будет запускаться во время загрузки до того, как будет установлена ​​файловая система root.

Вы можете включить этот крючок, изменив /etc/mkinitcpio.conf , ищите линию HOOKS и поместите btrfs перед udev .

После модификации обязательно восстановите initramfs с помощью mkinitcpio -p linux

Arch Wiki на самом деле рекомендует использовать udev hook, однако у меня такая же проблема и исправлена ​​таким образом.