¿Cómo desinstalo GRUB?

19

Un disco duro que uso solo para el almacenamiento de datos todavía tiene GRUB de instalaciones anteriores de Ubuntu.

¿Cómo puedo eliminar GRUB sin dañar el resto de los datos de la unidad?

Antecedentes

Ocasionalmente muevo la unidad de datos entre computadoras con varias configuraciones de orden de inicio, por lo que me gustaría que no se pueda iniciar para evitar tener que acomodarla en la configuración del BIOS de cada computadora.

Cuando enciendo una computadora mientras solo la unidad de datos está conectada, aparece lo siguiente:

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

Puedo confirmar por las copias de seguridad anteriores /etc/fstabque este era el UUID de una partición raíz que reformateé recientemente y que ya no existe . Aquí está la tabla de partición de la unidad de datos y el registro de arranque maestro sin procesar .

Tenga en cuenta que no estoy interesado en soluciones alternativas que no respondan a mi pregunta principal. Se me ocurren varias formas de solucionar este problema, pero me molesta por principio que no sé cómo resolverlo directamente. Cada procedimiento de instalación debe tener un procedimiento de desinstalación equivalente.

ændrük
fuente
Solo curiosidad: si elimina los archivos en / boot / grub (lo que supuse que hizo), ¿realmente importa el código mbr? No creo que se vaya a usar por nada más, ¿verdad? Podría estar equivocado, pero no pensaría que se usaría, y odiaría jugar con algo a un nivel tan bajo si me preocuparan los datos.
Marty Fried
¿Puedes volcar los datos sin procesar de MBR y publicarlos aquí? Deberías poder hacer algo como sfdisk -d /dev/sdb > sdb.out.
Avance

Respuestas:

25

Puede hacer que el dispositivo no sea de arranque simplemente haciendo que los primeros bytes del disco sean 0x00.

Típicamente (y esto es cierto tanto para grub, grub2 como ntldr iirc), el primer byte de su unidad será una instrucción jmp x86. Esto ocurre incluso antes de la etiqueta del disco, porque al pasar la ejecución al dispositivo para arrancarlo, simplemente configura la CPU para que absorba la información del dispositivo como código. Si tiene un código no válido, desencadena una interrupción y el BIOS maneja la excepción y pasa al siguiente dispositivo de arranque.

Por ejemplo, el comienzo de mi disco comienza con:

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

La primera parte es eb 63Saltar para compensar 0x63 de la IP actual (por lo tanto, a 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......|

La ejecución continúa desde aquí.

El final del sector se ve así:

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.|

Si su disco está formateado como una tabla de partición MBR, entonces solo necesita dos cosas para estar presente, la tabla de partición que está en el desplazamiento 0x1bey la firma MBR, 55aaque ocurre al final del sector en el desplazamiento 0x1fe. 0x1bees decimal 446.

Lo siguiente (por supuesto) hará que el dispositivo no se pueda arrancar. Pero esto es lo que quieres. Si no desea que su dispositivo no pueda iniciarse, no lo haga, ¿mmm-kay? Supongo que su dispositivo es /dev/sdz, simplemente porque no muchas personas tienen /dev/sdz, y esto reduce el riesgo de que un novato idiota copie ciegamente los comandos de pegado.

Primero, copie el MBR a un archivo para una copia de seguridad.

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

Luego, haga una copia de ese archivo:

cp backup.mbr backup.mbr.test

A continuación, tenemos que crear un dispositivo de bucle invertido (para que los contenidos no se trunquen). Y aplicar los cambios en nuestro sector falso 0 como prueba:

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 el archivo y asegúrese de que toda la tabla de particiones esté intacta:

sudo hexdump -C backup.mbr.test

Deberías 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

Ahora, 0x1bees donde se ve 80en la salida hexdumped, esto también puede ser 00y seguir siendo válido. (Es la bandera de "arranque" en la tabla de particiones, puede dejar solo, porque es completamente ignorada por la mayoría de los BIOS modernos ...) El byte a 0x1bfpesar de que casi se no ser 0x00(que es más comúnmente 0x01, pero puede tener otros valores) se puede comparar esto con su backup.mbrpara asegurarse de que no 0x1bese cambie nada pasado .

Una vez que esté satisfecho de haber aplicado el cambio correctamente, puede copiar directamente el archivo en la primera parte del disco. La razón por la que desea hacer el archivo en lugar de /dev/zerootra vez es por seguridad contra errores tipográficos. Si omite accidentalmente, count=1pasará un mal momento, copiar un archivo, por otro lado, nunca pasará el EOF, nunca. Entonces es más seguro.

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

A continuación, hexdumpsu disco para asegurarse de que los cambios se realizaron como se esperaba

hexdump -C /dev/sdz | head

Compare hasta 0x200contra backup.mbr.testpara asegurarse de que sea lo que desea.

Finalmente, si algo falla por cualquier razón, simplemente puede copiar la copia de seguridad del MBR en la unidad a través de:

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

Espero que esto ayude.

Entidad omnipotente
fuente
1
Le doy un plus para anticipar y prevenir un error grave de novatos.
psitae
Muchas gracias, hice todo lo posible para evitar la mayor cantidad posible de errores novatos: hacer una copia de seguridad, no escribir directamente en el dispositivo de bloqueo en caso de que countse olvide, no usar directamente un nombre de dispositivo de bloque común, especificando que el archivo de copia de seguridad debe hacerse fuera del dispositivo que se está cambiando, un ejemplo de cómo se ve un borrado exitoso, cómo deshacerlo si lo arruinas. Me imagino que si tienes el conocimiento suficiente para saber a qué me refiero, puedes cortar los pequeños pasos y hacer todo esto en un solo comando. Pero no te voy a dar ese comando si todavía estás aprendiendo. ;)
OmnipotentEntity
2

