Como eu desinstalo o GRUB?

19

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

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

fundo

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

Quando ligo o computador enquanto apenas a unidade de dados está conectada, o seguinte é exibido:

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

Posso confirmar, pelos backups antigos, /etc/fstabque esse era o UUID de uma partição raiz que reformatei recentemente e que não existe mais . Aqui está a tabela de partição e o registro mestre de inicialização bruto da unidade de dados .

Observe que não estou interessado em soluções alternativas que não respondam à minha pergunta principal. Posso pensar em várias maneiras de solucionar esse problema, mas me incomoda, por princípio, que não sei como resolvê-lo diretamente. Todo procedimento de instalação deve ter um procedimento de desinstalação de contrapartida.

ændrük
fonte
Apenas curioso - se você excluir os arquivos em / boot / grub (o que eu assumi que você fez), o código mbr realmente importa? Acho que não será usado por mais nada, será? Eu poderia estar errado, mas acho que não seria usado, e odiaria mexer com algo em um nível tão baixo se me importasse com os dados.
Marty Fried
Você pode despejar os dados brutos do MBR e publicá-los aqui? Você deve conseguir fazer algo assim sfdisk -d /dev/sdb > sdb.out.
Breakthrough

Respostas:

25

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

Normalmente (e isso é verdade para o grub, grub2 e ntldr iirc), o primeiro byte da sua unidade será uma instrução x86 jmp. Isso ocorre antes mesmo do rótulo do disco, porque ao passar a execução para o dispositivo para inicializá-lo, ele simplesmente define a CPU para sugar as informações do dispositivo como código. Se tiver um código inválido, ele aciona uma interrupção e o BIOS lida com a exceção e passa para o próximo dispositivo inicializável.

Por exemplo, o início 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 63Ir para compensar 0x63 do IP atual (de 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 a partir daqui.

O fim 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ção MBR, ele precisará apenas de duas coisas, a tabela de partição que está em offset 0x1bee a assinatura MBR, 55aaque ocorre no final do setor em offset 0x1fe. 0x1beé decimal 446.

O seguinte (é claro) tornará o dispositivo não inicializável. Mas é isso que você quer. Se você não deseja tornar seu dispositivo incapaz de inicializar, não faça isso, mmm-kay? Presumo que seu dispositivo seja /dev/sdz, simplesmente porque poucas pessoas têm um /dev/sdz, e isso reduz o risco de algum novato idiota copiar cegos os comandos de colar.

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, precisamos criar um dispositivo de loopback (para que o conteúdo não seja truncado.) E aplicar as alterações em nosso setor falso 0 como 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 o arquivo e verifique se a tabela de partição inteira está 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ê 80a saída hexdumped, isso também pode ser 00e ainda é válido. (É o sinalizador "inicializável" na tabela de partição, você pode deixá-lo em paz, porque é completamente ignorado pela maioria dos BIOS modernos ...) O byte no 0x1bfquase nunca será 0x00(é mais comum, 0x01mas pode aceitar outros valores). você pode comparar isso com o seu backup.mbrpara garantir que nada do passado 0x1beseja alterado.

Quando estiver satisfeito com a aplicação correta da alteração, você poderá copiar diretamente o arquivo na primeira parte do disco. O motivo pelo qual você deseja fazer o arquivo em vez de /dev/zeronovamente é a segurança contra erros de digitação. Se você acidentalmente omitir count=1que vai se divertir muito, copiar um arquivo, por outro lado, nunca será executado além do EOF. Então é mais seguro.

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

Em seguida, hexdumpseu disco para garantir que as alterações foram realizadas conforme o esperado.

hexdump -C /dev/sdz | head

Compare até 0x200contra backup.mbr.testpara garantir que é o que você deseja.

Por fim, se alguma coisa estragar por qualquer motivo, você pode simplesmente copiar o backup do MBR de volta para a unidade através de:

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

Espero que isto ajude.

OmnipotentEntity
fonte
1
Estou lhe dando uma vantagem por antecipar e impedir um erro grave de noob.
Psitae 19/0318
Muito obrigado, fiz o possível para evitar o máximo de erros noob possível: fazer um backup, não gravar diretamente no dispositivo de bloco, caso countseja esquecido, não usar diretamente um nome de dispositivo de bloco comum, especificando que o arquivo de backup deve ser feito fora do dispositivo que está sendo alterado, um exemplo da aparência de uma limpeza bem-sucedida, como desfazer se você estragar. Eu acho que se você é conhecedor o suficiente para saber o que estou falando, você pode cortar os passos do bebê e fazer tudo isso em um único comando. Mas não vou dar esse comando se você ainda estiver aprendendo. ;)
OmnipotentEntity
2

AVISO: EXTREMAMENTE PERIGOSO

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

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

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

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

Substitua /dev/hdXpelo nome real do dispositivo, como /dev/hda. Use o fdisk -lcomando para descobrir o nome do dispositivo:

# fdisk -l

