Como desinstalo o GRUB?

18

Um disco rígido que eu uso apenas para armazenamento de dados ainda tem o GRUB de instalações passadas do Ubuntu.

Como posso remover o GRUB sem prejudicar o resto dos dados da unidade?

Antecedentes

Ocasionalmente, movo a unidade de dados entre computadores com várias configurações de ordem de inicialização, portanto, gostaria que fosse não inicializável para evitar a necessidade de acomodá-la nas configurações de BIOS de cada computador.

Quando eu ligo um computador enquanto apenas a unidade de dados está conectada, aparece o seguinte:

error: no such device: fdf38dd4-9e9d-479d-b830-2a6989958503.
grub rescue> 

Posso confirmar, a partir de backups antigos de /etc/fstab , que este era o UUID de uma partição raiz que eu reformatei recentemente e que não existe mais. . Aqui está a tabela de partições crua e crua registro mestre de inicialização .

Por favor, note que não estou interessado em soluções alternativas que não respondam à minha pergunta principal. Eu posso pensar em várias maneiras de contornar esse problema, mas me incomoda em princípio que eu não sei como resolvê-lo diretamente. Cada procedimento de instalação deve ter um procedimento de desinstalação de contraparte.

    
por ændrük 04.05.2012 / 03:58

6 respostas

24

Você pode tornar o dispositivo não inicializável simplesmente fazendo os primeiros bytes do disco 0x00.

Tipicamente (e isto é verdade para o grub2 e ntldr iirc), o primeiro byte do seu drive será uma instrução x86 jmp. Isso ocorre antes mesmo do disklabel, porque ao passar a execução para o dispositivo para inicializá-lo, ele simplesmente configura a CPU para sugar as informações do dispositivo como código. Se ele tiver um código inválido, ele acionará uma interrupção e o BIOS lidará com a exceção e acessará o próximo dispositivo inicializável.

Por exemplo, o começo do meu disco começa com:

00000000  eb 63 90 d0 bc 00 7c fb  50 07 50 1f fc be 1b 7c  |.c....|.P.P....||

A primeira parte é eb 63 , que é Ir para compensar 0x63 do IP atual (então para 0x65).

00000060  00 00 00 00 ff fa 90 90  f6 c2 80 74 05 f6 c2 70  |...........t...p|
00000070  74 02 b2 80 ea 79 7c 00  00 31 c0 8e d8 8e d0 bc  |t....y|..1......|

A execução continua daqui.

O final do setor é assim:

000001b0  cd 10 ac 3c 00 75 f4 c3  ed db 96 d6 00 00 80 01  |...<.u..........|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......'....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|

Se o seu disco estiver formatado como uma tabela de partições MBR, ele precisará apenas de dois itens, a tabela de partições que está no deslocamento 0x1be e a assinatura MBR, 55aa , que ocorre no final do setor. no deslocamento 0x1fe . 0x1be é decimal 446.

O seguinte (obviamente) tornará o dispositivo não inicializável. Mas isso é o que você quer. Se você não quiser que seu dispositivo não seja inicializado, não faça isso, mmm-kay? Eu estou supondo que seu dispositivo é /dev/sdz , simplesmente porque muitas pessoas não têm um /dev/sdz , e isso reduz o risco de algum novato idiota copiar cegamente colando comandos.

Primeiro, copie o MBR para um arquivo para backup.

sudo dd if=/dev/sdz of=/some/where/safe/preferably/not/on/dev/sdz/backup.mbr bs=512 count=1

Em seguida, faça uma cópia desse arquivo:

cp backup.mbr backup.mbr.test

Em seguida, temos que criar um dispositivo de loopback (para que o conteúdo não fique truncado.) E aplique as alterações em nosso setor falso 0 como um teste:

sudo losetup /dev/loop7 backup.mbr.test
sudo dd if=/dev/zero of=/dev/loop7 bs=446 count=1
sudo losetup -d /dev/loop7

hexdump do arquivo e certifique-se de que toda a tabela de partições esteja intacta:

sudo hexdump -C backup.mbr.test

Você deve ver algo como:

