AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • Início
  • system&network
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • Início
  • system&network
    • Recentes
    • Highest score
    • tags
  • Ubuntu
    • Recentes
    • Highest score
    • tags
  • Unix
    • Recentes
    • tags
  • DBA
    • Recentes
    • tags
  • Computer
    • Recentes
    • tags
  • Coding
    • Recentes
    • tags
Início / unix / Perguntas / 542123
Accepted
Andreas
Andreas
Asked: 2019-09-17 14:46:24 +0800 CST2019-09-17 14:46:24 +0800 CST 2019-09-17 14:46:24 +0800 CST

Grub: instale apenas as partes do MBR, não o diretório de inicialização?

  • 772

Parece que eu sempre tenho que instalar arquivos em um --boot-directoryarquivo grub-install.

E se eu já tiver arquivos grub existentes /bootem minhas partições? Eu não deveria apenas instalar as partes MBR do grub e apontá-las para uma das minhas partições existentes /boot/grub? Não consegui encontrar tal opção.

Fiz o downgrade do meu GPT para MBR e removi minha partição de inicialização do BIOS, o que significa que preciso reinstalar o Grub no meu MBR, se não entendi nada mal. Sem fazer isso, fico com um prompt de resgate do grub que nem pode listar minhas partições ao fazer ls. Percebo que minhas entradas de menu ainda podem não funcionar após a reinstalação do grub no MBR, pois se referem a partições como hd0,gpt5, mas ter um prompt utilizável seria bom o suficiente e me permitiria confirmar minha compreensão do grub mais facilmente.

Tenho que escrever em um --boot-directorysempre que quiser instalar o grub, mesmo que já exista um diretório?

boot
  • 1 1 respostas
  • 1042 Views

