Không thể tìm thấy thiết bị root, trên một bản cài đặt ArchLinux mới


36

Tôi đã cài đặt phiên bản mới nhất của ArchLinux (2014.06.01) trên MacBook Pro 8.1 (15 ", nếu vấn đề liên quan đến phần cứng) khởi động kép với OSX theo hướng dẫn trong hướng dẫn cài đặt chính thức . Tuy nhiên, khi thử và khởi động lại vào hệ thống mới được cài đặt, nó thả tôi vào trình phục hồi:

ERROR: device 'UUID=<snip>' not found. Skipping fsck.
ERROR: Unable to find root device 'UUID=<snip>'.
You are being dropped to a recovery shell
    Type 'exit' to try and continue booting
sh: can't access tty: job control turned off
[rootfs /]# 

(Tôi đã xóa UUID vì tôi không muốn gõ nó ra, nhưng nó giống với cái được đưa cho tôi bởi blkid(từ đĩa cài đặt) cho phân vùng ArchLinux được cài đặt trên)

Khác trực tuyến nguồn đề nghị này là do một lỗi thời pacman, udev, filesystemhoặc linuxgói. Tuy nhiên, họ chỉ mô tả vấn đề này sau khi cập nhật kernel từ hệ thống đang hoạt động chứ không phải cài đặt mới. Tôi buộc cài đặt lại các gói này từ arch-chrootmôi trường trong khi khởi động vào đĩa cài đặt, nhưng điều đó không thay đổi tình hình.

Thay vào đó, một chút thử nghiệm với các grub.cfgchương trình của tôi cho thấy bất cứ điều gì bị phàn nàn là roottham số cho linuxlệnh chọn vmlinuztệp nào sẽ sử dụng. Trên thực tế, thay đổi root=UUID=<snip>để root=LABEL=ArchLinuxhoặc root=/dev/sda8(cả mô tả nơi ArchLinux được cài đặt và tôi đã chắc chắn sử dụng phiên bản thứ hai thành công trước khi phân phối với nhau) cho phép Unable to find root device 'LABEL=ArchLinux'Unable to find root device '/dev/sda8'tương ứng. Hơn nữa, GRUB dường như có thể tìm thấy phân vùng bằng UUID, chỉ có kernel linux phàn nàn về việc nó không được tìm thấy, vì ramdisk ban đầu được tải đúng cách (nghĩa là đây không phải là lỗi GRUB như được mô tả ở đây mà là lỗi linux) .

Như một lưu ý phụ: vỏ phục hồi bị hạn chế nghiêm trọng và đầu ra tiêu chuẩn dường như không hoạt động đúng. Tuy nhiên, lscác tệp hoạt động và liệt kê hiển thị một hệ thống tệp cơ bản (tạm thời), nhưng tất cả các thiết bị đĩa dường như bị thiếu /dev. Tuy nhiên, tôi không biết liệu đây có phải là một phần của lỗi hay không.

Điều này tương tự, nhưng không giống như Linux không tìm thấy hệ thống tập tin gốc khi khởi động , vì phân vùng đã được ext4 ngay từ đầu. Cũng không hoàn toàn giống nhau, nhưng có lẽ có liên quan là Không thể khởi động ArchLinux trên Macbook Pro 7.1 - rơi vào shell recovery , tuy nhiên, ở đó, nó rơi vào ramfsshell thay vì rootfsshell và các thông báo lỗi khác nhau.

Câu trả lời:


34

Thay vì khởi động với hình ảnh bình thường, tôi đã sử dụng phiên bản dự phòng và quản lý để khởi động vào hệ thống. Hóa ra, Linux không thể phát hiện bất kỳ ổ đĩa nào do block mkinitcpiohook (chịu trách nhiệm cho các thiết bị khối) bị thiếu khỏi hình ảnh mặc định. Điều này là do nó được đặt sau autodetecttrong /etc/mkinitcpio.conf. Để khắc phục điều này, HOOKS=...dòng trong tệp đó cần phải được thay đổi để blockđi trướcautodetect

Trước khi sửa:

HOOKS="base udev autodetect block modconf filesystems keyboard fsck"

Sau khi sửa lỗi:

HOOKS="base udev block autodetect modconf filesystems keyboard fsck"

Chạy mkinitcpio -p linuxđể tạo lại initramfssau đó khắc phục sự cố vĩnh viễn.


Nó rất hữu ích :)
ajukraine

Điều này có vẻ khó tái tạo, tôi đã có cùng một vấn đề và điều này đã khắc phục nó nhưng cùng một ổ đĩa hoạt động hoàn toàn tốt trên một máy tính khác. Máy tính xảy ra sự cố là máy tính LGA775 khá cũ và giải pháp ở trên là không cần thiết khi sử dụng bảng phân vùng mbr. Vì vậy, sự cố chỉ xảy ra khi sử dụng bảng phân vùng gpt trên hệ thống cũ không có UEFI. Tôi không biết máy Mac luôn sử dụng EFI nhưng tôi tự hỏi bạn đã sử dụng bảng phân vùng nào?
MADforFUNandHappy

Đã được một thời gian và MacBook không còn nữa, nhưng tôi khá chắc chắn rằng nó đã sử dụng GPT.
hlt

Mặc dù, tôi đang gặp vấn đề tương tự như OP và câu trả lời của bạn dường như áp dụng cho tôi, nhưng nó không giải quyết được vấn đề của tôi.
Goings

1

Tôi gặp vấn đề tương tự nhưng với một thiết lập khác. Tôi đang sử dụng ArchLinux trong một máy ảo và bộ tải khởi động của tôi là syslinux. Tôi đã sử dụng thủ thuật của bạn để chuyển đổi thứ tự hook kernel nhưng cuối cùng tôi vẫn ở trong rootfs-shell.

Điều đã khắc phục vấn đề đối với tôi là thay đổi APPENDdòng trong tôi syslinux.cfgtừ

APPEND root=UUID=<snip>

đến

APPEND root=PARTUUID=<snip>

Bạn có thể dễ dàng nối thêm PARTUUIDvào syslinux.cfgbằng cách sử dụng lệnh như blkid | grep sda1 | awk '{ print $7 }' >> /boot/syslinux/syslinux.cfggiả sử phân vùng gốc của bạn là/dev/sda1

Sau đó, bạn có thể sử dụng trình soạn thảo văn bản yêu thích của mình để di chuyển dòng đến không gian thích hợp.

EDIT: Tôi chỉ nhận ra rằng số cột trong tập lệnh awk nhỏ có thể thay đổi, vì vậy tốt hơn nên xem đầu ra trước khi đưa nó vào syslinux.cfg

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.