Как исправить загрузку в приглашении initramfs и «mount: не может прочитать» / etc / fstab: «Нет такого файла или каталога» и «Не найдено init»?

25

Установка новой системы с использованием многораздельного диска GPT, выделенного для одного раздела, в формате ext4 , extlinux (версия 4.05) в качестве загрузчика, Ubuntu Core версии 13.10, amd64 в качестве rootfs и Ubuntu linux-image-3.11.0-18-generic в качестве ядра, и extlinux-update для генерации конфигурации загрузчика.

Результатом после перезагрузки (все еще внутри виртуальной машины на основе KVM) является приглашение (initramfs) и эти сообщения:

mount: can't read '/etc/fstab': No such file or directory
mount: mounting /dev on /root/dev failed: No such file or directory
mount: mounting /sys on /root/sys failed: No such file or directory
mount: mounting /proc on /root/proc failed: No such file or directory
The filesystem doesn't have requested /sbin/init.
No init found. Try passing init= bootarg.

BusyBox v1.20.2.

Регресс:

  • файловая система была проверена с fsck.ext4

Проверьте наличие root

(initramfs) ls -l /dev/[hs]da*
ls: /dev/[hs]da*: No such file or directory

Корневой аргумент загрузки

(initramfs) cat /proc/cmdline
initrd=/boot/initrd.img-3.11.0-18-generic ro quiet BOOT_IMAGE=/boot/vmlinuz-3.11.0-18-generic

Проверьте загруженные модули

(initramfs) cat /proc/modules
e1000 145368 0 - Live 0xffffffffa0000000

/ содержимое папки boot

$ sudo ls -l boot
-rw------- 1 root root 3296162 Feb 18 22:37 System.map-3.11.0-18-generic
-rw-r--r-- 1 root root 1007681 Feb 18 22:37 abi-3.11.0-18-generic
-rw-r--r-- 1 root root  163258 Feb 18 22:37 config-3.11.0-18-generic
drwxr-xr-x 2 root root    4096 Mar 17 20:13 extlinux
-rw-r--r-- 1 root root 4995000 Mar 16 23:35 initrd.img-3.11.0-18-generic
-rw------- 1 root root 5634192 Feb 18 22:37 vmlinuz-3.11.0-18-generic

Как заставить эту систему загружаться в ожидаемую подсказку bash по умолчанию?

Pro Backup
источник
Почему два начальных изображения? Можете ли вы положить это на настоящий диск и попытаться загрузить его? У Qemu и EFI есть проблемы - например, если вы не используете образ загрузочной прошивки EFI, вы не продвинетесь слишком далеко.
mikeserv
И если все, что вам нужно, это приглашение bash, вы всегда можете включить bash в свои initramfs ...
mikeserv
На самом деле, я помню, как смотрел на разделы LARGE GPT в Ubuntu и они регистрировались как совершенно пустые. После того, как я удержал shift при перезагрузке, чтобы получить выбор grub для их живого диска, я смог выбрать опцию Efi, после чего у меня был диск.
Микесерв

Ответы:

11

Измените параметр загрузки ядра, установив root=/dev/sdaX параметр. sdaXбудет ваш /или rootраздел. При следующей загрузке вы увидите, что вы initramfsпытаетесь смонтировать раздел, прежде чем пытаться получить доступ /etc/fstabи смонтировать файловые системы.

Смотри вопрос " Использует ли initramfs / etc / fstab? " Для более подробной информации.

Alex
источник
Добавление root=/dev/sdaX улучшает ситуацию, не больше не (initramfs)но bashВойти подскажите вместо этого.
Pro Backup
1
Помимо ручного добавления root=/dev/sdaXв загрузку ядра, мне нужно обновить /mnt/etc/default/extlinuxи изменить EXTLINUX_ROOT=""на предложенное EXTLINUX_ROOT="/dev/sdaX"и запустить extlinux-updateснова.
Pro Backup
10

Вам нужно понять, initramfsчто это файловая система. Начиная с ядра 2.6, это, по сути, единственная навязанная ядром файловая система (за исключением VFS, которая, возможно, также является файловой системой) на вашем компьютере. Ваш initramfs imageобраз диска.