00000000  00 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |................|
*
000001b0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 80 01  |................|
000001c0  01 00 83 fe ff ff 3f 00  00 00 c1 07 a6 0e 00 fe  |......?.........|
000001d0  ff ff 83 fe ff ff 00 60  00 11 00 00 38 29 00 fe  |.......'....8)..|
000001e0  ff ff 82 fe ff ff 00 08  a6 0e 00 58 5a 02 00 00  |...........XZ...|
000001f0  00 00 00 00 00 00 00 00  00 00 00 00 00 00 55 aa  |..............U.|
00000200

Agora, 0x1be é onde você vê 80 na saída hexaduficiente, isso também pode ser 00 e ainda ser válido. (É o sinalizador "inicializável" na tabela de partições, você pode deixá-lo sozinho, porque é completamente ignorado pela maioria dos BIOS modernos ...) O byte em 0x1bf embora quase nunca seja 0x00 (é mais comumente 0x01 , mas pode levar outros valores), você pode comparar isso com seu backup.mbr para garantir que nada além de 0x1be seja alterado.

Quando estiver satisfeito em aplicar a alteração corretamente, você poderá copiar diretamente o arquivo na primeira parte do disco. O motivo pelo qual você deseja fazer o arquivo em vez de /dev/zero é por segurança contra erros de digitação. Se você acidentalmente omitir count=1 , você terá um mau momento, copiar um arquivo, por outro lado, nunca passará do EOF, nunca. Então é mais seguro.

sudo dd if=backup.mbr.test of=/dev/sdz

Próximo hexdump do seu disco para garantir que as alterações tenham o esperado.

hexdump -C /dev/sdz | head

Compare até 0x200 com backup.mbr.test para garantir que é o que você deseja.

Finalmente, se alguma coisa estragar por qualquer motivo, você pode simplesmente copiar o backup do MBR de volta para a unidade via:

sudo dd if=backup.mbr of=/dev/sdz

Espero que isso ajude.

    
por OmnipotentEntity 26.07.2012 / 20:22
2

AVISO: EXTREMAMENTE PERIGOSO

Você pode usar o comando dd do próprio Linux (ele remove a tabela de partições):

 # dd if=/dev/null of=/dev/sdX bs=512 count=1

Basta remover o MBR, sem a tabela de partições (veja o comentário abaixo):

# dd if=/dev/null of=/dev/sdX bs=446 count=1

Substitua /dev/hdX pelo nome real do dispositivo, como /dev/hda . Use o comando fdisk -l para descobrir o nome do dispositivo:

# fdisk -l

Fonte

  1. link
por Tachyons 04.05.2012 / 04:05
1

Minha experiência com

sudo install-mbr -i n -p D -t 0 /dev/sda

é, que ele desinstalou o grub2 com sucesso de /dev/sda (onde o meu Windows 7 está instalado), então a primeira parte da pergunta "Como eu removo o grub de / dev / sda?" foi respondida.

No entanto, a segunda parte da pergunta, que é "Como restaurar o MBR de / dev / sda?" não foi respondida, pois o comando install-mbr falhou ao restaurar o MBR. Como resultado, o Windows não inicializa mais e o gerenciador de inicialização do Windows relata um erro sobre um MBR danificado e solicita ao usuário que o conserte de um CD de reparo do Windows.

    
por ubuntu-13.10 user 12.12.2013 / 08:14
1

Depois de ler o artigo da Wikipedia sobre o assunto, gostaria de propor algumas soluções adicionais:

  1. Alterar ordem de inicialização no BIOS:)

  2. O melhor e o mais seguro: use fdisk para remover o sinalizador "inicializável" de qualquer partição da unidade. A maioria dos MBRs procura por uma partição "inicializável" para carregar em cadeia, então eu esperaria que o GRUB não fizesse nada se não houvesse tais partições. Ainda não testou.

    Se o acima não ajudar, tente instalar um clone livre do código MBR padrão:

  3. Instale o pacote mbr e use o comando install-mbr desta forma:

    sudo apt-get install mbr
    sudo install-mbr -i n -p D -t 0 /dev/sda
    

Créditos: COMO: Recuperar o Windows MBR usando o Ubuntu LIVE CD

