"Неможливо знайти кореневий пристрій" у свіжій установці ArchLinux


36

Я встановив останню версію ArchLinux (2014.06.01) на MacBook Pro 8,1 (15 ", якщо це стосується апаратного забезпечення) подвійного завантаження з OSX, дотримуючись інструкцій в офіційному посібнику з встановлення . Однак, коли спробуйте перезавантажити у щойно встановлену систему, це перетворює мене в оболонку відновлення:

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 /]# 

(Я видалив UUID, тому що не хотів його вводити, але він такий самий, як той, який мені дали blkid(з диска встановлення) для розділу ArchLinux, на якому встановлено)

Інші інтернет - джерела припускають , що це пов'язано із застарілою pacman, udev, filesystemабо linuxпакет. Однак вони описують цю проблему лише після оновлення ядра з робочої системи, а не свіжої установки. Я змусив перевстановити ці пакети з arch-chrootоточення під час завантаження на інсталяційний диск, але це не змінило ситуації.

Натомість, трохи експериментуючи з моїми grub.cfgпоказами, що все, на що скаржиться, є rootпараметром linuxкоманди, що вибирає, який vmlinuzфайл використовувати. Дійсно, зміна root=UUID=<snip>в root=LABEL=ArchLinuxабо root=/dev/sda8(як описують , де встановлений ArchLinux , і я , звичайно , використовував другий варіант успішно раніше з іншим розподілом) дає Unable to find root device 'LABEL=ArchLinux'і Unable to find root device '/dev/sda8'відповідно. Крім того, схоже, GRUB зможе знайти розділ за допомогою UUID, лише ядро ​​Linux скаржиться на те, що його не знайдено, оскільки початковий ramdisk завантажений належним чином (тобто це не помилка GRUB, як описано тут, а скоріше помилка Linux) .

Як бічна примітка: оболонка відновлення сильно обмежена, і, здається, стандартний вихід не працює належним чином. Тим не менш, lsпрацює, і перелік файлів показує основну (тимчасову) файлову систему, але, схоже, всі дискові пристрої відсутні /dev. Однак я не знаю, чи це частина помилки чи ні.

Це схоже, але не те саме, що Linux не знаходить кореневої файлової системи під час завантаження , оскільки розділ був ext4 з самого початку. Також не зовсім те саме, але, можливо, доречним є Неможливо завантажувати ArchLinux на Macbook Pro 7.1 - потрапляє до оболонки відновлення , проте там вона потрапляє в ramfsоболонку замість rootfsоболонки і повідомлення про помилки відрізняються.

Відповіді:


34

Замість завантаження звичайного зображення я використав резервну версію і зумів завантажитися в систему. Як виявляється, Linux не міг виявити жодних дисків через block mkinitcpioвідсутність гака (відповідального за блокові пристрої) у зображенні за замовчуванням. Це було пов’язано з тим, що було розміщено після autodetectв /etc/mkinitcpio.conf. Щоб виправити це, HOOKS=...рядок у цьому файлі потрібно змінити, щоб він був blockранішеautodetect

Перед виправленням:

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

Після виправлення:

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

Запускається mkinitcpio -p linuxвідновити initramfsпотім вирішену проблему назавжди.


Це було дуже корисно :)
ajukraine

Це здається важким для відтворення, у мене була така ж проблема, і це виправлено, але той же привід відмінно працював на іншому ПК. ПК, де виникла проблема, був досить старим ПК LGA775, і рішення вище не було необхідним при використанні таблиці розділів mbr. Тож проблема виникла лише при використанні таблиці розділів gpt у старій системі без UEFI. Я не знаю, чи завжди Mac використовує EFI, але мені цікаво, яку таблицю розділів ви використовували?
MADforFUNіHappy

Минув час, і MacBook вже не є, але я впевнений, що він використовував GPT.
hlt

Хоча я отримую ті самі питання, що і ОП, і ваша відповідь, здається, стосується мене, це не вирішило мого питання.
Натан їде

1

Я зіткнувся з подібною проблемою, але з іншим налаштуванням. Я використовую ArchLinux у віртуальній машині, і мій завантажувач - syslinux. Я використовував ваш трюк для переключення замовлення на гачки ядра, але я все-таки опинився в оболонці rootfs.

Що вирішило проблему для мене, було зміна APPENDрядка в моєму syslinux.cfgвід

APPEND root=UUID=<snip>

до

APPEND root=PARTUUID=<snip>

Ви можете легко додати PARTUUIDдо syslinux.cfg, використовуючи таку команду, як blkid | grep sda1 | awk '{ print $7 }' >> /boot/syslinux/syslinux.cfgприпущення, що ваш кореневий розділ є/dev/sda1

Після цього ви можете використовувати улюблений текстовий редактор, щоб перемістити рядок у відповідне місце.

EDIT: Я щойно визнав, що номер стовпця у малому сценарії awk може змінюватись, тому краще ознайомтеся з результатами, перш ніж передати його в syslinux.cfg

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.