В вашем initramfs imageраспоряжении будут все файлы, которые ваш дистрибутив посчитал достаточно важными, прежде чем ваш корневой диск будет найден. Обычно это Busybox и любые модули ядра, которые вам нужны, чтобы найти и смонтировать ваше корневое устройство. Это не работает для вас.

Здесь нет настоящей тайны, учитывая все обстоятельства. Если вы можете обойти терминал, вы можете перемещаться поinitramfs. Но сначала вы должны демистифицировать ее.

В первую очередь и еще раз - это просто /.Linux root делает вещи типа root. Фактически, если он находится в отдельном файле от вашего ядра, это уже ваше второе корневое устройство. Каждое ядро ​​Linux содержит в основном пустое/ все свои собственную которой он первый монтируют перед вытягивать в вашемinitramfs.

Более того, initramfsэто настоящий корень. Это где ядро ​​Linux инициализирует пространство пользователя, выполнивinit и впоследствии отказываясь от всей ответственности за любые проблемы, с которыми вы можете столкнуться после этого. Вы , initкажется, Busybox, как и многие другие , что означает контроль его действия должны быть столь же простым , как редактирование сопровождающих его сценариев оболочки.

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

Самое поразительное для меня то, что псевдо файловые системы ядра dev sys proc- не монтируются. Это либо очень неприятно, либо очень хорошая подсказка. Вы упомянули KVM, который заставляет меня задаться вопросом о возможностях ядра, но прежде чем мы пойдем по темной и извилистой дороге, можем ли мы сначала попробовать что-нибудь еще?

cd /root || mkdir /root

Меня поражает, что сообщение об ошибке повторяется:

Данный файл или каталог отсутствует

В противном случае вам нужно восстановить свой initramfsимидж. Для этого загрузитесь с живого диска и запустите любой инструмент, предоставляемый вашим дистрибутивом для достижения этой цели. О, и убедитесь, что этот живой диск загружен в EFI режиме .

Так что вот единственная действительно необычная вещь о initramfs - switchroot.

Ядро Linux предоставляет особый системный вызов, предназначенный для раннего пользовательского пространства и обрабатывающий переход с устройства initramfsна корневой диск. Он работает, сначала монтируя корневой диск в точку монтирования, initramfsа затем поворачивая корневую файловую систему в него. Я предполагаю, что ваша initramfs'sцелевая точка монтирования rootоснована на том, как она продолжает стонать об этом. Почему бы не убедиться, что это там?

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

init=/bin/sh

... как параметр ядра.

mikeserv
источник
... целевая точка монтирования - root ... Почему бы не убедиться, что она есть? Я не имею ни малейшего представления, как это проверить.
Pro Backup
Вам больше не нужно. Вы получили bash, что означает, что вы прошли initramfs. Но ты все еще в квм?
mikeserv
Да, я все еще в квм.
Pro Backup
@ProBackup Если вы сделали это там, вам нужно дать другому парню свою награду - это то, что вы заявили, было вашей целью, в любом случае. Неважно - вы, очевидно, уже сделали это. Мне интересно знать, почему вам нужно указать два образа init - почему initrd и boot? Что это? Я также хотел бы знать, что, если что-нибудь, вы можете выйти из efibootmgrвашего приглашения на вашей виртуальной машине.
mikeserv
Я задал новый вопрос SE по поводу почему: unix.stackexchange.com/questions/120999/… Примечание: я действительно думаю, что этот KVM (Parallels Desktop v8) имеет только BIOS (не UEFI) из-за сообщения о загрузке BIOS.
Pro Backup
0

У меня такая же проблема. То, что сказал Алекс, верно. Сначала я поправил свой fstab, но это не помогло. Итак, я проверил мой харч. Если у вас есть возможность получить доступ к меню Grub.

  • Выберите Linux, который вы хотите запустить и который создает проблемы.
  • Нажмите «e» и найдите «boot_image» или «boot ... root».
  • Проверьте « uuid ».
  • В моем случае это было неправильно. Я создаю картинку в initramfs, набирая 'blkid' и беру uuid, на котором установлен мой linux.
  • Передайте правильный uuid из blkid в grub -> boot_image.

Это решило мою проблему. После перезагрузки моему linux понадобилось больше времени, чтобы начать проверять диск. Но теперь это работает снова.

Я надеюсь, что смогу помочь тебе.

С уважением

Абе Нудель
источник