Esta questão está relacionada a um sistema de inicialização dupla Windows/Linux em um SSD particionado em DOS (ou seja, nenhum com GPT/UEFI). Originalmente, o computador só tinha Windows 10 em um HDD. Aí consegui transferir esse sistema para o SSD, redimensionar as partições e instalar o Xubuntu 20.04 junto com o Windows 10, e tudo funcionou bem.
Sempre houve uma partição EFI na unidade. Não sei para que serve, pois não é um dispositivo UEFI. Mas eu não mudei esta partição. - Não há partição swap neste sistema.
Eu queria criar mais espaço para minha partição do sistema Linux. Para ser mais flexível caso os requisitos mudem posteriormente, movi a partição inicial do Windows entre as duas partições do Linux. O layout da partição fica assim agora:
NAME FSTYPE PARTTYPE PARTFLAGS LABEL
sda
├─sda1 ntfs 0x7 0x80 System-reserviert
├─sda2 ntfs 0x7 SSD-Windows-Sys
├─sda3 vfat 0xef SSD-EFI
├─sda4 0x5
├─sda6 ext4 0x83 SSD-Linux-Sys
├─sda5 ntfs 0x7 SSD-Windows-Home
└─sda7 ext4 0x83 SSD-Linux-Home
(os números sda não são estritamente ascendentes, as partições são mostradas na ordem de armazenamento SSD sda6-sda5-sda7.)
Não alterei nenhuma das partições 1 a 3. Consegui manter os UUIDs e LABELs originais usando gparted
para mover e redimensionar a partição NTFS SSD-Windows-Home. Não há equivalente tune2fs -U <UUID>
para vfat e ntfs e eu não queria trocar os números de série mexendo dd
conforme proposto nesta discussão , portanto fiz isso redimensionando e movendo a partição ntfs SSD-Windows-Home
.
Para as partições Linux, eu costumava gparted
criar uma nova partição ext4 no final do SSD, rsync
para copiar o conteúdo da partição antiga para a nova, depois apaguei a antiga e redimensionei as outras partições para preencher as lacunas. Finalmente, apliquei tune2fs
para alcançar o estado mostrado, especialmente mantendo os mesmos LABELs e UUIDs para todas as partições como eram antes de tudo isso.
Durante o trabalho de alteração da partição, encontrei um aviso de que problemas de inicialização podem aparecer após minhas alterações. Não me importei, pois os LABELs e os UUIDs de cada partição permaneceram os mesmos. Mas essa foi uma suposição acertada, como percebi quando tentei reiniciar:
O processo de inicialização parou, grub rescue>
e não no menu GRUB2, perguntando qual sistema operacional inicializar.
Consegui inicializar o computador emitindo estes comandos:
grub rescue> set prefix=(hd0,6)/boot/grub
grub rescue> set root=(hd0,6)/
grub rescue> insmod linux
grub rescue> insmod normal
grub rescue> normal
Em seguida, o menu GRUB2 foi mostrado e eu pude selecionar entre Linux e Windows 10. Ambos os sistemas operacionais funcionaram como antes de todas as minhas alterações de partição (é claro que tive que desligar o computador no meio e passar grub rescue>
novamente).
Fui aconselhado a executar o seguinte comando após inicializar o sistema Linux para me recuperar permanentemente do grub rescue
problema:
$LC_ALL=C sudo grub-install --target=/boot/grub/i386-pc /dev/sda
grub-install: error: /usr/lib/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
$
Existe um arquivo /boot/grub/i386-pc/modinfo.sh
(e há mais dois deles in /boot/grub/x86_64-efi
e in /usr/lib/grub/x86_64-efi
).
Portanto eu tentei
$LC_ALL=C sudo grub-install --target=/boot/grub/i386-pc /dev/sda6
grub-install: error: /usr/lib/grub/boot/grub/i386-pc/modinfo.sh doesn't exist. Please specify --target or --directory.
$
Ele pesquisa no diretório errado. Portanto adicionei --directory=/boot/grub/i386-pc
:
$ LC_ALL=C sudo grub-install --directory=/boot/grub/i386-pc /dev/sda6
Installing for i386-pc platform.
grub-install: error: cannot open `/boot/grub/i386-pc/moddep.lst': No such file or directory.
$ ls -l /boot/grub/i386-pc/moddep.lst
-rw-r--r-- 1 root root 5416 2019-12-10 10:34 /boot/grub/i386-pc/moddep.lst
$
Como você pode ver no ls
comando, esta mensagem de erro está definitivamente errada, porque /boot/grub/i386-pc/moddep.lst
existe e o root também pode acessá-la! Agora estou perdendo o juízo.
Depois que o computador foi capaz de iniciar com os grub rescue
comandos (em vez de um live stick e usando chroot
), não deveria ser tão difícil aplicar permanentemente exatamente as informações que eu inseri, mas sem ter que inseri-las em cada processo de inicialização.
Como você faz isso corretamente?
A presença de
/usr/lib/grub/x86_64-efi
e/usr/lib/grub/x86_64-efi-signed
indica que o Xubuntu foi instalado como um sistema de inicialização UEFI, sugerindo que seu sistema é de fato compatível com UEFI.O fato de seu
sda
disco incluir uma instalação do Windows e ser particionado no estilo MBR indica que o Windows deve inicializar usando o estilo BIOS clássico. Para conseguir escolher facilmente o sistema operacional para inicializar a partir do menu GRUB, você também deseja que o Xubuntu inicialize no estilo BIOS legado. Mas parece que os pacotes necessários para o GRUB de estilo legado não estão instalados no seu sistema.Você disse
grub-efi
que não está instalado no seu sistema: tal pacote não existe no Debian/Ubuntu. O equivalente UEFI degrub-pc
é nomeadogrub-efi-amd64
. O nomegrub-pc
é herdado de quando o GRUB era um gerenciador de inicialização somente x86/BIOS; agora ele suporta muitas outras arquiteturas e tipos de firmware.Os comandos sugeridos nos comentários apresentaram alguns erros de digitação: a
--target
opção degrub-install
não leva um nome de caminho, mas sim um identificador de plataforma GRUB: no seu caso,i386-pc
.Primeiro, instale os pacotes de suporte legados do BIOS para GRUB:
Em seguida, instale o GRUB no Master Boot Record do sistema:
Verifique o conteúdo de
/etc/default/grub
. Se houver uma linhavocê pode querer alterá-lo para
false
, certifique-se de que oos-prober
pacote esteja instalado e, em seguida, executesudo update-grub
para criar uma configuração GRUB que inclua ambos os seus sistemas operacionais.Em seguida, monte
sda3
e inspecione seu conteúdo:Se incluir um
EFI
diretório, renomeie-o para outro nome (caso o firmware do seu sistema tenha preferência incontrolável pela inicialização UEFI):Agora é hora de reiniciar. Depois de verificar se agora você pode inicializar ambos os sistemas operacionais com êxito, você pode remover os pacotes de suporte de inicialização UEFI com: