Arch tidak me-mount array btrfs saat boot

8

Sebagai partisi data saya memiliki sistem file btrfs multi-disk. Disk root saya adalah 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

Ketika saya mem-boot mesin, itu akan menunggu 1m30s dengan pesan

A start job is running for dev-sdc.device

Dan setelah itu

Dependency failed for /mnt/btrfs

Ketika saya login saya bisa melakukannya

mount /mnt/btrfs
systemctl default

Dan itu akan berhasil. Sistem akan boot secara normal.

Saya pertama kali berpikir saya mungkin perlu melakukan sesuatu dengan hook mkinitcpio, tetapi halaman ini mengatakan:

Paket mkinitcpio default Arch berisi hook btrfs standar, yang cukup untuk mendapatkan dukungan multi-perangkat (RAID). Selain itu, kernel mampu mem-boot root btrf satu perangkat tanpa kaitan apa pun

Jadi semuanya harus bekerja di luar kotak.

Mengapa itu tidak berhasil, dan apa yang harus saya lakukan untuk memperbaikinya?

Peter Smit
sumber

Jawaban:

8

Dua komentar Pertama, coba pasang dengan Label atau UUID bukan perangkat. Nama perangkat terkadang dapat berubah.

Kalau tidak, btrfsperlu brtfs device scanpanggilan sebelum tahu tentang btrfssistem file di mesin Anda. Saya berharap archuntuk menangani ini tetapi entah bagaimana itu tidak berhasil sampai saya membuat file layanan untuk ini dan memasukkannya ke dalam /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=falsediperlukan, jika tidak maka boot. (Pengguna Non-Arch mungkin btrfsterletak di /sbinbukan /usr/bin)

Inilah yang harus ditangani dengan btrfshook (saya pikir itu sedikit kemudian), tapi tetap saja, ada kemungkinan bahwa ada masalah dengan itu.

Namun Anda mungkin memiliki masalah lain. Itu Dependency failedmenunjukkan bahwa beberapa layanan yang diperlukan sebelumnya tidak dimulai. Saya tidak tahu apa itu, Anda harus memeriksa journalctl -bdan mencari keluhan ketergantungan, biasanya menyatakan apa yang sebenarnya hilang. Atau setidaknya, Anda mendapatkan rantai dependensi yang gagal - ada kemungkinan kegagalan dependensi menyebar ...

Anda juga dapat membuat systemd-analyze plot > boot.svgdan memeriksa urutan boot yang sebenarnya dalam urutan apa. Dari situ Anda bisa menebak apa yang salah - siapa yang menunggu siapa? Dan, apa systemctl --failedkatanya?

orion
sumber
3

Ada kait untuk mkinitcpioitu yang bisa Anda sertakan untuk memastikan

btrfs device scan

akan berjalan selama boot sebelum root filesystem mount.

Anda dapat memasukkan kait ini dengan memodifikasi /etc/mkinitcpio.conf, mencari garis HOOKSdan meletakkannya btrfsdi depan udev.

Setelah modifikasi pastikan untuk membuat ulang initramfs oleh mkinitcpio -p linux

Wiki Arch sebenarnya merekomendasikan menggunakan udevhook, namun saya punya masalah yang sama dan diperbaiki dengan cara ini.

Michael Lam
sumber