Меню Рубрики

Установка initramfs на centos

Исправление загрузки в 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 .

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

    Загрузите 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, однако это не означает, что приведенный способ является универсальным. В случае возникновения ошибки другого характера опишите ее в комментариях, а мы постараемся предоставить правильное решение этой ситуации.

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

источник

Не загружается 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.

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

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

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

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

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

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

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

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

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

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

источник

Initramfs/Руководство

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

Contents

Основные понятия initramfs

Введение

Для большинства пользователей initramfs не является чем-то необходимым. Их система использует простую схему разбиения жесткого диска без экзотических драйверов или установок (таких как зашифрованные файловые системы), поэтому ядро Linux вполне способно передать управление двоичному файлу init на их системе. Но для большинства систем, использование initramfs почти обязательно.

Читайте также:  Установка и настройка ос других программ

Основной ключ к пониманию того, чем является initramfs (или для чего она необходима) — это понимание того, как работает процесс загрузки Linux, даже в достаточно высокоуровневом подходе.

Процесс загрузки Linux

Как только ядро Linux получает контроль над системой (который был передан ему после загрузки загрузчиком), оно подготавливает свои области памяти и драйвера. Затем оно передает управление приложению (обычно init ), чьей задачей является дальнейшая подготовка системы и проверка того, что в конце процесса загрузки, все необходимые сервисы запущены и пользователь способен войти в систему. Приложение init делает это с помощью запуска, в числе прочих сервисов, демона udev , который далее загружает и подготавливает систему, основываясь на обнаруженных устройствах. Когда udev запущен, все оставшиеся файловые системы, которые не были примонтированы, монтируются, и запускаются остальные сервисы.

Для систем, где все необходимые файлы и инструменты располагаются на той же самой файловой системе, приложение init может в совершенстве управлять дальнейшим процессом загрузки. Но когда определены множественные файловые системы (или в случае более неординарных установок), этот процесс может стать немного более усложненным:

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

С давних пор решением для этой проблемы является использование «initrd» (initial root device).

Корневой диск для начальной инициализации (initial root disk)

initrd — это дисковая структура в оперативной памяти (ramdisk), которая содержит необходимые инструменты и скрипты для монтирования требуемых файловых систем перед тем как управление передается приложению init на корневой файловой системе. Ядро Linux запускает скрипт настройки (обычно называемый linuxrc , но не обязательно такое имя) на этом корневом диске, который подготавливает систему, переключается к действительной корневой файловой системе и затем вызывает init .

Хотя способ, включающий в себя initrd — это все, что требуется, он имеет несколько недостатков:

  • Это полноценное блочное устройство, требующее дополнительные расходы на целую файловую систему, и оно имеет фиксированный размер. Если выбрать initrd достаточно маленьким, то все требуемые скрипты не поместятся. Если сделайте его слишком большим, то растратите память впустую.
  • По той причине, что это действительное устройство, оно также требует кэш-память ядра Linux и подлежит используемым методам управления памятью и файлами (таким как подкачка страниц), что делает расходы памяти еще более худшими.

Чтобы решить эти вопросы, была создана initramfs.

Файловая система в памяти для начальной инициализации (initramfs)

initramfs — это начальная файловая система в оперативной памяти, основанная на tmpfs (легковесной файловой системе в памяти с изменяемым размером), которая также не использовала отдельное блочное устройство (чтобы отсутствовало кэширование и все накладные расходы, упомянутые ранее, исчезли). Так же как и initrd, она содержит утилиты и скрипты, требуемые для монтирования файловых систем перед вызовом бинарного файла init , располагающегося на действительной корневой файловой системе. Эти утилиты могут быть уровнями абстракции расшифровывающих процедур (для зашифрованных файловых систем), менеджерами логических томов, программными (software) raid массивами, загрузчиками файловых систем, основанными на драйверах bluetooth, и так далее.

Содержимое initramfs делается путем создания cpio-архива. cpio — это старое (но проверенное) решение для архивирования файлов (архивы, получаемые в результате его работы называются cpio-архивы). Безусловно cpio можно сравнить с tar архиватором. Здесь cpio был выбран потому, что проще создать (с программной точки зрения) и поддерживать (на то время) файлы устройств (тогда как tar этого не мог).

Читайте также:  Установка биксенона chevrolet cruze

Все файлы, утилиты, библиотеки, настройки конфигурации (если они применимы), и т.д. помещаются в cpio-архив. Этот архив затем сжимается с использованием утилиты gzip и сохраняется в том же месте, что и ядро Linux. Далее, загрузчик передаст его ядру Linux во время загрузки, чтобы ядро знало о том, что требуется initramfs.

При его обнаружении, ядро Linux создаст файловую систему tmpfs, извлечет на нее содержимое архива и затем запустит init -скрипт, расположенный в корневом каталоге файловой системы tmpfs. Этот скрипт затем примонтирует действительную корневую файловую систему (после того, как убедится, что он может ее примонтировать, например, с помощью загрузки дополнительных модулей, подготовки уровней абстракции шифрования, и т.д.), также как и другие существенно важные файловые системы (такие как /usr и /var ).

Как только корневая файловая система и другие существенные файловые системы примонтированы, init -скрипт из initramfs затем переключает root на действительную корневую файловую систему и, в завершение, вызывает /sbin/init на этой системе, для продолжения процесса загрузки.

Создание initramfs

Введение и настройка загрузчика

Для создания initramfs, важно знать какие дополнительные драйверы, скрипты и утилиты необходимы для загрузки системы. Например, если используется LVM, то потребуется инструменты LVM в initramfs. Таким же образом, если используется программный RA >mdadm , и так далее.

Существуют несколько инструментов, которые помогут создать initramfs (сжатые cpio -архивы) для системы. Тем, кому требуется полный контроль, также могут легко создать собственный, пользовательский образ initramfs.

После создания initramfs, необходимо настроить конфигурацию загрузчика для сообщения загрузчику, что будет использоваться initramfs. Например, если файл initramfs сохранен как /boot/initramfs-3.2.2-gentoo-r5 , то конфигурация в /boot/grub/grub.conf будет выглядеть следующим образом:

Использование genkernel

Утилита для сборки ядра Gentoo, genkernel , может использоваться для генерирования initramfs, даже если не использовался genkernel для конфигурации и сборки ядра.

Чтобы использовать genkernel для генерации initramfs, рекомендуется все необходимые драйверы и код, который требуется для монтирования / и /usr файловых систем, включить в ядро (а не как модули). Затем, вызвать команду genkernel следующим образом:

В зависимости от системы, одна или более из следующих опций могут быть необходимы:

Опция Описание
—disklabel Включить поддержку LABEL= настроек в файл /etc/fstab
—dmraid Включить поддержку fake hardware RAID
—firmware Включить firmware code, найденный на системе
—gpg Включить поддержку GnuPG
—iscsi Включить поддержку iSCSI
—luks Включить поддержку зашифрованных контейнеров luks
—lvm Включить поддержку LVM
—mdadm Включить поддержку программного (software) RAID
—multipath Включить поддержку множественного I/O-доступа к SAN
—zfs Включить поддержку ZFS

По завершении, файл initramfs, полученный в результате, будет сохранен в каталоге /boot .

Использование dracut

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

Рекомендуется установить (или убрать) необходимые модули. После настройки переменной DRACUT_MODULES в файле /etc/portage/make.conf запустите команду emerge dracut для установки утилиты Dracut.

Далее необходимо настроить dracut посредством редактирования /etc/dracut.conf . В файле конфигурации, который хорошо прокомментирован, включите поддержку необходимых модулей.

После конфигурации, создайте initramfs вызовом dracut следующим образом:

Образ, полученный в результате, поддерживает общую загрузку системы, основанную на конфигурации в /etc/dracut.conf . Также, можно выбрать генерирование initramfs специально приспособленной под вашу систему (в которой dracut пытается определить необходимые инструменты, драйверы, и так далее из существующей системы). Если модули и драйверы встроены в ядро (не отдельными модулями и ссылками на firmware), то можно добавить опцию —no-kernel :

Чтобы найти больше информации, проконсультируйтесь с man-страницами:

источник

Добавить комментарий