¿Cómo restaurar un sistema después de eliminar accidentalmente todos los núcleos?

Respuestas:

93

Arranque en un CD en vivo (o USB en vivo), monte algunos sistemas, realice un arranque en él e instale el kernel. Después de una instalación exitosa del kernel, desmonte los sistemas de archivos.

  1. Terminal abierta
  2. Montar la partición de Ubuntu: sudo mount /dev/sdXY /mnt
  3. Monta algunas particiones especiales:

    sudo mount --bind /dev /mnt/dev
    sudo mount --bind /proc /mnt/proc
    sudo mount --bind /sys /mnt/sys
    
  4. (opcional) Cuando esté conectado a una red, use los servidores DNS de su entorno Live (de lo contrario, los nombres de host posiblemente no se puedan resolver):

    cp /etc/resolv.conf /mnt/etc/resolv.conf
    
  5. Chroot en el /mnt:sudo chroot /mnt
  6. Instale el kernel de Linux: apt-get install linux-image-generic(no se requiere sudo ya que es root después de un chroot)
  7. Después de una instalación exitosa del kernel, salga del chroot y desmonte algunos sistemas de archivos:

    exit
    sudo umount /mnt/sys
    sudo umount /mnt/proc
    sudo umount /mnt/dev
    sudo umount /mnt
    
  8. Reinicie y retire el CD o USB: sudo reboot
Lekensteyn
fuente
Es lo que habría sugerido. No puedo ver por qué no funcionaría.
Oli
Ok, gracias por confirmar. También agregué los pasos de finalización, desmontando /mnt. Ubuntu generalmente se encarga de desmontar / sincronizar los sistemas de archivos, pero esto me parece más limpio.
Lekensteyn
1
@MaheshKatta Tendrá que montar el RAID primero. Entonces, en lugar del paso dos (donde monta una sola unidad), estará asignando una /dev/mdxxxunidad, suponiendo que sea mdadm.
Oli
44
@James Edit /etc/resolv.conf(elimínelo si es un enlace simbólico) y coloque algo parecido nameserver 8.8.8.8en él (servidor DNS público de Google). Reemplácelo si es necesario.
Lekensteyn
3
Nvm. Parece que tuve que editar el archivo en chroot. Tal vez deberías agregar a la respuesta cp /etc/resolv.conf /mnt/etc/resolv.confantes de entrar en chroot. De todos modos
Peter Raeves
56

Este procedimiento ampliado explica la mayoría de las complicaciones que podrían ocurrir, incluidos los problemas de conexión a Internet en chroot, sin saber qué paquete de kernel instalar (antes de Ubuntu 12.10, no siempre será linux-image-generic), sin saber desde el principio qué partición o incluso qué unidad física contiene el /sistema de archivos y que tiene una /bootpartición separada .

No he escrito esto con referencia a ninguno de los otros procedimientos aquí, aunque notará algunas similitudes. Lo basé, libremente, en el procedimiento aquí (aunque esas instrucciones son para algo bastante diferente, las he adaptado ampliamente, y solo se copian algunos comandos, no en prosa).