1 respostas

  • Voted
  1. Best Answer
    telcoM
    2019-09-18T00:20:47+08:002019-09-18T00:20:47+08:00

    Quando o GRUB inicializa a partir de um MBR, o número de etapas de compatibilidade do BIOS herdado que ele precisa executar no início do processo de inicialização significa que o código realmente no MBR só é capaz de carregar um bloco de disco cujo número LBA é corrigido para o MBR código no momento da instalação. Esse bloco é geralmente o primeiro bloco da imagem principal do GRUB . Ele contém o código para carregar mais blocos e uma lista de números de bloco que definem onde o restante da imagem principal do GRUB está localizado.

    Em um disco particionado por MBR, geralmente há espaço não utilizado entre o MBR e o início da primeira partição. Com o MS-DOS, a convenção original era iniciar a primeira partição no início da próxima faixa de disco, o que geralmente significa que haverá pelo menos 63 blocos de disco antes da primeira partição, incluindo o MBR. Em sistemas modernos, a primeira partição MBR é agora mais comumente colocada para iniciar exatamente 1MiB desde o início do disco, ou seja, no bloco #2048, para otimizar o alinhamento de dados para discos, SSDs e sistemas de armazenamento SAN que podem usar internamente um bloco tamanho maior que 512 bytes.

    Portanto, em um disco particionado por MBR, o início do disco normalmente é organizado assim:

    • bloco nº 0: MBR
    • bloco #1: primeiro bloco da imagem principal do GRUB, contém a lista de blocos
    • blocos #2...#n: o restante da imagem principal do GRUB
    • bloco #2048: início da primeira partição.

    Observe que o carregamento da imagem principal do GRUB funciona exclusivamente por números de bloco pré-determinados: até que a imagem principal do GRUB seja totalmente carregada e extraída, o GRUB não terá conhecimento de tabelas de partição nem sistemas de arquivos de qualquer tipo.

    Em um disco particionado por GPT, os blocos imediatamente após o bloco #0 são ocupados pela tabela de partição GPT, portanto, a imagem principal do GRUB é incorporada em uma "partição de inicialização do BIOS". Isso significa apenas que o número do bloco incorporado ao MBR não será 1, mas sim o número do primeiro bloco da partição de inicialização do BIOS, e o restante dos blocos pertencentes à imagem principal também será deslocado. Portanto, em um disco particionado por GPT com GRUB no estilo BIOS, o layout físico será algo assim, supondo que a partição de inicialização do BIOS seja a primeira no disco:

    • bloco #0: MBR de proteção GPT, com código GRUB MBR incorporado
    • blocos #1...#(x-1): tabela de partição GPT real
    • bloco #x: o primeiro bloco da partição de inicialização do BIOS, contém o primeiro bloco da imagem principal do GRUB com a lista de blocos
    • blocos #(x+1)...#(x+n): o restante da imagem principal do GRUB

    O fato de você ainda poder acessar o modo de recuperação do GRUB indica que, embora você tenha dito que removeu sua partição de inicialização do BIOS, você ainda não sobrescreveu seus blocos; embora o espaço ocupado pela partição de inicialização do BIOS agora possa ser espaço não alocado entre partições ou espaço não utilizado em outra partição redimensionada, ela ainda tem seu conteúdo antigo e o GRUB ainda pode carregar esses blocos e encontrar sua imagem principal. Mas nada em particular protege esses blocos agora de serem substituídos: assim que isso acontecer por qualquer motivo, a imagem principal do GRUB será destruída e o GRUB não conseguirá chegar até o modo de resgate.

    Conteúdo da imagem principal do GRUB

    A imagem principal do GRUB contém várias coisas:

    • o kernel do GRUB: esta é a única parte tecnicamente necessária para entrar no modo de recuperação do GRUB.
    • caminho raiz inicial do GRUB incorporado, para indicar qual disco, partição e diretório dentro dele contém o arquivo de configuração do GRUB e o diretório de módulos do GRUB. No Linux, eles normalmente aparecem como /boot/grub/grub.cfge /boot/grub/i386-pcrespectivamente quando o sistema Linux está rodando normalmente.
    • um conjunto de módulos GRUB embutidos, contendo pelo menos o código para ler e entender a tabela de partição e o tipo de sistema de arquivos usado na partição referida pelo caminho raiz inicial do GRUB. Como a imagem principal pode precisar caber em menos de 63 blocos de disco, esse conjunto de módulos geralmente é mantido o mínimo possível em sistemas MBR.
    • opcionalmente, um arquivo de configuração GRUB incorporado com um ou mais comandos GRUB
    • opcionalmente, uma imagem de disco incorporada, semelhante às usadas pela memdiskferramenta da família de bootloader SYSLINUX
    • opcionalmente, uma chave pública GPG usada para assinar outros módulos GRUB e o kernel do sistema operacional para segurança (e para atender aos requisitos de aceitação de inicialização segura nas versões UEFI do GRUB)

    Tudo isso é compactado em LZMA para minimizar seu tamanho, portanto, não pode ser lido ou modificado manualmente com facilidade.

    Como agora você está entrando no modo de recuperação e não pode listar suas partições, isso indica que a imagem principal do GRUB contém o módulo de particionamento para GPT ( part_gpt.mod), mas não para MBR ( part_msdos.mod). Sem o módulo de particionamento MBR, ele não pode acessar o /boot/grub/i386-pcdiretório que contém a partição, mesmo que a imagem principal do GRUB contenha o módulo de driver do sistema de arquivos aplicável a ele... e, portanto, o GRUB não pode carregar o normal.modque permitiria prosseguir além do modo de recuperação.

    O que precisa acontecer agora

    • A imagem principal do GRUB pode precisar ser reescrita em um local seguro, provavelmente no espaço entre o MBR e o início da primeira partição, que anteriormente era ocupada pelas estruturas da tabela de partição GPT. Como a partição de inicialização do BIOS foi removida, o local atual não é seguro: pode ser realocado para outra partição e ser substituído sem aviso no futuro.
    • ao reescrever a imagem principal do GRUB, o módulo de particionamento GPT embutido nele precisa ser substituído pelo módulo de particionamento MBR. Como todos os componentes devem estar à mão em formato descompactado (at /usr/lib/grub/i386-pcou diretório similar), a maneira mais simples de fazer isso é apenas pegar todos os componentes descompactados apropriados, construir uma nova imagem principal a partir deles e compactá-la. Descompactar o antigo e modificá-lo simplesmente não vale a pena: por que escrever outro pedaço de código ao reutilizar o código usado ao instalar inicialmente o GRUB do zero funciona bem?
    • Como a localização da imagem principal do GRUB provavelmente mudará, o código MBR também precisa ser reescrito.
    • O grub-installcomando precisará de alguma forma garantir que o normal.mode outros módulos GRUB localizados /boot/grub/i386-pcsejam da mesma versão que a nova imagem principal do GRUB. Claro, ele poderia comparar os arquivos existentes com o conjunto de arquivos usado para reconstruir a imagem principal, mas novamente ... por que escrever e depurar código para outro caso especial ao simplesmente substituir o conteúdo existente pela /boot/grub/i386-pcrotina de instalação do GRUB já existente funciona direitinho?

    O tamanho total não compactado de todos os i386-pccomponentes do GRUB é definitivamente menor que 4 MiB. Isso não é nada. Tentar evitar reescrever que, se já existe, simplesmente não vale a pena, a menos que você esteja trabalhando com algo especial como os antigos SSDs PATA de primeira geração com um número muito restrito de ciclos de gravação disponíveis.

    Como o UEFI nativo faria isso?

    Como o firmware UEFI inclui suporte ao sistema de arquivos FAT32 como padrão, a versão UEFI nativa do carregador de inicialização GRUB pode ser empacotada como um único grubx64.efiarquivo que contém todos os módulos necessários, inclusive normal.mod se você desejar. Ele é carregado como um arquivo normal: não há necessidade de mexer com números de bloco ou código embutido em locais de disco fixo.

    • 3

