Именно таку ошибку я cловил после установки Linux Mint 18 Sarah на /dev/sda, пытаясь загрузить свой арчик установленный на /dev/sdb.
Так вышло, что все члены семьи пользуются одним десктопом, только диски и пространство на них у всех разные, впрочем, как цели так и задачи на них производимые тоже. Стоит отметить, что второй раз я напоролся на эту же ошибку, когда обновил ядро в минте до рекомендуемого 4.4.0-36
, но в этот раз я уже был готов к таким поворотам :-/
Итак, почему же я словил kernel panic? Если посмотреть в grub.cfg
Linux Mint, то можно увидеть, что для начальной инициализации минт использует образы initrd.img-*
, в то время как арч использует initramfs-linux.img
. Соответсвенно, при обновлении ядра, минт везде прописывает свои параметры:
menuentry 'Linux Mint 18 Cinnamon 64-bit' --class ubuntu --class gnu-linux --class gnu --class os $menuentry_id_option 'gnulinux-simple-507dec69-55c8-44fa-b2db-9cb08208215d' {
recordfail
load_video
gfxmode $linux_gfx_mode
insmod gzio
if [ x$grub_platform = xxen ]; then insmod xzio; insmod lzopio; fi
insmod part_msdos
insmod jfs
set root='hd0,msdos7'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd0,msdos7 --hint-efi=hd0,msdos7 --hint-baremetal=ahci0,msdos7 507dec69-55c8-44fa-b2db-9cb08208215d
else
search --no-floppy --fs-uuid --set=root 507dec69-55c8-44fa-b2db-9cb08208215d
fi
linux /boot/vmlinuz-4.4.0-36-generic root=UUID=507dec69-55c8-44fa-b2db-9cb08208215d ro quiet splash $vt_handoff
initrd /boot/initrd.img-4.4.0-36-generic
}
...
menuentry 'Arch (на /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-eb2aee71-37b1-4307-8308-7e0279cc0430' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 eb2aee71-37b1-4307-8308-7e0279cc0430
else
search --no-floppy --fs-uuid --set=root eb2aee71-37b1-4307-8308-7e0279cc0430
fi
linux /boot/vmlinuz-linux-lts root=UUID=eb2aee71-37b1-4307-8308-7e0279cc0430 rw systemd.restore_state=0
initrd /boot/intel-ucode.img
}
Можно было загрузится с флешки или выбрать в биосе загрузку с /dev/sdb и потом сгенерировать образ initramfs
, но я просто дописал недостающие параметры в grub.cfg
минта. GRUB при этом обновлять не надо. Поскольку я использую как lts, так и свежую версию ядра, конфиг выглядит так:
menuentry 'Arch (на /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-simple-eb2aee71-37b1-4307-8308-7e0279cc0430' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 eb2aee71-37b1-4307-8308-7e0279cc0430
else
search --no-floppy --fs-uuid --set=root eb2aee71-37b1-4307-8308-7e0279cc0430
fi
linux /boot/vmlinuz-linux-lts root=UUID=eb2aee71-37b1-4307-8308-7e0279cc0430 rw systemd.restore_state=0
initrd /boot/intel-ucode.img /boot/initramfs-linux-lts.img
}
submenu 'Дополнительные параметры для Arch (на /dev/sdb1)' $menuentry_id_option 'osprober-gnulinux-advanced-eb2aee71-37b1-4307-8308-7e0279cc0430' {
menuentry 'Arch Linux, с Linux linux-lts (на /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-linux-lts--eb2aee71-37b1-4307-8308-7e0279cc0430' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 eb2aee71-37b1-4307-8308-7e0279cc0430
else
search --no-floppy --fs-uuid --set=root eb2aee71-37b1-4307-8308-7e0279cc0430
fi
linux /boot/vmlinuz-linux-lts root=UUID=eb2aee71-37b1-4307-8308-7e0279cc0430 rw systemd.restore_state=0
initrd /boot/intel-ucode.img /boot/initramfs-linux-lts.img
}
menuentry 'Arch Linux, with Linux linux-lts (fallback initramfs) (на /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-linux-lts--eb2aee71-37b1-4307-8308-7e0279cc0430' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 eb2aee71-37b1-4307-8308-7e0279cc0430
else
search --no-floppy --fs-uuid --set=root eb2aee71-37b1-4307-8308-7e0279cc0430
fi
linux /boot/vmlinuz-linux-lts root=UUID=eb2aee71-37b1-4307-8308-7e0279cc0430 rw systemd.restore_state=0
initrd /boot/intel-ucode.img /boot/initramfs-linux-lts-fallback.img
}
menuentry 'Arch Linux, с Linux linux (на /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-linux--eb2aee71-37b1-4307-8308-7e0279cc0430' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 eb2aee71-37b1-4307-8308-7e0279cc0430
else
search --no-floppy --fs-uuid --set=root eb2aee71-37b1-4307-8308-7e0279cc0430
fi
linux /boot/vmlinuz-linux root=UUID=eb2aee71-37b1-4307-8308-7e0279cc0430 rw systemd.restore_state=0
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
}
menuentry 'Arch Linux, with Linux linux (fallback initramfs) (на /dev/sdb1)' --class gnu-linux --class gnu --class os $menuentry_id_option 'osprober-gnulinux-/boot/vmlinuz-linux--eb2aee71-37b1-4307-8308-7e0279cc0430' {
insmod part_msdos
insmod ext2
set root='hd1,msdos1'
if [ x$feature_platform_search_hint = xy ]; then
search --no-floppy --fs-uuid --set=root --hint-bios=hd1,msdos1 --hint-efi=hd1,msdos1 --hint-baremetal=ahci1,msdos1 eb2aee71-37b1-4307-8308-7e0279cc0430
else
search --no-floppy --fs-uuid --set=root eb2aee71-37b1-4307-8308-7e0279cc0430
fi
linux /boot/vmlinuz-linux root=UUID=eb2aee71-37b1-4307-8308-7e0279cc0430 rw systemd.restore_state=0
initrd /boot/intel-ucode.img /boot/initramfs-linux-fallback.img
}
}
Как видно из листинга, необходимо было добавить строки /boot/initramfs-linux-lts.img
и /boot/initramfs-linux-lts-fallback.img
в соответствующие разделы для lts ядра, и /boot/initramfs-linux.img
и /boot/initramfs-linux-fallback.img
для свежего ядра.
О том, что такое initramfs
, почему он используется в Arch Linux и какие имеет преимущества, можно почитать здесь ==> https://wiki.archlinux.org/index.php/Mkinitcpio. Примечательно, что те у кого в дуалбуте две ubuntubased OS, с подобной ошибкой не столкнулись.