Fonte

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/
Tachyons
fonte
Essas contagens de bytes parecem desconfortavelmente arbitrárias. Você sabe se eles são iguais para o GRUB2?
ændrük
1
A contagem de bytes deve-se ao fato de a tabela de partição estar entre 446 e 512. Obviamente, isso levanta a questão de por que você deseja remover o MBR do grub ... não está machucando nada, apenas sentado ali sem uso. Se você quiser outro carregador de inicialização, basta instalá-lo e ele substituirá o grub.
Psusi
3
Uau, esse tipo de resposta deve ter "AVISO: EXTREMAMENTE PERIGOSO" escrito em grandes letras vermelhas por toda parte. Tenho certeza que o OP é capaz de fazer isso, mas eu odiaria ver algum usuário novato copiar e colar o primeiro comando no terminal, mesmo sem saber o que "tabela de partição" é
Sergey
1
Você não fazer isso . O primeiro comando apagará a tabela de partição (como o OP mencionado), mas o segundo comando causará um comportamento indefinido se o MBR não estiver configurado corretamente.
Breakthrough
1
Umm .. Eu não sei por que vocês estão pirando, os comandos que os táquions colaram não fazem nada. Você pode testar com touch testfile, dd if=/dev/urandom of=testfile bs=512 count=1, sudo losetup /dev/loop7 testfile, sudo dd if=/dev/null of=/dev/loop7 bs=446 count=1, sudo hexdump -Cv /dev/loop7. Como você pode ver, /dev/nullnão é uma fonte 0, é uma fonte EOF. ddnão pode e não copiará nada de que /dev/nullvocê precise usar /dev/zero. Segundo @Breakthrough, nenhum comportamento indefinido é possível se o primeiro byte do setor 0 for 0x00. Não sei por que você pensa isso.
OmnipotentEntity
1

Minha experiência com

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

é que ele desinstalou com êxito o grub2 de /dev/sda(onde meu Windows 7 está instalado), então a primeira parte da pergunta "Como faço para remover o grub de / dev / sda?" foi respondido.

No entanto, a segunda parte da pergunta, que é "Como restauro o MBR de / dev / sda?" não foi respondido desde oinstall-mbr comando 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 que o usuário repare a partir de um CD de reparo do Windows.

usuário ubuntu-13.10
fonte
1

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

  1. Alterar a 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 nessa unidade. A maioria dos MBRs procura uma partição "inicializável" para carregar em cadeia, portanto, esperaria que o GRUB não fizesse nada se não houvesse essas partições. Ainda não testei.

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

  3. Instale o mbrpacote e use o install-mbrcomando como este:

    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 é a sua assinatura, que está no final do setor (bytes 510 e 511). Os primeiros 446 bytes do MBR deveriam conter instruções da máquina. O BIOS deve transferir o controle para o carregador de inicialização, independentemente do conteúdo real dos primeiros 446 bytes, desde que a assinatura MBR esteja presente:

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

Devido ao tamanho restrito da seção de código do MBR, ele normalmente contém apenas um pequeno programa que copia código adicional (como um carregador de inicialização) do dispositivo de armazenamento na memória. O controle é passado para esse código, responsável por carregar o sistema operacional real.

...

A sequência de inicialização no BIOS carregará o primeiro MBR válido encontrado na memória física do computador no endereço 0x7C00. A última instrução executada no código do BIOS será um "salto" para esse endereço, para direcionar a execução para o início da cópia do MBR. A validação principal para a maioria dos BIOSs é 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ções válida sem entradas referentes a setores além da capacidade relatada do disco.

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

ATUALIZAÇÃO: Além disso, este artigo sugere que, para fazer com que o disco pareça "não inicializável" para o BIOS, você realmente deve editar a assinatura MBR no e do setor (usando qualquer editor de disco). Não tenho certeza se isso afetará o SO vendo a tabela de partição no disco ... mas pelo menos você sempre pode modificar esses bytes de volta ...

Sergey
fonte
0

Outra solução mais simples.

No meu caso, eu tinha o Debian Linux, mas queria usar o Mandriva, também funcionará para outros

Desligue o seu PC e remova o disco inicializado que você não deseja inicializar (que possui o grub)

Basta colocar um usb inicializável feito a partir do mandriva iso ou outra variante que você gostaria de instalar. Existem ferramentas para fazer pendrives USB inicializáveis ​​a partir de arquivos iso, usando o google (ou você pode ser um instalador queimado do cd rom)

Agora, a maioria dos instaladores do Linux oferece a você uma escolha do que fazer, tente e reproduza / use para avaliação ou Linux portátil ou execute a instalação para instalá-lo. Neste ponto, basta aguardar (mova o cursor para baixo para que a tela espere, mas não pressione enter ou clique com o mouse).

Basta lembrar que, neste momento, seu USB / ou / CDRom foi iniciado e está sendo executado. agora é hora de reconectar o disco rígido que removemos temporariamente, espere um minuto (algumas biografias exigem uma pequena espera por um minuto é mais do que suficiente)

Continue com 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 antiga instalação Linux simplesmente como iniciante

Pedro
fonte
0

Pergunta antiga, mas como aconteceu comigo ontem, resolvi assim: desliguei o computador, desconectei fisicamente o disco rígido incriminado, liguei novamente o computador e, em seguida,

~ $ sudo update-grub

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

Entendo que esta é uma solução prática, mas funciona. Um dia, limparei totalmente o disco rígido e qualquer vestígio restante do GRUB desaparecerá.

ElStellino
fonte