
Eu tenho dois discos rígidos, com dois Grubs correspondentes. Um é do Arch Linux e o outro é do Ubuntu. Usando o grub do Arch, posso inicializar em qualquer distribuição. No entanto, usando o grub do Ubuntu, posso ver o Arch e o Ubuntu, mas não consigo inicializar no Arch. Eu recebo o erro:
Kernel offset
End kernel panic. Not syncing: VFS.
Unable to mount root fs on unknown-block.
Comparei grub.cfg
as duas distribuições. No grub do Ubuntu, posso ver uma entrada para Arch, com a seguinte linha.
initrd /boot/intel-ucode.img
Eu mudei para seguir o Arch grub.cfg
:
initrd /boot/intel-ucode.img /boot/initramfs-linux.img
Agora posso inicializar o Arch a partir do grub do Ubuntu. Parece que o Ubuntu não está anexando esta opção obrigatória por padrão. Como posso fazer com que o Ubuntu crie automaticamente a entrada correta?
Editar
Estou atualizando o grub do Arch com grub-mkconfig -o /boot/grub/grub.cfg
. No Ubuntu, tentei ambos update-grub
e o comando bruto acima (ao qual é alias).
Editar 2
As linhas não comentadas de/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=""
Responder1
Na verdade, existem dois arquivos que precisam ser modificados para resolver este problema. Eu testei isso no meu Lubuntu 16.04.1 e no Manjaro Linux.
No Ubuntu:
1) Arquivo/usr/lib/linux-boot-probes/mounted/40grub2 existe uma função parse_grub_menu que não lida com todos os parâmetros do initrd. Você precisa modificar 'caso "$1" em ... initrd)':
a) remover atribuição
initrd="$(echo "$2" ...)"
b) adicione duas linhas no lugar da removida:
shift 1
initrd="$(echo "$@" | sed 's/(.*)//')"
2) Arquivo/etc/grub.d/30_os-prober dentro de um loop for corrija a atribuição de LINITRD:
for LINUX in ${LINUXPROBED}; do
...
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
A primeira correção leva em consideração todas as informações de initrd disponíveis para Manjaro. A segunda correção limpa a linha initrd gerada alterando alguns caracteres '^' para espaços.
Responder2
Estou executando o Manjaro e o Arch, mas, ironicamente, o Manjaro cometerá um erro semelhante ao do Ubuntu. Então talvez o seguinte patch em 30_os_prober ainda possa ajudar alguém.
Depois:
LINITRD="`echo ${LINUX} | cut -d ':' -f 5 | tr '^' ' '`"
Adicionar:
if [ "${OS}" = "Arch Linux" ] ; then
LINITRD="/boot/intel-ucode.img ${LINITRD}"
fi
Responder3
Funcionou depois de editar o grub.cfg
arquivo e executar:
sudo update-grub
sudo grub.mkconfig