«Невозможно найти корневое устройство» при новой установке 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, но мне интересно, какую таблицу разделов вы использовали?
MADforFUNandHappy

Прошло много времени, а MacBook больше нет, но я уверен, что он использовал GPT.
HLT

Хотя я получаю те же проблемы, что и OP, и ваш ответ, кажется, относится ко мне, он не решил мою проблему.
Натан Гоингс

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

После этого вы можете использовать ваш любимый текстовый редактор, чтобы переместить строку в соответствующее пространство.

РЕДАКТИРОВАТЬ: я только что понял, что номер столбца в маленьком скрипте awk может отличаться, поэтому лучше взглянуть на вывод, прежде чем пипетировать его в syslinux.cfg

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.