- Ubuntu не загружается дальше initramfs
- Почему Linux не загружается дальше initramfs
- 1. Неверный корневой раздел в загрузчике
- 2. Повреждённая файловая система
- Выводы
- Восстанавливаем свалившийся в busybox из-за ошибки initramfs Linux
- Ошибка «Initramfs unpacking failed: invalid magic at start of compressed archive» (РЕШЕНО)
- 1. Переустановка ядра Linux
- 2. Генерация файла ramdisk
Ubuntu не загружается дальше initramfs
Пользователи, которые любят экспериментировать со своей операционной системой время от времени сталкиваются с ошибкой загрузки, когда система выводит приглашение ввода BusyBox с initramfs. Эта ошибка означает, что ядро не может загрузить корневой раздел, та файловая система, к которой у вас есть доступ из этого режима не имеет ничего общего с вашей системой. Это содержимое образа initramfs, которое содержит только самые необходимые компоненты, используемые ядром для загрузки системы.
В этом режиме будет сложно что-то исправить, но можно попытаться понять где находится причина проблемы. В этой статье мы рассмотрим что делать если Linux не загружается с initramfs. Такой проблеме подвержены все дистрибутивы, но мы рассмотрим решения на примере Ubuntu.
Почему Linux не загружается дальше initramfs
Если вы столкнулись с данной ошибкой, то после нескольких десятков секунд загрузки увидите такое сообщение:
Первое, что можно попытаться сделать в таком случае — выполнить команду exit, чтобы система попыталась загрузится и тогда она покажет вам более подробное сообщение об ошибке.
1. Неверный корневой раздел в загрузчике
В данном случае она сообщает, что не может найти раздел /dev/sda10:
Alert: /dev/sda10 does not exist. Dropping to a shell
Очень часто такая ошибка возникает после манипуляций с разделами дисков, особенно изменения их размера. UUID диска меняется и ядро больше не может его найти. Вы можете посмотреть доступные в системе разделы с помощью команды:
В этом окружении есть 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, как посмотреть сообщение об ошибке, а также как устранить самые распространённые причины.
Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.
Восстанавливаем свалившийся в busybox из-за ошибки initramfs Linux
Недавно при включении компьютера, Ubuntu меня «порадовала» тем, что решила не загружаться и «свалилась» в busybox в момент инициализации пользовательского пространства (userspace) оно же initramfs. Немного ошарашенный начал разбираться. Оказалось, что мой старенький жёсткий диск дал небольшой сбой, и подпортил суперблок файловой системы. Впрочем, оказалось что это не смертельно, и проблема эта, довольно просто и быстро решается.
Суперблок — это часть на диске, отведенная под служебную информацию файловой системы. В нем хранится информация о разделе: тип файловой системы, размер, статус и информацию о других структурах метаданных. В случае потери информации с суперблока, велик риск потерять всю информацию с раздела. Поэтому Linux хранит несколько копий этой информации — т.е. несколько суперблоков.
Перед тем, как продолжить, я должен предупредить, что не обязательна причина в суперблоке. Такая проблема может возникать и по другим причинам, установить которые можно только имея определенный опыт, либо опытным путем. В любом случае, вся суть проводимых ниже действия, лишь в проверке диска на ошибки, поэтому как минимум ничем не повредит.
Для восстановления нам понадобится загрузочный диск или флэшка с Linux. Загружаемся, и запускаем терминал. В терминале пишем:
sudo fdisk -l|grep Linux|grep -Ev 'swap'
В результате выполнения команды, будет выведен список всех разделов:
/dev/sda2 371306496 976771071 605464576 288.7G 83 Linux
В моем случае это был один раздел. В этом списке нужно найти нужный раздел, и запомнить его. Он понадобится нам дальше. Далее посмотрим список доступных запасных суперблоков:
sudo dumpe2fs /dev/sda2 | grep superblock
В команде выше, /dev/sda2 необходимо заменить на полученный ранее, нужный раздел. В результате выполнения команды, будет выведен список всех суперблоков:
Primary superblock at 0, Group descriptors at 1-19 Backup superblock at 32768, Group descriptors at 32769-32787 Backup superblock at 98304, Group descriptors at 98305-98323 Backup superblock at 163840, Group descriptors at 163841-163859 Backup superblock at 229376, Group descriptors at 229377-229395 Backup superblock at 294912, Group descriptors at 294913-294931 Backup superblock at 819200, Group descriptors at 819201-819219 Backup superblock at 884736, Group descriptors at 884737-884755 Backup superblock at 1605632, Group descriptors at 1605633-1605651 Backup superblock at 2654208, Group descriptors at 2654209-2654227 Backup superblock at 4096000, Group descriptors at 4096001-4096019 Backup superblock at 7962624, Group descriptors at 7962625-7962643 Backup superblock at 11239424, Group descriptors at 11239425-11239443 Backup superblock at 20480000, Group descriptors at 20480001-20480019 Backup superblock at 23887872, Group descriptors at 23887873-23887891 Backup superblock at 71663616, Group descriptors at 71663617-71663635
Из списка запасных суперблоков, выбираем любой кроме Primary и запускаем проверку диска с указанием запасного суперблока:
sudo fsck -b 32768 /dev/sda2 -y
Параметр -y необходим для того, чтобы fsck не спрашивал что делать с каждой найденной ошибкой, а вместо этого ее автоматически исправлял если это возможно. После того, как fsck закончит, результат выполнения будет примерно таким:
fsck 1.40.2 (23-March-2016) e2fsck 1.40.2 (23-March-2016) /dev/sda2 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/sda2: ***** FILE SYSTEM WAS MODIFIED ***** /dev/sda2: 59586/605464576 files (0.6% non-contiguous), 3604682/605464576 blocks
После этого перезагружаемся, отключаем флэшку/вынимаем диск из привода, и всё должно работать. 🙂
Ошибка «Initramfs unpacking failed: invalid magic at start of compressed archive» (РЕШЕНО)
Данная статья покажет как исправить ошибку, в результате которой Linux не загружается. В данном случае решение показано на примере Kali Linux, но указанные действия также применимы к Debian, Ubuntu, Linux Mint и производным дистрибутивам.
Во время загрузки Linux возникла ошибка:
Initramfs unpacking failed: invalid magic at start of compressed archive Kernel panic — not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
Суть в том, что не удалось распаковать Initramfs из-за повреждения архива. Без этого загрузка и работа операционной системы невозможно.
Тем не менее эту проблему можно попытаться решить без загрузки с аварийного диска (например Live CD образа).
Для начала попробуйте загрузиться в Recovery Mode/Root Access в вашем текущем ядре.
Для этого в загрузчике выберите «Advanced options».
Затем выберите пункт с «recovery mode» — обычно это вторая строка.
Если вам удалось это сделать, то выполните следующую команду:
sudo update-initramfs -c -k $(uname -r)
В моём случае сообщение об ошибке изменилось, но система так и не была загружена.
Если не удалось загрузиться в режиме восстановления, то загрузитесь с предыдущей версией ядра.
У меня система успешно загрузилась с предыдущей версией:
Теперь нам нужно пересоздать файл ramdisk. Это можно сделать специальной командой, но нужно знать номер версии ядра. Также файл ramdisk пересоздаётся каждый раз, когда устанавливается пакет с ядром Linux. Рассмотрим оба варианта.
1. Переустановка ядра Linux
Для переустановки ядра выполните команду:
sudo apt install linux-image-amd64
Данная команда походит для 64-битных систем, если у вас 32-битная или ARM компьютер, то используете соответствующее имя пакета ядра linux-image-*
Предыдущая команда не сработала и я получил ошибку:
E: Работа dpkg была прервана, вы должны вручную запустить «sudo dpkg --configure -a» для устранения проблемы.
Для исправления ошибки рекомендуется выполнить следующую команду:
Она также не сработала и вызвала ошибку:
dpkg: ошибка: fgets прочитал пустую строку из «/var/lib/dpkg/triggers/Unincorp»
sudo rm /var/lib/dpkg/triggers/Unincorp sudo touch /var/lib/dpkg/triggers/Unincorp
Затем команда для исправления проблем с пакетами успешно была выполнена:
Во время её выполнения был заново создан файл ramdisk (как этап настройки одного из пакетов) то есть переустановка ядра Linux не потребовалась. После этого я перезагрузил Linux, и операционная система загрузилась как обычно.
2. Генерация файла ramdisk
Для генерации initramfs (ramdisk) нужно выполнить команду вида:
sudo update-initramfs -c -k ВЕРСИЯ
Вместо НОМЕР нужно указать последнюю версию ядра Linux, установленного на вашей системе. То есть эта та самая версия, которая вызывает проблемы.
Просмотреть имеющиеся ядра можно командой:
итого 149988 drwxr-xr-x 4 root root 4096 ноя 27 06:02 . drwxr-xr-x 20 root root 4096 ноя 15 03:40 .. -rw-r--r-- 1 root root 254811 окт 10 16:05 config-5.19.0-kali2-amd64 -rw-r--r-- 1 root root 257010 ноя 7 16:51 config-6.0.0-kali3-amd64 drwx------ 3 root root 4096 янв 1 1970 efi drwxr-xr-x 6 root root 4096 ноя 27 06:00 grub -rw-r--r-- 1 root root 67132798 ноя 9 03:32 initrd.img-5.19.0-kali2-amd64 -rw-r--r-- 1 root root 70411394 ноя 27 06:02 initrd.img-6.0.0-kali3-amd64 -rw-r--r-- 1 root root 83 окт 10 16:05 System.map-5.19.0-kali2-amd64 -rw-r--r-- 1 root root 83 ноя 7 16:51 System.map-6.0.0-kali3-amd64 -rw-r--r-- 1 root root 7703168 окт 10 16:05 vmlinuz-5.19.0-kali2-amd64 -rw-r--r-- 1 root root 7788992 ноя 7 16:51 vmlinuz-6.0.0-kali3-amd64
Версия ядра это цифры и последующие слова. Например, на данной системе последней версией ядра является «6.0.0-kali3-amd64». Тогда команда для создания нового файла initramfs следующая:
sudo update-initramfs -c -k 6.0.0-kali3-amd64
После этого перезагрузите компьютер: