Arch không gắn mảng btrfs khi khởi động


8

Là phân vùng dữ liệu, tôi có một hệ thống tập tin btrfs đa đĩa. Đĩa gốc của tôi là 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

Khi tôi khởi động máy, nó sẽ đợi 1m30 với thông báo

A start job is running for dev-sdc.device

Và sau đó

Dependency failed for /mnt/btrfs

Khi tôi đăng nhập tôi có thể làm

mount /mnt/btrfs
systemctl default

Và nó sẽ hoạt động. Hệ thống sẽ khởi động bình thường.

Trước tiên tôi có thể cần phải làm một cái gì đó với một cái móc mkinitcpio, nhưng trang này nói:

Gói mkinitcpio mặc định của Arch chứa hook btrfs tiêu chuẩn, đủ để nhận hỗ trợ đa thiết bị (RAID). Bên cạnh đó, kernel có khả năng khởi động root btrfs một thiết bị mà không cần bất kỳ hook nào

Vì vậy, mọi thứ nên làm việc ra khỏi hộp.

Tại sao nó không hoạt động, và tôi nên làm gì để khắc phục nó?

Câu trả lời:


8

Hai bình luận. Trước tiên, hãy thử gắn kết bằng Nhãn hoặc UUID thay vì thiết bị. Tên thiết bị đôi khi có thể thay đổi.

Nếu không, btrfsyêu cầu brtfs device scancuộc gọi trước khi nó biết về btrfshệ thống tập tin trên máy của bạn. Tôi dự kiến ​​sẽ archxử lý việc này nhưng bằng cách nào đó nó không hoạt động cho đến khi tôi tạo một tệp dịch vụ cho việc này và đưa nó vào /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=falselà cần thiết, nếu không nó sẽ khởi động. (Người dùng không phải Arch có thể đã btrfs/sbinthay vì /usr/bin)

Đây là những gì nên được xử lý bằng btrfshook (tôi đoán rằng một lát sau), nhưng vẫn có thể có vấn đề với điều đó.

Tuy nhiên bạn có thể có một số vấn đề khác. Điều đó Dependency failedcho thấy rằng một số dịch vụ cần thiết trước đó đã không bắt đầu. Tôi không biết điều đó có thể là gì, bạn nên kiểm tra journalctl -bvà tìm kiếm các khiếu nại phụ thuộc, nó thường nêu chính xác những gì còn thiếu. Hoặc ít nhất, bạn nhận được một chuỗi các phụ thuộc thất bại - có thể là các thất bại phụ thuộc lan truyền ...

Bạn cũng có thể tạo systemd-analyze plot > boot.svgvà kiểm tra trình tự khởi động chính xác theo thứ tự nào. Bạn có thể đoán từ đó chính xác những gì đã sai - ai đang chờ đợi ai? Và, những gì systemctl --failednói?


3

Có một cái móc mkinitcpiomà bạn có thể bao gồm để đảm bảo

btrfs device scan

sẽ chạy trong khi khởi động trước khi hệ thống tập tin gốc được gắn kết.

Bạn có thể bao gồm móc này bằng cách sửa đổi /etc/mkinitcpio.conf, tìm kiếm dòng HOOKSvà đặt btrfsở phía trước udev.

Sau khi sửa đổi, hãy chắc chắn để tạo lại initramfs bằng cách mkinitcpio -p linux

Arch Wiki thực sự khuyên bạn nên sử dụng udevhook, tuy nhiên tôi đã gặp vấn đề tương tự và được khắc phục theo cách này.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.