Usando o grub para inicializar corretamente a partir de uma unidade de backup externa

1

edit : acho que resolvi meu problema - veja a parte inferior da pergunta para obter detalhes

Eu tenho uma cópia de todos os arquivos em / em um disco rígido externo conectado por USB. Para testar se esse backup funciona, estou tentando inicializá-lo. No entanto, isso está se mostrando um pouco mais difícil do que eu esperava.

  1. No que presumo ser o BIOS, seleciono meu HD externo como o dispositivo de inicialização. No entanto, se eu selecionar este dispositivo ou a minha unidade usual como o dispositivo de inicialização, será mostrado o mesmo menu do GRUB. Isso acontece se eu fui manualmente e instalei o GRUB no meu HD externo ou não. Então, minha pergunta é: o GRUB está sendo carregado da minha unidade de inicialização normal ou da unidade externa, e isso importa?

    • Descobri que, ao usar a linha de comando do GRUB sem o GRUB instalado em minha unidade externa, a unidade externa foi mostrada como (hd2,gpt1) , mas depois que instalei o GRUB na unidade externa, ele surgiu como (hd0,gpt2) .
  2. Talvez as dificuldades que estou tendo estejam relacionadas à minha primeira pergunta, mas quando inicializo depois de especificar linux /boot/vmlinuz-linux root=/dev/sda2 , sempre obtenho alguma falha relacionada à unidade especificada como root não encontrado. Isso acontece mesmo quando eu especificar root by device uuid. Minha pergunta é, eu preciso me preocupar com

    • /etc/fstab ? Isso é algo que preciso mudar para garantir que a raiz seja encontrada? E importa se eu mudo o arquivo /etc/fstab na minha unidade interna ou na externa? (Eu modifiquei /etc/fstab na unidade externa para que a unidade com o UUID da partição raiz fosse montada em / , mas sem sucesso)

    • Talvez por ser um HD externo conectado por USB, preciso fazer algo especial? Eu notei ver o erro usb 2-4: device descriptor read/64, error -71 durante a inicialização normalmente, mas como isso não tem efeito aparente na funcionalidade da unidade, eu a ignorei. Esse erro também apareceu em dois HD externos externos, então presumo que não seja um problema de hardware.

Esclarecimentos:

Eu criei meu backup externo usando o Borg , que cria uma cópia de todos os arquivos. Ele não copia o disco inteiro como dd , portanto, por exemplo, ao instalar o grub, ainda preciso criar manualmente uma partição com o sinalizador bios_grub .

O comando exato que eu uso no grub ao tentar inicializar é

set root=(hd0,gpt2)
linux vmlinuz-linux root=/dev/sda2
initrd  initramfs-linux.img
boot

Eu consegui arrancar.

Eu tentei linux /boot/vmlinuz-linux root=/dev/sda2 e linux /boot/vmlinuz-linux root=/dev/sdc2 sem sucesso - o primeiro porque a unidade estava aparecendo como (hd0,gpt2) no grub e a segunda porque a partição é rotulada como /dev/sdc2 quando eu inicializo normalmente . No entanto, nenhum desses funcionou, e ambos me deixaram em uma estranha linha de comando. Descobri que a partição com o UUID correto foi realmente montada em /dev/sdb2 por algum motivo! Usando root=/dev/sdb2 inicializei o sistema muito bem. Acho que minhas tentativas anteriores de inicializar especificando o UUID falharam por uma das várias razões (o GRUB não está instalado, erros de digitação no UUID, etc.).

Isso é bastante anticlimático. Ainda estou curioso sobre as perguntas originais que tive - ou seja, 1. como é decidido qual GRUB é usado quando há várias unidades com o GRUB instalado? 2. o /etc/fstab desempenha um papel no processo de inicialização ou é irrelevante? - e eu recompensarei a recompensa por respostas para essas perguntas.

    
por shimao 24.11.2018 / 17:22

2 respostas

3