Ao ler o artigo da Wikipedia, tenho a impressão de que a única coisa que identifica o MBR é sua assinatura, que está no final do setor (bytes 510 e 511). Os primeiros 446 bytes do MBR supostamente contêm instruções de máquina. O BIOS deve transferir o controle para o gerenciador de inicialização, independentemente do conteúdo real dos primeiros 446 bytes, desde que a assinatura do MBR esteja presente:

  

Em computadores compatíveis com IBM PC, o firmware de bootstrapping continha   dentro da ROM BIOS carrega e executa o registro mestre de inicialização. [14] ...   Assim, espera-se que o começo do MBR contenha o modo real   instruções de linguagem de máquina. [14] O BIOS lê o MBR do   dispositivo de armazenamento na memória física e, em seguida, direciona   microprocessador para o início do código de inicialização.

     

Devido ao tamanho restrito da seção de código do MBR, normalmente   contém apenas um pequeno programa que copia código adicional (como   carregador de inicialização) do dispositivo de armazenamento para a memória. O controle é então   passou para este código, que é responsável pelo carregamento do   sistema operacional.

     

...

     

A seqüência de bootstrap no BIOS carregará o primeiro MBR válido que   ele encontra na memória física do computador no endereço 0x7C00. o   última instrução executada no código BIOS será um "salto" para que   endereço, para direcionar a execução para o início da cópia do MBR. o   A principal validação para a maioria dos BIOS é a assinatura 0xAA55 no final,   embora um implementador de BIOS possa optar por incluir outras verificações,   verificando se o MBR contém uma tabela de partição válida sem   entradas referentes a setores além da capacidade relatada do disco.

Então, meu entendimento é que o MBR sempre deve conter um gerenciador de inicialização, e zerar os primeiros 446 bytes não impedirá que o BIOS tente inicializar a partir do disco - mas é provável que ele faça o computador travar ao tentar executar um código inválido.

UPDATE: Além disso, este artigo sugere que o disco pareça "un" -bootable "para BIOS você deve realmente editar a assinatura MBR no e do setor (usando qualquer editor de disco). Não tenho certeza se isso afetará o sistema operacional ao ver a tabela de partições no disco ... mas pelo menos você sempre pode modificar esses bytes de volta ...

    
por Sergey 04.05.2012 / 06:51
0

Outra solução mais simples.

No meu caso eu tive Debian linux mas queria usar o Mandriva, vou trabalhar para outros também

Desligue seu pc, então remova o disco que inicializa que você não quer inicializar (que tenha o grub)

Basta colocar em um usb inicializável feito a partir do iso mandriva ou outra variante que você gostaria de instalar, existem ferramentas para fazer sticks usb inicializáveis a partir de arquivos iso use o google (ou você poderia nos um instalador queimado do cd rom)

Agora, a maioria dos instaladores do Linux dá a você a opção de o que fazer, experimentar e reproduzir / usar para avaliação ou Linux portátil ou executar a instalação para instalá-lo. Neste ponto, apenas esperamos (mova o cursor para baixo para que a tela espere, mas não pressione enter ou clique com o mouse).

Basta lembrar neste ponto que seu USB / ou CDRom foi iniciado e está em execução. agora é hora de fazer o plugin de volta o disco rígido que nós temporariamente removidos espere um minuto (algumas bios requerem uma pequena espera por minuto é mais que suficiente)

Continue o processo de configuração, já que a maioria dos instaladores contém ferramentas de partições que você pode fazer o que quiser. Bem, é uma solução simples, eu me livrei de uma configuração antiga do Linux simplesmente como um novato

    
por peter 12.10.2012 / 00:11
0

Pergunta antiga, mas como aconteceu comigo ontem, resolvi assim: desliguei o computador, desconectei fisicamente o disco rígido incriminado, reiniciei o computador, então

~ $ sudo update-grub

Feito isso, desliguei o computador, reconectei o disco rígido e minha antiga partição do Windows 7, que não existe mais há 2 anos, não apareceu - finalmente.

Eu entendo que esta é uma solução realista, mas funciona. Um dia, vou limpar totalmente esse disco rígido e qualquer vestígio restante do GRUB desaparecerá.

    
por ElStellino 18.06.2016 / 17:31