Как зафиксировать начальную загрузку в подсказку initramfs, и “смонтируйтесь: не может считать '/etc/fstab': Никакой такой файл или каталог” и “Никакой найденный init”?

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

# cat /etc/udev/rules.d/99-usb-mount.rules
SUBSYSTEM=="usb", ACTION=="add", ENV{ID_SERIAL_SHORT}=="XXXXXXXXXX", RUN+="/path/to/script1.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_SERIAL_SHORT}=="XXXXXXXXXX", RUN+="/path/to/script2.sh"

Можно автоматизировать резервное копирование на дисковом соединении, например

26
24.08.2014, 22:17
3 ответа

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

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

12
27.01.2020, 19:40

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

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

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

init=/bin/sh

... в качестве параметра ядра.

10
27.01.2020, 19:40

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

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

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

Надеюсь, я смогу вам помочь.

С уважением

2
27.01.2020, 19:40

Теги

Похожие вопросы