o seu problema é root=/dev/sda2 porque está montando por device name , o que é não exclusivo . Se você tiver apenas uma unidade instalada, normalmente isso sempre será exibido como /dev/sda , portanto, não há problema. Mas instale um segundo disco ou qualquer outra coisa além disso que apareça como /dev/sd? então não há garantia da ordem de nada e muitas vezes o que foi sda é movido para baixo para sdb ... pode se tornar confuso e rápido falhar.

É melhor montar via por device-id ou by-uuid , que será único.

Abaixo de /dev/disk/ , você verá pastas como

  • by-id /
  • por rótulo /
  • por caminho /
  • by-uuid /

E, por exemplo, em by-id/ , você verá links como

aqui está meu /etc/fstab que monta by device-id para ter uma ideia, removi linhas extras para mantê-lo no ponto. E eu uso o EFI não o GRUB, mas o princípio é o mesmo mais elaborado com o Grub {a grande parte do grande gerenciador de inicialização unificado}:

/dev/disk/by-id/scsi-35000cca070168a20-part2                    /           ext3    acl,user_xattr 1 1
/dev/disk/by-id/scsi-35000cca070168a20-part1                    /boot/efi   vfat    umask=0002,utf8=true 0 0
/dev/disk/by-id/scsi-36003048018e26e011d81ba1714e4c99f-part1    /data       xfs     defaults 1 0
/dev/disk/by-id/scsi-36003048018fa44011d57b61bbe1b8533-part1    /scratch    xfs     defaults 1 0
/dev/disk/by-id/scsi-36003048018e266011d81ba7e1afeadf6-part1    /bkup       xfs        defaults              1 2

Nota: isso é o que vejo no SLES 11.4. E enquanto eu uso o EFI, você precisa encontrar os itens específicos dentro do GRUB ou do GRUB2 e modificar. Por exemplo, aqui está o meu arquivo /boot/efi/efi/SuSE/elilo.conf , observe a parte root= . O que corresponde a isso no seu GRUB que você deseja modificar para ser by device-id ou by uuid . e não se esqueça de modificar /etc/fstab para ser por um método único também by-id ou by-uuid .

# This file has been transformed by /sbin/elilo.
# Please do NOT edit here -- edit /etc/elilo.conf instead!
# Otherwise your changes will be lost e.g. during kernel-update.
#
# Modified by YaST2. Last modification on Mon Oct 15 11:04:42 EDT 2018
timeout = 80
##YaST - boot_efilabel = "SUSE Linux Enterprise Server 11 SP4"
default = SLES11_SP4_16
prompt

image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: linux###
    label = SLES11_SP4_16
    append = "splash=verbose showopts                 "
    initrd = initrd-3.0.101-108.77-default
    root = /dev/disk/by-id/scsi-35000cca070168a20-part2

image = vmlinuz-3.0.101-108.77-default
###Don't change this comment - YaST2 identifier: Original name: failsafe###
    label = Failsafe_15
    append = "showopts ide=nodma apm=off noresume edd=off powersaved=off nohz=off highres=off processor.max_cstate=1 nomodeset x11failsafe                  "
    description = "Failsafe (3.0.101-108.77-default)"
    initrd = initrd-3.0.101-108.77-default
    root = /dev/disk/by-id/scsi-35000cca070168a20-part2

Você NÃO deseja boot=/dev/sd? ou root=/dev/sd? em qualquer lugar, onde ? é qualquer letra. Referência do disco em /dev/disk/by-id ou /dev/disk/by-uuid ; você pode até mesmo usar by-label , desde que você defina rótulos de partições e confie neles como únicos.

    
por 27.11.2018 / 19:37
1

Isso deve responder suas perguntas:

  • Geralmente, o GRUB usado é aquele que está no disco que é visto primeiro pelo BIOS ou selecionado para ser executado primeiro no BIOS. Porque o MBR da unidade entra no GRUB que é carregado.

  • O / etc / fstab é o único responsável por automatizar o processo de montagem, partições. Em casos de cortina você pode ignorar completamente o fstab.

por 27.11.2018 / 20:05