Minimal BASH-like line editing is supported. For the first word, TABlists possible command completions. Anywhere else TAB lists possibledevice or file completions.grub> _
Então o que que nós vamos fazer? Nós temos que descobrir e nós podemos fazer isso através do shell do GRUB. Quais são as partições que têm nessa máquina? Quais são os discos que tem nessa máquina, se tem mais de um, que tipo de partição para conseguir através disso, descobrir onde está o nosso sistema. E usando o próprio GRUB, dizer pro GRUB carregar o kernel, passar alguns parâmetros para o kernel, dizer pro GRUB carregar o primeiro disco de inicialização, chama "initrd" e depois a gente diz para ele bootar.
Tudo isso que a gente vai dizer digitando comandos é o que está no menu do GRUB, mas nesse caso no nosso problema não tem o menu do GRUB, então para gente não ficar na mão, a gente vai ver como é que resolve isso, eu vou abrir aqui.
Vou mostrar a tela de uma máquina virtual que tá justamente nessa condição.
Minimal BASH-like line editing is supported. For the first word, TABlists possible command completions. Anywhere else TAB lists possibledevice or file completions.grub> _
grub> _
grub> help
grub> clear
grub> set pager=1
Vamos começar, a primeira coisa que iremos fazer é usar um programa chamado "ls", veja o que aparece:
grub> ls(proc) (hd0,gpt2) (hd0,gpt1) (hd0) (cd0)
Nessa máquina aqui, a gente tá vendo que tem o (hd0), o (cd0), esse proc é do sistema rodando tá! Conseguimos ver também que no (hd0) tem duas partições, a gpt2 e a gpt1. Então já dá para a gente saber também que esse disco foi particionado usando o modelo de particionamento GPT.
O outro particionamento que que tem disponível é o ms-dos então se você tem um disco que é particionado aquela moda MBR. Lembra!? Que tem quatro partições primárias no máximo e tal que era muito utilizado antes, hoje é bem menos em virtude do UFI.
Agora nos interessa a gente descobrir onde está o nosso sistema, onde está o nosso kernel para gente poder falar pro GRUB carregar e sequer. Então nós vamos usar o "ls" só que agora. Vamos passar para ele qual é a partição que a gente quer listar
grub> ls (hd0,gpt1)/efi/ refind_linux.conf
Tá na cara para quem já está habituado que isso aí é a partição UEFI, porque tem um diretório UEFI. O nosso kernel não tá aí!
Então eu vou listar a outra partição, a partição 2.
grub> ls (hd0,gpt2)/lost+found/ boot/ bin lib lib32 lib64 libx32 sbin debian/ dev/ etc/ home/ media/ mt/ opt/ proc/ root/ run/ srv/ sys/ tmp/ usr/ var/ vdisk swapfile
Esse kernel fica no diretório "/boot". Então nós vamos fazer o seguinte. Eu vou listar o "/boot":
grub> ls (hd0,gpt2)/bootefi/ grub/ refind_linux.cont config-4.19.0-9-amd64 core.img contig-5.6.13-gnu vmlinuz-5.6.13-gnu System.map-5.6.13-gnu initrd.img-5.6.13-gnu vmlinuz-4.19.0-9-amd64 System.map-4.19.0-9-amd64 initrd.img-4.19.0-9-amd64
Vamos listar, pronto! Apareceu vários arquivos, o que nos interessa aqui é justamente ver os arquivos cujo nome é esse aqui "vmlinuz-5.6.13-gnu", a gente consegue ver que tem uma "vmlinuz-4.19.0-9-amd64" e tem uma "vmlinuz-5.6.13-gnu".
Esse "vmlinuz-4.19.0-9-amd64" é o kernel versão 4.19, o padrão que tem no Debian Buster atualmente e o "vmlinuz-5.6.13-gnu" é o Linux Libre, repara que nessa máquina eu tenho mais de um kernel, né!
Qual é o nosso próximo passo aqui, o nosso próximo passo é dizer para o GRUB carregar o kernel. Como é que a gente faz isso usando um comando que chama? Usando um comando chamado "linux".
E indicando para ele onde ele vai buscar o kernel, no nosso caso o "(hd0,gpt2)/boot" e agora repara eu vou apertar VM só e vou apertar o tab e a gente vai ver que o interpretador ele não é tão simples assim não. Ele tem recursos interessantes, porque ele vai conseguir completar dessa vez, ele não completou tudo por quê? Porque tem mais de uma possibilidade então ele tá me mostrando que eu tenho dois kernels eu vou escolher o 5.6.13-gnu que é do Linux libre.
grub> linux (hd0,gpt2)/boot/vm Possible files are: vmlinuz-5.6.13-gnu vmlinuz-4.19.0-9-amd64 grub> linux (hd0,gpt2)/boot/vmlinuz-_
Com esse comando:
grub> linux (hd0,gpt2)/boot/vmlinuz-5.6.13-gnu
Eu digo para o GRUB carregar esse kernel né!
Se eu fizesse só isso não teria problema, o GRUB carregaria o kernel, mas na hora que o kernelk fosse rodar, ele não ia saber onde ele ia montar o "/", o diretório raiz de toda a instalação, de todo GNU/Linux. Então eu vou passar para ele assim:
grub> linux (hd0,gpt2)/boot/vmlinuz-5.6.13-gnu root=/dv/vda2
Isso aqui é uma máquina virtual e em uma máquina virtual, os discos costumam se chamar "VD alguma coisa", em uma máquina física que usa barramento Sata, provavelmente é sda ou sdb.
Mas, e se eu não souber? Bom, se você não souber, você pode tentar com esse e não vai estragar a máquina não vai acontecer nada. Talvez dê um kernel panic.
Ah. Ah kernel panic?!
Não! Não precisa entrar em pânico quando dá um kernel panic porque sempre tem solução.
Aqui, eu já sei que é essa, mas naturalmente você pode descobrir.
Então antes de fazer desse jeito, eu vou mostrar uma coisa, eu não sei então eu vou conferir:
Mas antes de digitar o comando mencionado, vamos testar uma coisa, descobrir os nomes dos discos de nosso interesse.
Vou digitar "cat (hd0,gpt2)/etc/fstab":
grub> cat (hd0,gpt2)/etc/fstab
grub> cat (hd0,gpt2)/etc/fstab
# /etc/fstab: static file system information.
#
# Use ‘blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5S).
#
# <file system <mount point> <type> <options> <dump> <pass>
# /dev/nbd1p3
UUID=336dbd2e-3e4f-4fba-9aG1-6eal7eBb1802 / ext4 rw,relatime 0 1
# /dev/nbdip1
UUID=1029-1F 02 /doot/efi vfat rw, relat ime, fmask=0022,d
mask=0022,codepage=437,locharset=iso8859-1,shortname=mixed,errors=remount-ro 0 2
# /dev/sda2
#UUID=6b78f7cc-2a06-4c7d-bf55-8dd23645ae79 none swap
0 0
#/dev/mapper/cswap none swap sw 0 0
/dev/mapper/cryptoswap none swap sw 0 0
#/dev/sdal /nnt ext4 rw,relatime 0 1
e1
swap
grub> linux (hd0,gpt2)/boot/vmlinuz-5.6.13-gnu root=/dev/vda2
grub> _
Quando digito e teclo Enter.
Parece que não aconteceu nada! Mas aconteceu, o GRUB carregou na memória o kernel, então o kernel já está na memória.
Ele não tá rodando ainda, mas ele já está na memória.
E eu vou dizer agora aqui para o GRUB carregar o initrd, que é um disco inicial que por enquanto está só num arquivo que o kernel quando tá rodando monta primeiro ele para poder dali pegar alguns módulos e ser capaz de montar o "/" (partição raíz).
Então digito "initrd (hd0,gpt2)/boot/initrd.img-5.6.13-gnu":
grub> initrd (hd0,gpt2)/boot/initrd.img-5.6.13-gnu
grub> _
Bom, o que que ele mais precisa? Ele já tem tudo que ele precisa, a gente só precisa dizer para ele dar boot! O que que vai acontecer? Quando eu pressionar o Enter aqui depois de ter digitado o boot:
grub> boot
Ele vai colocar o kernel em execução. O kernel vai pegar esse initrd, pegar os módulos que estão lá, montar o "/" e dar prosseguimento pro boot. Vamos ver.
A tela vai mostrar o sistema carregando os serviços, um monte de "Ok", quando aparece os "Ok", a gente fica logo feliz, né? Vai entrar aqui inclusive o ambiente gráfico.
Olha lá!
Carregou! Entrou o ambiente gráfico, eu vou logar aqui só para a gente ver que tá tudo ok? Estou digitando. Operei a senha. Será que eu não sei a senha?
Entre no terminal e digite "sudo update-grub":
sudo update-grub
O que que faz o update do GRUB? Ele atualiza o arquivo de configuração do configuração do GRUB, o que produz o menu update GRUB.
Após digitar e pressionar Enter, a gente pode ver inclusive que ele encontrou aqueles arquivos que a gente tinha visto, já que é o initrd e o vmlinuz dos dois kernels que tem aí.
E agora eu vou rebootar a máquina para ver se tá tudo ok usando o programa "shutdown -r now" com os parâmetros -r e now no final para que ele faça isso agora:
sudo shutdown -r now
A máquina vai rebootar, e quando ela rebootar, a gente vai ver de novo o GRUB aqui, a gente tem um outro bootloader, mas a gente vai ver o GRUB com cada uma das suas entradas e o problema tá resolvido.
Essa é uma problemática que acontece em algumas vezes.
Por que que ela acontece? Bom, ás vezes você instalou um outro sistema operacional, ás vezes você apagou o arquivo por engano, às vezes não completou a instalação do sistema operacional, deu problema na hora que você for escolher onde gravar o GRUB e tudo mais. Então essa é uma forma de resolver quando parou no GRUB e a gente não tem o que fazer.
Fonte:
https://www.youtube.com/watch?v=ptFSVbRcz_4
https://superuser.com/questions/1237684/how-to-boot-from-grub-shell
https://medium.com/@awitisimon23/booting-linux-from-grub-grub-rescue-46674e52e325
Nenhum comentário:
Postar um comentário