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

8

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

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

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

Питер Смит
источник

Ответы:

8

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

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

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

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

Орион
источник
3

Есть крючок, mkinitcpioкоторый вы можете включить, чтобы

btrfs device scan

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

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

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

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

Майкл Лэм
источник