Eliminó todos los paquetes del núcleo, y Ubuntu no puede arrancar sin un núcleo instalado. Entonces, la solución es arrancar desde un CD / DVD / USB chrooten vivo en el sistema instalado e instalar un núcleo en él.

  1. Arranque desde un CD / DVD en vivo de Ubuntu o una unidad flash USB en vivo.

  2. Seleccione Probar Ubuntu (no Instalar Ubuntu ).

  3. Cuando aparezca el escritorio, asegúrese de estar conectado a Internet. Si no es así, conéctese a Internet. Una forma de ver si está conectado a Internet es abrir un navegador web. Incluso puede seguir el resto de las instrucciones llevando esta respuesta a Ask Ubuntu en su navegador web, en el sistema de CD / DVD / USB en vivo. Recomiendo hacer eso.

  4. Abra una ventana de Terminal con Ctrl+ Alt+ T.

  5. En la ventana Terminal, ejecute este comando para enumerar sus particiones:

     sudo parted -l
    

    Verá algo como esto (pero no será exactamente así):

    Model: VMware, VMware Virtual S (scsi)
    Disk /dev/sda: 21.5GB
    Sector size (logical/physical): 512B/512B
    Partition Table: msdos
    
    Number  Start   End     Size    Type      File system     Flags
     1      1049kB  20.4GB  20.4GB  primary   ext4            boot
     2      20.4GB  21.5GB  1072MB  extended
     5      20.4GB  21.5GB  1072MB  logical   linux-swap(v1)
    
    
    Warning: Unable to open /dev/sr0 read-write (Read-only file system).  /dev/sr0
    has been opened read-only.
    Error: Can't have a partition outside the disk!
    
  6. Examine el resultado que obtuvo para determinar el nombre del dispositivo de la partición que contiene el /sistema de archivos del sistema Ubuntu que está instalado en el disco duro (que está reparando).

    • Si solo tiene una ext4partición, esa es.

    • Si tiene más de una ext4partición, probablemente sea la primera. Sin embargo, si el primero es muy pequeño, menos de un gigabyte, entonces esa podría ser una /bootpartición separada (recuerde esa también).

      Tenga en cuenta que si bootse incluye o no en la lista Flagstiene muy poco que ver con si una partición es o no una partición separada /boot. Mi sistema, cuya información se enumera arriba, no tiene una /bootpartición separada .

    • El nombre del dispositivo para la partición comienza con el nombre del dispositivo para la unidad física, indicado inmediatamente después Disken la segunda línea. Luego solo agregue el número de partición al final de eso. Entonces, el nombre del dispositivo para la partición que contiene mi / sistema de archivos es /dev/sda1. Aquí están las dos líneas donde encontré esa información:

      Disk /dev/sda: 21.5GB
       1      1049kB  20.4GB  20.4GB  primary   ext4            boot
    • Si tiene más de una unidad física, obtendrá más de una lista como la que se muestra arriba. Pero a menos que tenga otro sistema similar a Unix instalado, probablemente solo tendrá una unidad que contenga ext4particiones, al menos sin haberlas creado intencionalmente en otra unidad. Si tiene varias unidades con ext4particiones, entonces la ext4partición que contiene su /sistema de archivos está probablemente en una unidad que también contiene una linux-swappartición.

    • Es posible que el sistema de /archivos de su sistema Ubuntu esté en una partición de otro tipo que no sea ext4. Cuando esto sucede, es casi siempre ext3, y casi siempre en un sistema bastante antiguo. Es muy raro que este sea el caso, a menos que usted mismo configure las cosas intencionalmente de esta manera.

    Recuerde el nombre del dispositivo de la partición que contenía su /sistema de archivos (o escríbalo). Si es diferente de /dev/sda1, entonces lo reemplazará /dev/sda1en los pasos a continuación.

    (Si parecía que tenía una /bootpartición separada , recuerde también el nombre del dispositivo para eso).

  7. Montar el /sistema de archivos /mnty montar su /devsistema de archivos:

    sudo mount /dev/sda1 /mnt
    sudo mount --bind /dev /mnt/dev
  8. Compruebe si el sistema Ubuntu dañado que está reparando tiene una /bootpartición separada que debe montarse por separado. (Si está seguro de que no, puede omitir esto).

    Para verificar, ejecute:

    ls /mnt/boot
    

    Si hay salida (como grub memtest86+.bin memtest86+_multiboot.bin, pero no necesariamente eso), entonces el sistema roto /bootestá en la misma partición /y no tiene que montar nada para acceder a él.

    Pero si no hay salida, entonces tendrá que montar el /bootsistema de archivos:

    sudo mount BOOT-PARTITION /mnt/boot

    Reemplace BOOT-PARTITIONcon el nombre del dispositivo de la /bootpartición (consulte el paso 6 anterior).

  9. chroot en el sistema roto, monte los sistemas de archivos virtuales importantes restantes y establezca algunas variables de entorno importantes:

    sudo chroot /mnt
    mount -t proc none /proc
    mount -t sysfs none /sys
    mount -t devpts none /dev/pts
    export HOME=/root
    export LC_ALL=C
    
  10. Determine si el acceso a Internet funciona desde dentro chrootmediante pingun host confiable que se sabe que responde normalmente a pings:

    ping -c 5 www.google.com
    

    Debería ver algo como esto:

    PING www.l.google.com (74.125.131.147) 56(84) bytes of data.
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=1 ttl=44 time=61.3 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=2 ttl=44 time=62.3 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=3 ttl=44 time=61.8 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=4 ttl=44 time=63.8 ms
    64 bytes from vc-in-f147.1e100.net (74.125.131.147): icmp_req=5 ttl=44 time=66.6 ms
    
    --- www.l.google.com ping statistics ---
    5 packets transmitted, 5 received, 0% packet loss, time 4006ms
    rtt min/avg/max/mdev = 61.367/63.212/66.608/1.897 ms
    
    • Si se ve así en su mayoría, y el número anterior % packet losses inferior a 100, entonces la conexión a Internet chrootestá funcionando:

      5 packets transmitted, 5 received, 0% packet loss, time 4006ms

      Está funcionando, por lo que puede omitir el paso 11 .

    • Si se ve principalmente así, y el número anterior % packet losses 100, la conexión necesita solución de problemas. Asegúrese de que la conexión en el sistema de CD en vivo (por ejemplo, a través de un navegador web o ejecutando el mismo comando en una chrootventana / pestaña Terminal no editada) funcione. Asegúrese de escribir el comando correctamente. Úselo www.google.comsi no ha estado.

    • Si la salida no se parece a la anterior, sino que dice ping: unknown host www.google.com, entonces la red aún no funciona en el chroot.

  11. Configurar redes en chroot. Omita este paso a menos que tenga un unknown hosterror en el paso 10 anterior.

    Para configurar la red, haga una copia de seguridad del hostsarchivo del sistema roto y copie sobre el sistema de CD en vivo hostsy los resolv.confarchivos. (No tiene que hacer una copia de seguridad de la versión del sistema roto resolv.conf, ya que ese archivo se regenera automáticamente sobre la marcha).

    Abra una nueva pestaña Terminal ( Ctrl+ Shift+ T) o, si lo prefiere, una nueva ventana Terminal ( Ctrl+ Shift+ N, o simplemente Ctrl+ Alt+ T). Ejecute estos comandos en él:

    sudo cp /mnt/etc/hosts /mnt/etc/hosts.old
    sudo cp /etc/hosts /mnt/etc/hosts
    sudo cp /etc/resolv.conf /mnt/etc/resolv.conf
    exit
    

    (El exitcomando al final cierra la nueva pestaña / ventana).

    Repita el paso 10 anterior para asegurarse de que el acceso a Internet funcione ahora desde dentro del chroot. Debería.

  12. Averigua qué paquete de kernel debe instalarse. Por lo general, esto será linux-image-generic. Pero no siempre.

    Si no está seguro de qué instalar, dependerá en parte de la versión de Ubuntu que haya instalado, y en parte de otra información. Si no está seguro de qué versión de Ubuntu ha instalado, infórmese ejecutando este comando (en chroot, no en una ventana / pestaña de Terminal separada):

    lsb_release -r
    
    • En Ubuntu 12.10 (la próxima versión de Ubuntu, actualmente en desarrollo), siempre lo será linux-image-generic. (Mira esto , esto y esto .)

    • En Ubuntu 12.04 LTS, las posibilidades probables son linux-image-genericy linux-image-generic-pae. (A diferencia de las versiones anteriores, 12.04 ya no tiene núcleos de servidor y escritorio separados).

      • Si el sistema Ubuntu instalado (que está arreglando) es la versión de 64 bits, use linux-image-generic. ( linux-image-generic-paesolo se aplica a sistemas de 32 bits).

        Es posible tener un sistema Ubuntu de 32 bits instalado en una computadora de 32 bits o 64 bits. Además, puede estar utilizando un CD en vivo de 32 bits o 64 bits para reparar un sistema instalado de 32 bits. Entonces, si no sabe si el sistema Ubuntu instalado es de 32 bits o de 64 bits, verifique ejecutando este comando (en chroot, no en una ventana / pestaña de Terminal separada):

        dpkg-architecture -qDEB_HOST_ARCH_BITS
        

        La salida será 32o 64.

        (Tenga en cuenta que nouname -m es una forma correcta de encontrar esta información, porque incluso cuando se ejecuta en , eso le dirá la arquitectura del núcleo en ejecución , que es el núcleo del sistema de CD en vivo y no el núcleo del sistema instalado (roto)).chroot

      • Si el sistema Ubuntu instalado (que está arreglando) es la versión de 32 bits, el mejor kernel para usar dependerá de la cantidad de RAM que tenga. Yo recomiendo:

        • linux-image-generic si tiene menos de 3 GB de RAM
        • linux-image-generic-pae si tienes 3 GB de RAM o más.

        (Así es como el instalador de Ubuntu elige cuál configurar, desde que el instalador adquirió la capacidad de instalar núcleos PAE. Consulte la resolución de este error . Si desea saber qué es PAE, consulte este artículo de Wikipedia . Si desea aprenda sobre PAE en Ubuntu, vea esta página wiki de Ubuntu .)

        Si no sabe cuánta RAM tiene, ejecute este comando para averiguar:

        grep MemTotal /proc/meminfo
        

        Eso aparece en kilobytes . Para convertir a gigabytes , divida por 1,048,576 (1024 2 ).

        • 3 conciertos = 3,145,728 kB
    • En Ubuntu libera antes 12.04, posibilidades probables son linux-image-generic, linux-image-generic-paey linux-image-server.

      • Si está ejecutando un sistema Ubuntu Server, use linux-image-server.
      • De lo contrario, siga los consejos anteriores para los sistemas 12.04.
  13. ¡Este es el momento que has estado esperando! Instale un kernel en el sistema roto.

    (Al igual que antes, excepto donde se indique explícitamente lo contrario, estos comandos se ejecutan en chroot, no en una ventana / pestaña de Terminal separada).

    apt-get update
    apt-get -y install linux-image-generic

    Reemplace linux-image-genericcon cualquier otro paquete de kernel que haya decidido instalar en el paso 12 anterior, si es diferente.

  14. Si tuvo que realizar el paso 11 para configurar la red en el chroot, restaure el hostsarchivo antiguo . Si omitió el paso 11, omita este paso también.

    Para restaurarlo, ejecute este comando:

    cp /etc/hosts.old /etc/hosts
    
  15. Desmontar sistemas de archivos, exitsaliendo de chroot:

    umount /proc || umount -lf /proc
    umount /sys /dev/pts
    exit
    sudo umount /mnt/dev /mnt
    
  16. Apague el sistema de CD / DVD / USB en vivo, quitando el CD / DVD en vivo o la unidad flash USB. Inicie en el sistema instalado en el disco duro que acaba de reparar. Ha instalado un paquete de kernel en él (y como parte de la instalación, el kernel que proporciona se agregará nuevamente al menú de arranque de GRUB2). Si todo funcionó correctamente, su sistema debería arrancar sin problemas. (Creo que es posible que esta vez tarde un poco más en arrancar de lo habitual).

