Як виправити завантаження у запит 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

Перевірте наявність кореня

(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

/ вміст папки завантаження

$ 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 bash?


Чому два зображення init? Чи можете ви поставити це на фактичний диск і спробувати завантажити його? У Qemu та EFI є проблеми - наприклад, якщо ви не використовуєте зображення прошивки завантажувального програмного забезпечення EFI, ви зовсім не дуже далеко заїдете.
mikeserv

І якщо все, що ви хочете, це баш-підказка, ви завжди можете включити баш у свої initramfs ...
mikeserv

Насправді я пам’ятаю, як дивився на великі розділи GPT в Ubuntu, і вони реєструвались як абсолютно порожні. Після зміни перезавантаження я отримав вибір для їх живого диска, і я зміг вибрати варіант Efi, після чого у мене був диск.
mikeserv

Відповіді:


11

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

Див. Питання " Чи використовує initramfs / etc / fstab? " Для отримання більш детальної інформації.


Додавання root=/dev/sdaX покращує ситуацію, натомість не існує (initramfs)лише bashзапит на вхід.
Pro резервне копіювання

1
Крім додавання вручну root=/dev/sdaXдо завантаження ядра, мені потрібно оновити /mnt/etc/default/extlinuxта змінити EXTLINUX_ROOT=""запропоновані EXTLINUX_ROOT="/dev/sdaX"та запустити extlinux-updateзнову.
Pro Резервне копіювання

10

Що вам потрібно зрозуміти, initramfsце те, що це файлова система. Оскільки ядро ​​2.6, це, по суті, єдина файлова система, накладена ядром (залишаючи осторонь VFS, який, можливо, також є файловою системою) на вашій машині. Ваш initramfs imageобраз диска.

В межах ваших initramfs imageфайлів будуть файли, для яких ваш дистриб'ютор вирішили, щоб вони були потрібні, перш ніж ваш кореневий диск буде знайдений. Зазвичай це Busybox та будь-які модулі ядра, які вам знадобляться, щоб знайти та встановити кореневий пристрій. Це не працює для вас.

Тут немає жодної справжньої таємниці, все враховано. Якщо ви можете знайти свій шлях навколо підказки терміналу, ви можете орієнтуватися на initramfs.Але спочатку ви повинні демістифікувати його.

Перше і головне і ще раз - це просто /.Linux-корінь, що робить речі з кореневим типом Linux. Насправді, якщо він знаходиться в окремому файлі від вашого ядра, це фактично вже ваш другий кореневий пристрій. Кожне ядро ​​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

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


... цільова точка кріплення є кореневою ... Чому б не переконатися, що вона існує? Мені не до душі ідея, як це перевірити.
Pro Резервне копіювання

Вам більше не потрібно. Ти отримав баш, що означає, що ти минулий initramfs. Але ви все ще в kvm?
mikeserv

Так, я все ще в кв.
Pro резервне копіювання

@ProBackup Якщо ви зробили це там, вам потрібно подарувати другому хлопцеві свою щедрість - ось, що ви заявили, було вашою метою. Не забудьте - ви, мабуть, вже зробили це. Мені цікаво знати, чому потрібно вказати два зображення initrd - чому initrd та boot? Що це? Я також хотів би знати, що, якщо що, ви можете не працювати efibootmgrза своїм підказом у вашій віртуальній машині.
mikeserv

Я створив нове запитання SE для того, чому: unix.stackexchange.com/questions/120999/… Примітка: я думаю, що цей KVM (Parallels Desktop v8) має лише BIOS (не UEFI) завдяки повідомленню про завантаження BIOS.
Pro резервне копіювання

0

У мене була така ж проблема. Те, що сказав Олексій, є правильним. Спочатку я відкоригував свій fstab, але це не допомогло. Отже, я перевірив свою грубку. Якщо у вас є можливість отримати доступ до меню grub.

  • Виберіть Linux, що ви хочете запустити, і що створює проблеми.
  • Натисніть "e" і шукайте "boot_image" або "boot ... root".
  • Перевірте " uuid ".
  • У моєму випадку це було неправильно. Я роблю картинку в initramfs, набравши 'blkid' і беру uuid, на якому розділі встановлений мій Linux.
  • Минуле правильне uuid від blkid до grub -> boot_image.

Це вирішило мою проблему. Після перезавантаження мого linux потрібен довший час, щоб почати перевірку диска. Але зараз це знову працює.

Я сподіваюся, що я міг би вам допомогти.

З повагою

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