Как я могу загрузиться в Arch Linux, используя initramfs, в Ubuntu Grub?

У меня два жестких диска с двумя соответствующими Grubs. Один из Arch Linux, а другой из Ubuntu. Используя Arch'а, я могу загрузить любой дистрибутив. Однако, используя grub в Ubuntu, я могу видеть и Arch, и Ubuntu, но не могу загрузиться в Arch. Я получаю ошибку:

Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.

Я сравнил grub.cfg для обоих распределений. В Grub Ubuntu я вижу запись для Arch со следующей строкой.

initrd /boot/intel-ucode.img

Я изменил его, чтобы следовать за Арком grub.cfg:

initrd /boot/intel-ucode.img /boot/initramfs-linux.img

Теперь я могу загрузиться в Arch из личинки Ubuntu. Похоже, что Ubuntu не добавляет эту обязательную опцию по умолчанию. Как я могу заставить Ubuntu автоматически создавать правильную запись?

Редактировать

Я обновляю grub Arch с grub-mkconfig -o /boot/grub/grub.cfg. В Ubuntu я пробовал update-grub и необработанную команду выше (к которой она имеет псевдоним).

Редактировать 2

Некомментированные строки /etc/default/grub

GRUB_DEFAULT="saved"
GRUB_SAVEDEFAULT="true"
GRUB_HIDDEN_TIMEOUT_QUIET="true"
GRUB_TIMEOUT="3"
GRUB_DISTRIBUTOR="`lsb_release -i -s 2> /dev/null || echo Debian`"
GRUB_CMDLINE_LINUX_DEFAULT=""
GRUB_CMDLINE_LINUX=""
4
задан 26 May 2015 в 05:55

3 ответа

ОТРЕДАКТИРОВАННЫЙ: я протестировал его в своей системе рабочий Ubuntu 15.04, но я имею в Intel Processor на этом. Но что я сделал, для 30_os-prober файл, который является конфигурационным файлом для личинки, обнаруживающей операционные системы Linux, в /etc/grub.d папка, я добавил некоторые строки к нему. То, что это делает, является проверками CPU type и настраивает initrd строку соответственно.

Вот последний патч ниже:

Первый, создайте резервную копию Вашего /etc/grub.d/30_os-prober файл к другому местоположению.

mkdir ~/backup_init
sudo cp /etc/grub.d/30_os-prober ~/backup_init

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

TAB= 

тогда исправляют файлы вместе

sudo patch /etc/grub.d/30_os-prober ~/backup_init/patch30.do

тогда, необходимо быть в состоянии обновить личинку как нормальную

sudo update-grub

Hope, которой это помогает.

\t' cat > ~/backup_init/patch30.do << EOM *** backup_init/30_os-prober${TAB}2015-05-27 10:52:18.237381123 -0700$ --- /etc/grub.d/30_os-prober${TAB}2015-05-27 11:29:45.149420380 -0700$ *************** *** 22,27 **** --- 22,29 ---- datarootdir="/usr/share" quick_boot="1" + CPU=\`cat /proc/cpuinfo | grep -i vendor_id | head -1 | awk '{print $3}'\` + export TEXTDOMAIN=grub export TEXTDOMAINDIR="\${datarootdir}/locale" *************** *** 276,281 **** --- 278,286 ---- ${TAB}linux \${LKERNEL} \${LPARAMS} EOF if [ -n "\${LINITRD}" ] ; then + if [ "\${OS}" = "Arch" ] ; then + ${TAB}${TAB}LINITRD="/boot/intel-ucode.img \${LINITRD}" + fi cat << EOF ${TAB}initrd \${LINITRD} EOF EOM

тогда исправляют файлы вместе

sudo patch /etc/grub.d/30_os-prober ~/backup_init/patch30.do

тогда, необходимо быть в состоянии обновить личинку как нормальную

sudo update-grub

Hope, которой это помогает.

0
ответ дан 26 May 2015 в 05:55

На самом деле существует два файла, которые должны быть изменены для решения этой проблемы. Я протестировал это на своем Lubuntu 16.04.1 и Linux Manjaro.

В Ubuntu:

1) Файл /usr/lib/linux-boot-probes/mounted/40grub2 существует функция parse_grub_menu, который не обрабатывает все initrd параметры. Необходимо изменить' случай "1$" в... initrd) ':

a) удаляют присвоение

initrd="$(echo "$2" ...)"

, b) добавляют две строки вместо удаленной:

shift 1
initrd="$(echo "$@" | sed 's/(.*)//')"

2) Файл /etc/grub.d/30_os-prober в для цикла фиксируют присвоение LINITRD:

for LINUX in ${LINUXPROBED}; do
...
    LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"

первая фиксация берет всю доступную initrd информацию для Manjaro во внимание. Вторая фиксация очищает сгенерированную initrd строку путем изменения некоторого '^' символы на пробелы.

2
ответ дан 26 May 2015 в 15:55
  • 1
    Попробованный все предложенные возможные решения: проблема возникает, поскольку консоль командной строки не отвечает на мой пароль. Предложения? – cyberfool 25 August 2016 в 08:49

Я выполняю Manjaro и Arch, но по иронии судьбы Manjaro сделает подобную ошибку как Ubuntu. Таким образом, возможно, следующий патч в 30_os_prober может все еще помочь кому-то.

После:

LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"

Добавьте:

if [ "${OS}" = "Arch Linux" ] ; then
  LINITRD="/boot/intel-ucode.img ${LINITRD}"
fi
2
ответ дан 4 October 2019 в 14:29

Другие вопросы по тегам:

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