DESCARGO DE RESPONSABILIDAD: No probé el procedimiento anterior en todos los sistemas Ubuntu posibles , por lo que es posible que haya un error que no he identificado.

En el futuro, recomiendo siempre tratar de mantener dos núcleos instalados. Es bueno tener dos en caso de que uno deje de funcionar por algún motivo (puede seleccionar el otro en el menú de arranque de GRUB2). Además, si tiene la intención de mantener dos núcleos y desinstala accidentalmente uno más de lo que pretendía y reinicia, aún le queda uno para iniciar.

Eliah Kagan
fuente
1
Esta puede ser la mejor explicación escrita de cómo hacer algo complejo en Linux que he leído. Gracias
ZincX
¡Guau, esto es muy útil! ¡Muchas gracias!
Rafał Cieślak
2
Muchas gracias Eliah: después de eliminar estúpidamente todas mis imágenes de Linux, salvaste mi tocino. El único inconveniente que tuve fue en el paso: sudo cp /etc/resolv.conf /mnt/etc/resolv.conf Recibí un error "cp: no escribía a través del enlace simbólico" /mnt/etc/resolv.conf ". Encontré este hilo y seguí las instrucciones de un póster para: "rm /mnt/etc/resolv.conf" antes de "cp /etc/resolv.conf /mnt/etc/resolv.conf" para resolver el problema del enlace simbólico.
@ xcal400 /etc/resolv.confhoy en día es administrado por resolvconf, se generará automáticamente al usar NetworkManager y se puede eliminar de forma segura usando rm /etc/resolv.confcomo descubrió.
Lekensteyn
3
Esta debería ser la respuesta aceptada. ¡Gracias!
Jean-Michel Garcia
0

Cuando eliminé mi kernel encontré esta solución en los foros de Ubuntu. Seguí cada paso y el sistema se recuperó. Espero que te ayude.

Un chroot podría funcionar, chroot significa que cuando inicia un sistema, cambia el sistema de archivos raíz. Por ejemplo, comenzó desde un CD en vivo pero cambia la raíz "/" a donde está instalado su ubuntu.

Digamos que tu ubuntu está instalado en / dev / sda2, entonces puedes probar los siguientes comandos:

Código:

sudo mount /dev/sda2 /mnt
sudo cp /etc/resolv.conf /mnt/etc/
sudo cp /etc/hosts /mnt/etc/
sudo mount --bind /dev/ /mnt/dev
sudo chroot /mnt
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert --local --rename --add /sbin/initctl
ln -s /bin/true /sbin/initctl

ahora que su raíz "/" está en / dev / sda2, intente instalar el núcleo

apt-get update
apt-get install linux-image-2.6.32-26-generic
update-initramfs -cv -k all
update-grub

Tuve que hacer algunas conjeturas aquí ya que nunca tuve que hacer esto antes, pero esto debería ser al respecto. No sé si recibe alguna advertencia de error de fstab (como no puede encontrar la raíz).

Ahora necesita limpiar algunas cosas y desmontar las particiones montadas: Código:

rm /etc/resolv.conf
rm /etc/hosts
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert --rename --remove /sbin/initctl
umount /proc # if this doesn't work try umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo umount /mnt

Y puede reiniciar para ver si funcionó.

URL para el hilo: http://art.ubuntuforums.org/showthread.php?t=1688928

Melvin
fuente
¿Por qué reemplazarías /etc/hostsy eliminarías /sbin/initctl? Está ahí por una razón.
Lekensteyn
Esto parece en última instancia basado en LiveCDCustomization ; algunos pasos no son necesarios para reparar un sistema ya instalado. En particular, no necesita hacer nada con /sbin/initctlo dbus-uuidgeno dpkg-divert. Es posible que deba reemplazarlo /etc/hostspara conectarse a Internet, pero generalmente no, y si lo hace, debe volver a colocar el original. En un sistema instalado (en lugar de un CD en vivo que arranca y luego desempaqueta un sistema de archivos squashfs), no tiene que ejecutarlo update-initramfsni siquiera update-grubdespués de instalar el núcleo.
Eliah Kagan
Además, dado que este procedimiento no instala ningún metapaquete del núcleo, es posible que el núcleo no se actualice correctamente más adelante, a menos que se instale un metapaquete. Además, linux-image-2.6.32-26-genericno será el núcleo correcto para la mayoría de las personas que lo instalen.
Eliah Kagan
0

Después quité los núcleos antiguos de Trusty14.04 ayer (FTR: Yo no quito los dos más recientes!) Mi sistema no arranque más. GRUB mostró

Error: File not found
Error: You need to load the kernel first

No tengo idea de por qué.

Luego seguí las excelentes instrucciones de Eliah Kagan para instalar linux-image-genericdesde un CD en vivo. Instaló 150 MB de kernel nuevo, pero lamentablemente eso no resolvió el problema.

Afortunadamente, encontré esta página . La Boot-Repairherramienta lo hizo bien, mi sistema se está ejecutando nuevamente.

a la izquierda
fuente
0

Solo quería agregar mi experiencia por la que pasé hoy al actualizarme a Willy. Limpié un poco y me encontré con solo memtest. Google me hizo comprender que había eliminado los núcleos. Una restricción que tuve fue una red lenta, por lo que descargar ISO completo no era una opción. Entonces utilicé Ubuntu Minimal CD (solo 40 MB) y lo inicié. Después de detectar la opción de hardware (que me ayudó a conectarme a la conexión inalámbrica) entré en la opción de shell. Seguí las instrucciones de @Lekensteyn y tuve éxito. Sin embargo, hay algunas cosas: tiene que copiar resolv.confantes de ir a chroot o de lo contrario su DNS se arruinará y, dado que el usuario que inició sesión, no hay necesidad de sudo en ninguna parte.

Sé que es antiguo, pero pensé que agregar esta respuesta agregaría valor a aquellos que encontrarían el problema.

Stefano Mtangoo
fuente