ADVERTENCIA: EXTREMADAMENTE PELIGROSO

Puede usar el comando dd desde el propio Linux (elimina la tabla de particiones):

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

Simplemente elimine MBR, sin la tabla de particiones (vea el comentario a continuación):

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

Reemplace /dev/hdXcon el nombre real de su dispositivo como /dev/hda. Use el fdisk -lcomando para averiguar el nombre del dispositivo:

# fdisk -l

Fuente

  1. http://www.cyberciti.biz/faq/linux-how-to-uninstall-grub/
Taquiones
fuente
Esos recuentos de bytes se ven incómodamente arbitrarios. ¿Sabes si son iguales para GRUB2?
ændrük
1
El recuento de bytes se debe a que la tabla de particiones se encuentra entre 446 y 512. Por supuesto, esto plantea la pregunta de por qué desea eliminar el grub MBR ... no está dañando nada simplemente sentarse allí sin usar. Si desea otro cargador de arranque, simplemente instálelo y reemplazará grub.
psusi
3
Wow, este tipo de respuesta debería tener "ADVERTENCIA: EXTREMADAMENTE PELIGROSO" escrito en grandes letras rojas por todas partes. Estoy seguro de que el OP es capaz de hacer esto, pero odiaría ver a algún usuario novato copiando y pegando el primer comando en la terminal sin siquiera saber qué es la "tabla de particiones"
Sergey
1
No no hacer esto . El primer comando eliminará la tabla de particiones (como se menciona en el OP), pero el segundo comando causará un comportamiento indefinido si el MBR no está configurado correctamente.
Avance
1
Umm ... No sé por qué ustedes se están volviendo locos, los comandos que pegaron los taquiones no hacen nada en absoluto. Puede probar con 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 puede ver, /dev/nullno es una fuente 0, es una fuente EOF. ddno puede y no copiará nada de lo /dev/nullque necesite usar /dev/zero. Segundo @Breakthrough, no es posible un comportamiento indefinido si el primer byte del sector 0 es 0x00. No sé por qué piensas eso.
OmnipotentEntity
1

Mi experiencia con

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

es decir, que desinstaló con éxito grub2 /dev/sda(donde está instalado mi Windows 7), por lo que la primera parte de la pregunta "¿Cómo elimino grub de / dev / sda?" ha sido respondido

Sin embargo, la segunda parte de la pregunta, que es "¿Cómo restauro el MBR de / dev / sda?" no ha sido respondido ya que el install-mbrcomando no pudo restaurar el MBR. Como resultado, Windows ya no arranca y el administrador de arranque de Windows informa un error sobre un MBR dañado y le pide al usuario que repare desde un CD de reparación de Windows.

usuario ubuntu-13.10
fuente
1

Después de leer el artículo de Wikipedia sobre el tema, me gustaría proponer algunas soluciones adicionales:

  1. Cambiar el orden de arranque en BIOS :)

  2. La mejor y la más segura: se usa fdiskpara eliminar el indicador de "arranque" de cualquier partición en esa unidad. La mayoría de los MBR buscan una partición "de arranque" para cargar en cadena, por lo que esperaría que GRUB simplemente no hiciera nada si no hay tales particiones. Aunque no lo he probado.

    Si lo anterior no ayuda, intente instalar un clon gratuito de código MBR estándar:

  3. Instale el mbrpaquete y use un install-mbrcomando como este:

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

Créditos: CÓMO: Recuperar Windows MBR usando Ubuntu LIVE CD

Al leer el artículo de Wikipedia, tengo la impresión de que lo único que identifica al MBR es su firma, que se encuentra al final del sector (bytes 510 y 511). Se supone que los primeros 446 bytes de MBR contienen instrucciones de la máquina. Se supone que el BIOS transfiere el control al gestor de arranque independientemente del contenido real de los primeros 446 bytes, siempre que esté presente la firma MBR:

En las computadoras compatibles con PC de IBM, el firmware de arranque incluido en el BIOS ROM carga y ejecuta el registro de arranque maestro. [14] ... Por lo tanto, se espera que el comienzo del MBR contenga instrucciones en lenguaje de máquina en modo real. [14] El BIOS lee el MBR del dispositivo de almacenamiento en la memoria física y luego dirige el microprocesador al inicio del código de arranque.

Debido al tamaño restringido de la sección de código del MBR, generalmente contiene solo un pequeño programa que copia código adicional (como un cargador de arranque) desde el dispositivo de almacenamiento a la memoria. Luego se pasa el control a este código, que es responsable de cargar el sistema operativo real.

...

La secuencia de arranque en el BIOS cargará el primer MBR válido que encuentre en la memoria física de la computadora en la dirección 0x7C00. La última instrucción ejecutada en el código del BIOS será un "salto" a esa dirección, para dirigir la ejecución al comienzo de la copia de MBR. La validación principal para la mayoría de las BIOS es la firma 0xAA55 en el extremo, aunque un implementador de BIOS puede optar por incluir otras verificaciones, como verificar que el MBR contenga una tabla de partición válida sin entradas que se refieran a sectores más allá de la capacidad informada del disco.

Entonces, entiendo que MBR siempre debe contener un gestor de arranque, y poner a cero los primeros 446 bytes no impedirá que el BIOS intente arrancar desde el disco, pero es probable que la computadora se bloquee al intentar ejecutar código no válido.

ACTUALIZACIÓN: Además, este artículo sugiere que para hacer que el disco parezca "no arrancable" para BIOS, en realidad debería editar la firma MBR en y del sector (usando cualquier editor de discos). Sin embargo, no estoy seguro de si afectará al sistema operativo al ver la tabla de particiones en el disco ... pero al menos siempre puede modificar esos bytes ...

Sergey
fuente
0

Otra solución más simple.

En mi caso tenía Debian Linux pero quería usar Mandriva, también funcionará para otros

Apague su PC, luego retire el disco que arranca y que no desea arrancar (que tiene grub)

Simplemente coloque un usb de arranque hecho a partir de la iso de mandriva u otra variante que desee instalar, hay herramientas para hacer que los dispositivos de arranque usb de archivos iso usen google (o podría usar un instalador grabado desde cd rom)

Ahora, la mayoría de los instaladores de Linux le permiten elegir qué hacer, probar y reproducir / usar para evaluación o Linux portátil o ejecutar la instalación para instalarlo. En este punto, solo esperamos (mueva el cursor hacia arriba para que la pantalla espere pero no presione enter ni haga clic con el mouse).

Solo recuerde en este punto que su USB / o / CDRom ha comenzado y se está ejecutando. ahora es el momento de volver a conectar el disco duro que eliminamos temporalmente, espere un minuto (algunas biografías requieren una pequeña espera por minuto es más que suficiente)

Continúe con el proceso de configuración ya que la mayoría de los instaladores contienen herramientas de particiones que puede hacer lo que quiera. bueno, es una solución simple, me deshice de una configuración anterior de Linux simplemente como principiante

Peter
fuente
0

Antigua pregunta, pero como me sucedió ayer, lo resolví así: apagué la computadora, desconecté físicamente el disco duro incriminado, volví a encender la computadora, luego

~ $ sudo update-grub

Hecho esto, apagué la computadora, volví a conectar el disco duro y mi antigua partición de Windows 7, que ya no existía desde hace 2 años, finalmente no apareció.

Entiendo que esta es una solución realista, pero funciona. Un día borraré ese disco duro por completo, y cualquier rastro restante de GRUB desaparecerá.

ElStellino
fuente