Booting linux from initramfs

Не загружается Ubuntu/Mint/Kali с initramfs в BusyBox

В данной статье мы рассмотрим варианты решения проблем, когда виртуальный или физический серверы на базе Ubuntu/Mint/Kali не загружаются и отваливается в busybox в момент инициализации initramfs. При этом Linux не загружается, и пользователю доступна только командная строка initramfs.

Проблема с суперблоком

Если Ubuntu свалилась в busybox при инициализации initramfs, возможно на диске оказался испорченный суперблок. Linux хранит несколько копий суперблоков.

Для восстановления в случае такой проблемы, нам нужно загрузиться с образа/диска и запустить Terminal. После загрузки, в терминале вводим команду:

# sudo fdisk -l|grep Linux|grep -Ev ‘swap’

Команда вернет информацию о нашем разделе:

Запомните имя раздела и укажите его в следующей команде:

# sudo dumpe2fs /dev/vda2 | grep superblock

Команда вернет список запасных суперблоков:

Мы будем использовать второй резервный суперблок для замены поврежденного (можно выбрать любой, кроме Primary). Выполним проверку диска с использованием резевного суберблока для восстановления:

# sudo fsck -b 98304 /dev/vda2 -y

Нужно отмонтировать раздел:
# umount /dev/vda2

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

Теперь перезагрузите компьютеры, отключив диск с дистрибутивом и все должно быть в порядке.

Ошибка диска fsck

Второй вариант ошибки, наличие следующей строки в окне терминала:

В ошибке будет указан том, который требует запуска ручной проверки диска. В командной строке initramfs выполните:

После полной проверки, нужно перезапустить сервер и проверить все ли в порядке.

Ошибка диска: /dev/sda1 does not exist

Проблема с fstab

Если при загрузке сервера вы видите ошибку:

Скорее всего вы только что установили Linux или то на вашем сервере есть проблемы в fstab. Чаще всего проблема возникает при установке системы с usb-накопителя. Раздел на который ругается система, может быть какой угодно. Как и в первом случае, нам нужно загрузиться с образа системы и выполнить некоторые действия. Проверьте UUID диска командой:

Система выдаст что-то подобное:

Отсюда уже видно, что система должна загружаться с sda2, а по факту загружается с sda1.

Монтируем наш раздел в любую директорию, например:

# sudo mount /dev/sda2 /mnt

Получаем в директории /mnt весь наш раздел /dev/sda2, находим там файл /etc/fstab и изменяем строку, содержащую /dev/sda1 на:

Сохраняем файл. Отмонтируем раздел от /mnt и перезагрузимся, если проблема была связана с не неправильным адресом разделе, сервер загрузится.

Так же данный вариант можно решить, загрузившись в emergency. Перемонтируйте корень для записи:

# sudo mount -o remount,rw /

После чего измените fstab и перезапустите сервер.

Проблема с железом

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

Загрузитесь в режиме emergency или с live-cd и измените файл /boot/grub/grub.cfg

В строке где происходит загрузка раздела, например:

Измените путь до диска на UUID:

Источник

Исправление загрузки в initramfs при запуске Ubuntu

initramfs — файловая система оперативной памяти, которая используется для начального запуска операционных систем на базе ядра Linux. При установке ОС все библиотеки, утилиты и конфигурационные файлы сжимаются в архив, после чего передаются указанной файловой системой в загрузчик, где и продолжается старт системы. Иногда пользователи дистрибутива Ubuntu сталкиваются с тем, что при включении компьютера они попадают в консоль управления именно этой ФС без возможности дальнейшей загрузки системы. Связано это с повреждением потока запуска и восстанавливается достаточно простым методом.

Исправляем ошибку с загрузкой в initramfs при запуске Ubuntu

В большинстве случаев рассматриваемая проблема связана со сбоем в одном из суперблоков, и при попытке выхода из initramfs через команду exit появляется надпись следующего содержания:

exit /dev/mapper/ubuntu—vg-root contains a file system with errors, check forced. Inodes that were part of a corrupted orphan linked list found. /dev/mapper/ubuntu-vg-root: UNEXPECTED INCONSISTENCY; Run fsck MANUALLY. (ie, without -a or -p options) fsck exited with status code 4. The root file system on /dev/mapper/ubuntu—vg-root requires manual fsck .

Читайте также:  Windows media kit что это

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

    Загрузите ISO-образ с такой же версией Ubuntu, как установлена на компьютере, с официального сайта и создайте загрузочную флешку. Детальнее об этой процедуре вы можете узнать в другой нашей статье по следующей ссылке.

При запуске ОС выберите загрузку с флешки, и при отображении окна инсталляции переходите в режим «Try Ubuntu».

Узнайте номер системного раздела жесткого диска с установленной системой, введя команду sudo fdisk -l|grep Linux|grep -Ev ‘swap’ .

В новой строке вы увидите обозначение, например /dev/sda1. Запомните его, ведь в дальнейшем это потребуется для исправления ошибки.

Запустите процедуру перечисления всех существующих суперблоков, указав sudo dumpe2fs /dev/sda1 | grep superblock . В каждом суперблоке хранится определенное количество метаданных файловой системы, поэтому сбои в их работе и провоцируют отказ загрузки ОС.

Возьмите за пример любой блок, например, первый. С его помощью будет производиться восстановление ФС. Запуск этой операции осуществляется после ввода sudo fsck -b 32768 /dev/sda1 -y , где 32768 — номер суперблока, а /dev/sda1 — необходимый раздел жесткого диска.

Благодаря опции -y все изменения будут автоматически приниматься, и при успешном завершении процесса на экране отобразится следующее уведомление:

fsck 1.40.2 (12-Jul-2007) e2fsck 1.40.2 (12-Jul-2007) /dev/sda1 was not cleanly unmounted, check forced. Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information Free blocks count wrong for group #241 (32254, counted=32253). Fix? yes Free blocks count wrong for group #362 (32254, counted=32248). Fix? yes Free blocks count wrong for group #368 (32254, counted=27774). Fix? yes . /dev/sda1: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sda1: 59586/30539776 files (0.6% non-contiguous), 3604682/61059048 blocks
Осталось смонтировать системный раздел sudo mount /dev/sda1 /mnt .

Далее перейдите в него через cd /mnt , чтобы все команды выполнялись непосредственно из самого каталога.

Просмотрите содержимое ФС через sudo mkdir test ls -l . Успешное выполнение этой операции говорит о том, что восстановление прошло удачно и можно перезапускать ОС.

Иногда даже после успешного исправления рассмотренной проблемы юзеры сталкиваются с ошибками при запуске операционной системы. Чаще всего они связаны с поломкой стандартного загрузчика GRUB. Поэтому придется дополнительно восстановить и этот стандартный компонент. Развернутое руководство о том, как выполняется поставленная задача через Boot-Repair, ищите в материале далее.

По завершении всех процедур флешка с LiveCD Ubuntu вам больше не понадобится. Если возникло желание ее отформатировать и использовать далее для своих целей, советуем ознакомиться с отдельной нашей статьей по проведению этой операции.

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

Помимо этой статьи, на сайте еще 12315 инструкций.
Добавьте сайт Lumpics.ru в закладки (CTRL+D) и мы точно еще пригодимся вам.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Источник

Ubuntu не загружается дальше initramfs

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

В этом режиме будет сложно что-то исправить, но можно попытаться понять где находится причина проблемы. В этой статье мы рассмотрим что делать если Linux не загружается с initramfs. Такой проблеме подвержены все дистрибутивы, но мы рассмотрим решения на примере Ubuntu.

Почему Linux не загружается дальше initramfs

Если вы столкнулись с данной ошибкой, то после нескольких десятков секунд загрузки увидите такое сообщение:

Читайте также:  Удаленное наблюдение за компьютером windows

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

1. Неверный корневой раздел в загрузчике

В данном случае она сообщает, что не может найти раздел /dev/sda10:

Alert: /dev/sda10 does not exist. Dropping to a shell

Очень часто такая ошибка возникает после манипуляций с разделами дисков, особенно изменения их размера. UUID диска меняется и ядро больше не может его найти. Вы можете посмотреть доступные в системе разделы с помощью команды:

ls /dev/ | grep sd

В этом окружении есть BusyBox, а значит есть большинство утилит Unix. Вы можете примонтировать каждый из этих разделов с помощью команды mount и узнать где находится ваш новый корневой раздел, например:

mkdir /mnt
mount /dev/sda5 /mnt
ls

Вы также можете узнать здесь же UUID данного раздела диска, для этого выполните:

В данном случае, корневой раздел имеет имя /dev/sda5. Именно это имя можно передать ядру в конфигурации загрузчика Grub, а можно UUID, но если в этом нет крайней необходимости, то короткое имя использовать гораздо проще. Надо перезагрузить компьютер, в меню Grub выбрать нужную загрузочную запись и нажать клавишу E:

Далее найти пункт, начинающейся со слова linux и в нём параметр root. Его значение вместе со словом UUID надо стереть, а вместо него прописать имя корневого раздела:

После этого система загрузится, а вам останется только создать новый конфигурационный файл grub с помощью команды:

2. Повреждённая файловая система

Подобная ошибка может появляться также при серьезных ошибках в файловой системе, которые мешают примонтировать корневой раздел. Обычно, fsck восстанавливает файловую систему автоматически, но если проблема серьезная и грозит потерей данных, утилите надо подтверждение пользователя для работы. Тогда система показывает такую ошибку:

The root filesystem on /dev/sda5 requires a manual fsck

Вы можете прямо здесь же попытаться восстановить файловую систему. Для этого выполните:

Здесь /dev/sda5 — это корневой раздел, его нужно заменить на свой. Опция -y указывает утилите, что на все вопросы надо ли исправлять блок нужно отвечать утвердительно. После успешного восстановления надо перезагрузить компьютер и попытаться загрузить систему снова.

Выводы

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

Источник

Глава 5. initramfs

Содержание

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

Зачем требуется initramfs?

основная цель процедуры запуска состоит в представлении своему пользователю его собственных файлов, которые размещены в общей корневой файловой системе. Иными словами, именно для имеющегося ядра в обязанности входят поиск, монтирование и представление такой корневой файловой системы своему пользователю. Для достижения этой цели наше ядро обязано запустить соответствующий исполняемый файл systemd, который, опять же, располагается в корневой файловой системе своего пользователя. Теперь это становится задачей курицы и яйца. Для запуска процесса systemd прежде всего нам требуется смонтировать необходимую корневую файловую систему, а для монтирования такой корневой файловой системы нам придётся запустить systemd из его корневой файловой системы. К тому же, помимо этой реальной корневой файловой системы пользователи могут обладать файлами в некоторых прочих файловых системах, таких как NFS, CIFS и т.п., а этот перечень прочих файловых систем также внутри устанавливаемой корневой файловой системы ( /etc/fstab ).

Итак, для решения нашей задачи курицы и яйца, разработчики пришли к решению с названием initramfs (что означает «initial RAM filesystem», изначальная файловая система в оперативной памяти). initramfs является некой временной корневой файловой системой (внутри своей оперативной памяти), которая будет применяться для монтирования своей реальной корневой файловой системы (со своего жёсткого диска или из сетевой среды). Итак, вся цель initramfs заключается в монтировании корневой файловой системы пользователя с его HDD/ из сети. В идеале наше ядро обладает достаточной способностью для монтирования своей корневой файловой системы с диска в нём без initramfs, но в наши дни корневая файловая система пользователя может быть где угодно. Она может располагаться в RAID, в неком LVM или в каком- то устройстве со множеством путей. Может иметься некое число n файловых систем, таких как XFS, ext4, ext3, NFS и т.п.. Это может быть даже зашифрованная файловая система, например, LUKS. Итак, ядру практически невозможно встроить все эти ситуации в своём собственном исполняемом файле vmlinux . Позвольте мне представить в этом разделе некие ситуации из реальной жизни.

Читайте также:  Режимы командной строки линукс

Допустим, наша корневая файловая система расположена в NFS и нет никакого понятия об initramfs. Это означает, что наше ядро обязано смонтировать необходимую корневую файловую систему пользователя в самом себе из NFS. В таком случае, наше ядро должно осуществить следующие задачи:

поднять собственный первичный сетевой интерфейс.

Вызвать некого клиента DHCP и получить со своего сервера DHCP некий IP адрес.

Отыскать необходимый совместный ресурс NFS и связанный с ним сервер NFS.

Смонтировать этот совместный ресурс NFS (свою корневую файловую систему).

Для осуществления этих этапов нашему ядру потребуется обладать такими исполняемыми файлами: NetworkManager , dhclient , mount и так далее.

Теперь, предположим, наша корневая файловая система находится на устройстве программного RAID. Тогда наше ядро обязано выполнить такие задачи:

Изначально отыскать необходимые диски RAID при помощи mdadm —examine —scan .

После определения тех базовых диском, на которые распространяется этот программный RAID, ему требуется собрать этот RAID при помощи mdadm —assemble —scan

Для достижения этого нашему ядру требуется обладать исполняемыми файлами mount и mdadm , а также некоторыми файлами настройки своих устройств соответствующего программного RAID.

Теперь, допустим, наша корневая файловая система расположена в неком логическом томе. Тогда для нашего ядра требуется покончить со следующими задачами для самого себя:

Отыскать необходимые физические тома при помощи pvs .

Найти необходимую группу томов посредством vgscan , а затем активировать её через vgchange .

Просканировать полученный LVS воспользовавшись lvscan .

наконец, после того как необходимый root lv заполнен, смонтировать его в качестве корневой файловой системы.

Для достижения всего этого нашему ядру потребуется иметь исполняемый файлы, подобные pvscan , pvs , lvscan , vgscan , lvs и vgchange .

Давайте предположим, что наша корневая файловая система находится на зашифрованном блочном устройстве. В этом случае нашему ядру придётся завершить следующие задачи:

Получить некий пароль от самого пользователя и/ или со вставленного аппаратного маркера (такого как смарт- карта или некий ключ безопасности USB).

Создать некую расшифрованную цель при помощи надлежащего устройства соответствия.

для получения всего этого нашему ядру необходимы исполняемые файлы, относящиеся к LUKS.

Для ядра не представляется возможным включать в себе возможности всех таких корневых файловых систем; следовательно, разработчики пришли к понятию initramfs, чья единственная цель состоит в монтировании необходимой корневой файловой системы.

Само ядро всё ещё способно выполнять все только что обсуждённые нами этапы. Например, если вы соберёте простую систему Linux командной строки из LFS, вам не понадобится монтировать некую корневую файловую систему, поскольку ядро само по себе достаточно в состоянии смонтировать необходимую файловую систему. Однако в тот момент, как вы попробуете добавить в неё GUI через BLFS, вам потребуется initramfs.

Итак, наше заключение состоит в том, что наше ядро способно смонтировать в самом себе необходимую корневую файловую систему, однако для этого подобному ядру придётся удерживать все обсуждавшиеся исполняемые файлы, библиотеки поддержки, файлы настройки и т.п. в своём файле vmlinuz . Это создаст большое число проблем.

Это испортит основной повод исполняемого самого файла ядра.

Исполняемый файл такого ядра будет гигантским в размере. Чем большим размером будет обладать исполняемый файл, тем сложнее его сопровождение.

Такой громадный исполняемый файл сложный в поддержке, обновлении, совместном использовании и обработке в серверах (с точки зрения пакетов RPM).

Этот подход не будет следовать правилу KISS (keep it simple, stupid — делай проще, тупица).

Источник

Оцените статью