4 coisas que não sabia sobre o Grub

Olá! Hoje apresentamos 4 coisas úteis que não sabia sobre o GRUB e que não sabia. Com estes quatro pontos será capaz de resolver alguns dos problemas mais comuns. Vamos começar:

1. Podem ser acrescentadas novas entradas de outros sistemas no seu disco rígido.

Quando se instala Linux numa máquina com múltiplos sistemas operativos, por vezes estes outros sistemas não são detectados. Isto pode ser resolvido adicionando a entrada do menu GRUB do sistema operativo não listado.

4 cosas que no sabías sobre Grub

Neste caso, existe uma entrada para o sistema Windows abaixo das entradas do Linux.  Se quisermos fazer isto só temos de fazer uma coisa, inserir o seguinte no ficheiro “/boot/grub/grub.cfg”:

### BEGIN /etc/grub.d/30_os-prober ###
menuentry 'Windows 10 (en /dev/sdb1)' --class windows --class os $menuentry_id_option 'osprober-chain-7EA0E3B659836131' {
	insmod part_msdos
	insmod ntfs
	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  7EA0E3B659836131
	else
	  search --no-floppy --fs-uuid --set=root 7EA0E3B659836131
	fi
	parttool ${root} hidden-
	drivemap -s (hd0) ${root}
	chainloader +1
}

Onde tem de definir o disco (neste caso foi /dev/sdb1) e tem de definir o UUID do disco (sdb1 neste caso tem 7EA0E3B659836131), também tem de definir o número do disco e da partição, por exemplo “hd1,msdos1”, onde hd1 é o disco 2 (começa em hd0), e msdos1 é a partição 1 do disco.

2. O sistema operativo pode ser navegado a partir do GRUB

Pode navegar e interagir com os ficheiros do sistema a partir do grub premindo a tecla “e” no menu GRUB antes de o sistema em questão ser carregado.

centos7 grub

Uma vez premida a tecla “e”, são exibidas as entradas do menu GRUB:

centos7 listado grub

Em seguida, prima “F2”:

centos7 cli grub

 

centos7 grub hd ls files

Pode navegar pelos ficheiros do sistema (neste caso é LVM, por isso só se vê /boot quando se faz ls). Os comandos que nos permitem mover-nos através do sistema de ficheiros a partir da consola GRUB são:

  • ls: Isto permite-lhe listar o conteúdo da mesma forma que num sistema unix/linux. Também pode usar “ls -al” ou “ls -l”, se usado sem indicar o directório, listará os discos disponíveis e as suas partições, por exemplo: (hd0) (hd0,1) (hd0,2). Se indicar o disco ou uma partição seguida de “/”, por exemplo “ls -l (hd0,1)/” listará o conteúdo como mostrado na imagem acima.
  • cat file: Permite-lhe ler um ficheiro como faria num sistema unix/linux.

Infelizmente não pode editar ficheiros a partir desta consola, mas pode arrancar o sistema escolhendo partição, kernel, etc (mesmo que não esteja no menu) e editá-lo assim que o sistema for arrancar.

3. O GRUB pode ser protegido por palavra-passe

Para assegurar o menu GRUB em RHEL/Centos 7 & 7.1, a primeira coisa a fazer é gerar a palavra-chave encriptada com o comando “grub2-mkpasswd-pbkdf2”, como se vê no

grub2-mkpasswd-pbkdf2

Para proteger a bagageira deve introduzir o seguinte no ficheiro: “/etc/grub2/01_users”.

set superusers=”utilizador
password_pbkdf2 john grub.pbkdf2.sha512.EL-HASH-DEL-RESULT-ANTERIOR

Desta vez vamos definir o utilizador de raiz com o hash acima referido:

grub2-mkpasswd-pbkdf2 grub users

Depois de fazer isto, correr “grub2-mkconfig -o /boot/grub2/grub.cfg”.

grub2-mkconfig

Agora reinicie e prima a tecla “e” para entrar na linha de comando GRUB, verá que pede uma palavra-passe:

grub password

No caso do sistema ser RHEL/Centos 7.2 o processo muda um pouco, primeiro, executar os seguintes comandos como “raiz”:

  1.  “grub2-setpassword”: Introduza a password e copie o hash resultante.
  2. O Hash para a palavra-passe criada tem de ser introduzido em /boot/grub/user.cfg e a “raiz” do utilizador é definida em /boot/grub2/grub.cfg.
  3. Executar grub2-mkconfig -o /boot/grub2/grub.cfg
  4. Reiniciar e verificar se pede uma senha

No caso do sistema ser RHEL/Centos 5 ou 6, o processo também muda:

  1. “grub-md5-crypt: Introduzir a palavra-passe e copiar o hash resultante.
  2. Abrir “/boot/grub/grub.con” e entrar na linha de arranque: password -md5 “HASH CREATED”.
  3. Reiniciar e verificar se pede uma senha

4. Muitos dos problemas de arranque podem ser resolvidos a partir do GRUB.

Por vezes uma actualização do sistema, instalação de software ou uma alteração específica pode “quebrar” o arranque do GRUB. Isto pode normalmente ser resolvido fazendo testes de arranque a partir do CLI do grub, antes de arrancar e modificar o menu a partir do sistema.

Como mencionado anteriormente, a partir do GRUB CLI é possível listar os discos e partições com o comando “ls”:

grub> ls
(hd0) (hd0,msdos2) (hd0,msdos1)

E ao passar o disco e a partição seguida de “/” como parâmetro para o comando ls, pode listar os ficheiros na partição.

grub> ls (hd0,1)/
lost+found/ bin/ boot/ cdrom/ dev/ etc/ home/ lib/
lib64/ media/ mnt/ opt/ proc/ root/ run/ sbin/
srv/ sys/ tmp/ usr/ var/ vmlinuz vmlinuz.old
initrd.img initrd.img.old

Podemos ver o ficheiro que indica o sistema operativo num linux, isto é útil se tivermos vários sistemas de linux no momento do arranque, para identificar o sistema:

grub> cat (hd0,1)/etc/issue
Ubuntu 18.04 LTS \n \l

 

Arranque a partir do GRUB CLI:

A primeira coisa é verificar que versões kernel, vmlinux e initrd.img, para arrancar correctamente estes três ficheiros têm de ser da mesma versão. Uma vez escolhida a versão, definimos raiz no disco e partição correspondentes (set root=xxx). Depois definimos o kernel do linux com “linux /boot/vmlinuzXXX root=/dev/YYYYY” onde XXX é a versão e YYYY é o disco e a partição que será a raiz do sistema. Também definimos o initrd.img com “initrd /boot/initrd.imgXXX”. Agora só precisamos de arrancar com estes parâmetros usando o comando “boot”:

grub> set root=(hd0,1)
grub> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub> initrd /boot/initrd.img-3.13.0-29-generic
grub> boot

Para ver as versões disponíveis do kernel e ficheiros initrd, basta correr ls -l na raiz do sistema e /boot:

$ ls -l (hd0,1)/
vmlinuz -> boot/vmlinuz-3.13.0-29-generic
initrd.img -> boot/initrd.img-3.13.0-29-generic

Para começar em modo de salvamento:

grub> set root=(hd0,1)
grub> linux /vmlinuz root=/dev/sda1
grub> initrd /initrd.img
grub> boot
Booting From grub-rescue>

Se estiver no GRUB de resgate, os comandos são diferentes, e tem de carregar os módulos normal.mod e linux.mod:

grub rescue> set prefix=(hd0,1)/boot/grub
grub rescue> set root=(hd0,1)
grub rescue> insmod normal
grub rescue> normal
grub rescue> insmod linux
grub rescue> linux /boot/vmlinuz-3.13.0-29-generic root=/dev/sda1
grub rescue> initrd /boot/initrd.img-3.13.0-29-generic
grub rescue> boot

E com isto podemos agora aceder ao sistema para reparar o arranque do GRUB e fazê-lo carregar as versões certas.

É tudo por hoje.

Se gostou, partilhe-o nas suas redes sociais e/ou deixe um comentário.

Até breve!

Deixe um comentário