relate perguntas

  • Por que `journalctl --list-boots` não corresponde ao relatório `uptime` e `who -b`?

  • Como iniciar um programa de console na inicialização (dentro de ../openbox/autostart)

  • Sistema intacto, grub quebrado

  • "pacman -Syu" 'provavelmente' quebrou meu sistema, porque a inicialização não foi montada

  • SSD clonado não inicializa e imprime linhas estranhas

Sidebar

Stats

  • Perguntas 205573
  • respostas 270741
  • best respostas 135370
  • utilizador 68524
  • Highest score
  • respostas
  • Marko Smith

    Possível firmware ausente /lib/firmware/i915/* para o módulo i915

    • 3 respostas
  • Marko Smith

    Falha ao buscar o repositório de backports jessie

    • 4 respostas
  • Marko Smith

    Como exportar uma chave privada GPG e uma chave pública para um arquivo

    • 4 respostas
  • Marko Smith

    Como podemos executar um comando armazenado em uma variável?

    • 5 respostas
  • Marko Smith

    Como configurar o systemd-resolved e o systemd-networkd para usar o servidor DNS local para resolver domínios locais e o servidor DNS remoto para domínios remotos?

    • 3 respostas
  • Marko Smith

    apt-get update error no Kali Linux após a atualização do dist [duplicado]

    • 2 respostas
  • Marko Smith

    Como ver as últimas linhas x do log de serviço systemctl

    • 5 respostas
  • Marko Smith

    Nano - pule para o final do arquivo

    • 8 respostas
  • Marko Smith

    erro grub: você precisa carregar o kernel primeiro

    • 4 respostas
  • Marko Smith

    Como baixar o pacote não instalá-lo com o comando apt-get?

    • 7 respostas
  • Martin Hope
    user12345 Falha ao buscar o repositório de backports jessie 2019-03-27 04:39:28 +0800 CST
  • Martin Hope
    Carl Por que a maioria dos exemplos do systemd contém WantedBy=multi-user.target? 2019-03-15 11:49:25 +0800 CST
  • Martin Hope
    rocky Como exportar uma chave privada GPG e uma chave pública para um arquivo 2018-11-16 05:36:15 +0800 CST
  • Martin Hope
    Evan Carroll status systemctl mostra: "Estado: degradado" 2018-06-03 18:48:17 +0800 CST
  • Martin Hope
    Tim Como podemos executar um comando armazenado em uma variável? 2018-05-21 04:46:29 +0800 CST
  • Martin Hope
    Ankur S Por que /dev/null é um arquivo? Por que sua função não é implementada como um programa simples? 2018-04-17 07:28:04 +0800 CST
  • Martin Hope
    user3191334 Como ver as últimas linhas x do log de serviço systemctl 2018-02-07 00:14:16 +0800 CST
  • Martin Hope
    Marko Pacak Nano - pule para o final do arquivo 2018-02-01 01:53:03 +0800 CST
  • Martin Hope
    Kidburla Por que verdadeiro e falso são tão grandes? 2018-01-26 12:14:47 +0800 CST
  • Martin Hope
    Christos Baziotis Substitua a string em um arquivo de texto enorme (70 GB), uma linha 2017-12-30 06:58:33 +0800 CST

Hot tag

linux bash debian shell-script text-processing ubuntu centos shell awk ssh

Explore

  • Início
  • Perguntas
    • Recentes
    • Highest score
  • tag
  • help

Footer

AskOverflow.Dev

About Us

  • About Us
  • Contact Us

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve