Nuestro grupo de trabajo ha estado mucho tiempo investigando para darle resolución a tu interrogante, te ofrecemos la soluciones por eso deseamos que te resulte de mucha ayuda.
Solución:
Arranque en un CD en vivo (o USB en vivo), monte algunos sistemas, chrootee e instale el kernel. Después de una instalación exitosa del kernel, desmonte los sistemas de archivos.
- Terminal abierta
- Monte la partición de Ubuntu:
sudo mount /dev/sdXY /mnt
-
Monte algunas particiones especiales:
sudo mount --bind /dev /mnt/dev sudo mount --bind /proc /mnt/proc sudo mount --bind /sys /mnt/sys
-
(opcional) Cuando esté conectado a una red, utilice los servidores DNS de su entorno Live (de lo contrario, es posible que no se puedan resolver los nombres de host):
cp /etc/resolv.conf /mnt/etc/resolv.conf
- Chroot en el
/mnt
:sudo chroot /mnt
- Instale el kernel de Linux:
apt-get install linux-image-generic
(no se requiere sudo ya que eres root después de un chroot) -
Después de una instalación exitosa del kernel, saque el chroot y desmonte algunos sistemas de archivos:
exit sudo umount /mnt/sys sudo umount /mnt/proc sudo umount /mnt/dev sudo umount /mnt
- Reinicie y retire el CD o USB:
sudo reboot
Esta procedimiento ampliado explica la mayoría de las complicaciones que podrían ocurrir, incluidos los problemas de conexión a Internet en el 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 tener un /boot
dividir.
No he escrito esto con referencia a ninguno de los otros procedimientos aquí, aunque notará algunas similitudes. Lo basé, vagamente, en el procedimiento aquí (aunque esas instrucciones son para algo bastante diferente, las he adaptado ampliamente y solo se copian algunos comandos, no la prosa).
Eliminó todos los paquetes del kernel y Ubuntu no puede arrancar sin un kernel instalado. Entonces, la solución es arrancar desde un CD / DVD / USB en vivo, chroot
en el sistema instalado e instale un kernel en él.
-
Arranque desde un CD / DVD en vivo de Ubuntu o una unidad flash USB en vivo.
-
Seleccione Prueba Ubuntu (no Instalar Ubuntu).
-
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 al traer esta respuesta Ask Ubuntu en su navegador web, en el sistema de CD / DVD / USB en vivo. Recomiendo encarecidamente hacer eso.
-
Abra una ventana de Terminal con control+Alt+T.
-
En la ventana de Terminal, ejecute este comando para listar sus particiones:
sudo parted -l
Verás algo como esto (pero no será exactamente como esto):
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!
-
Examine la salida 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 tienes uno
ext4
partición, esa es la única. -
Si tienes mas de uno
ext4
partición, probablemente sea la primera. Sin embargo, si el primero es muy pequeño, menos de un gigabyte, entonces podría ser un/boot
partición (recuerda esa también).Tenga en cuenta que si
boot
está listado bajoFlags
tiene muy poco que ver con si una partición es o no una partición separada/boot
dividir. Mi sistema, cuya información se enumera arriba, no no tener una separada/boot
dividir. -
El nombre del dispositivo para la partición comienza con el nombre del dispositivo para la unidad física, que se indica inmediatamente después
Disk
en la segunda línea. Luego, simplemente agregue el número de partición al final de eso. Entonces, el nombre del dispositivo para la partición que contiene mi/
el 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 instalado otro sistema similar a Unix, probablemente solo tendrá una unidad que contenga
ext4
particiones, al menos sin haberlas creado intencionalmente en otra unidad. Si tiene varias unidades conext4
particiones, entonces elext4
partición que contiene tu/
El sistema de archivos probablemente esté en una unidad que además contiene unalinux-swap
dividir. -
Es posible que tu sistema Ubuntu
/
el sistema de archivos está en una partición de tipo diferente aext4
. Cuando esto sucede, casi siempre esext3
y casi siempre en un sistema bastante antiguo. Es muy poco común que este sea el caso, a menos que usted mismo haya configurado intencionalmente las cosas de esta manera.
Recuerde el nombre del dispositivo de la partición que contenía su
/
sistema de archivos (o anótelo). Si es diferente de/dev/sda1
, entonces reemplazarás/dev/sda1
con él en los pasos a continuación.(Si parece que tiene una
/boot
partición, recuerde el nombre del dispositivo para eso también). -
-
Monte el
/
sistema de archivos a/mnt
y monta su/dev
sistema de archivos:sudo mount /dev/sda1 /mnt sudo mount --bind /dev /mnt/dev
-
Compruebe si el sistema Ubuntu roto que está reparando tiene un
/boot
partición que debe montarse por separado. (Si usted es seguro no es así, puede omitir esto).Para comprobarlo, ejecute:
ls /mnt/boot
Si hay salida (como
grub memtest86+.bin memtest86+_multiboot.bin
, pero no necesariamente exactamente eso), entonces el sistema roto/boot
está en la misma partición que su/
y no tienes que montar nada para acceder a él.Pero si no hay salida, entonces tendrá que montar el
/boot
sistema de archivos:sudo mount BOOT-PARTITION /mnt/boot
Reemplazar
BOOT-PARTITION
con el nombre del dispositivo del/boot
partición (consulte el paso 6 anterior). -
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
-
Determine si el acceso a Internet funciona desde el
chroot
porping
ing algún host confiable que se sabe que responde normalmente a los 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 mayoritariamente así, y el número antes
% packet loss
es inferior a 100, entonces la conexión a Internet en elchroot
está trabajando:5 packets transmitted, 5 received, 0% packet loss, time 4006ms
Está funcionando, así que puedes omita el paso 11.
-
Si se ve mayoritariamente así, y el número antes
% packet loss
es 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 unchroot
ed Terminal pestaña / ventana) funciona. Asegúrese de escribir el comando correctamente. Usarwww.google.com
si no lo has estado. -
Si la salida no se parece en nada a la anterior, sino que dice
ping: unknown host www.google.com
, la red todavía no funciona en elchroot
.
-
-
Configure la red en el
chroot
. Omita este paso a menos que tenga ununknown host
error en el paso 10 anterior.Para configurar la red, haga una copia de seguridad del sistema
hosts
archivo, y copiar sobre el sistema de CD en vivohosts
yresolv.conf
archivos. (No tiene que hacer una copia de seguridad de la versión del sistema roto deresolv.conf
, ya que ese archivo se regenera automáticamente sobre la marcha).Abre un nueva pestaña Terminal (control+Cambio+T) o, si lo prefiere, un nueva ventana de Terminal (control+Cambio+norte, o solo control+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
(Los
exit
comando al final cierra la nueva pestaña / ventana.)Repita el paso 10 anterior para asegurarse de que el acceso a Internet funcione ahora desde el
chroot
. Debería. -
Averigüe qué paquete de kernel debe instalarse. Por lo general, esto será
linux-image-generic
. Pero no siempre.Si no está seguro de cuál 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, averigüe ejecutando este comando (en el
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 estarán
linux-image-generic
. (Mira esto, esto y esto.) -
En Ubuntu 12.04 LTS, las posibilidades probables son
linux-image-generic
ylinux-image-generic-pae
. (A diferencia de las versiones anteriores, 12.04 ya no tiene kernels de servidor y de escritorio separados).-
Si el sistema Ubuntu instalado (que está arreglando) es la versión de 64 bits, use
linux-image-generic
. (linux-image-generic-pae
solo se aplica a sistemas de 32 bits).Es posible tener un sistema Ubuntu de 32 bits instalado en una computadora de 32 o 64 bits. Además, es posible que esté utilizando un Live CD 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 64 bits, verifique ejecutando este comando (en el
chroot
, no en una ventana / pestaña de Terminal separada):dpkg-architecture -qDEB_HOST_ARCH_BITS
La salida será
32
o64
.(Tenga en cuenta que
uname -m
es no una forma correcta de encontrar esta información, porque incluso cuando se ejecuta en elchroot
, que te dirá la arquitectura del kernel en ejecución, que es el kernel del sistema de Live CD y no el kernel del sistema instalado (roto).) -
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 RAMlinux-image-generic-pae
si tiene 3 GB de RAM o más.
(Así es como el instalador de Ubuntu elige cuál configurar, desde que el instalador obtuvo la capacidad de instalar kernels PAE. Vea 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, consulte esta página wiki de Ubuntu).
Si no sabe cuánta RAM tiene, ejecute este comando para averiguarlo:
grep MemTotal /proc/meminfo
Eso se muestra en kilobytes. Para convertir a gigabytes, divida por 1.048.576 (10242).
- 3 gigas = 3,145,728 kB
-
-
En las versiones de Ubuntu antes de 12.04, las posibilidades probables son
linux-image-generic
,linux-image-generic-pae
, ylinux-image-server
.- Si está ejecutando un sistema de servidor Ubuntu, use
linux-image-server
. - De lo contrario, siga los consejos anteriores para los sistemas 12.04.
- Si está ejecutando un sistema de servidor Ubuntu, use
-
-
¡Este es el momento que estabas esperando! Instale un kernel en el sistema roto.
(Como antes, excepto donde se indique explícitamente lo contrario, estos comandos se ejecutan en el
chroot
, no en una ventana / pestaña de Terminal separada).apt-get update apt-get -y install linux-image-generic
Reemplazar
linux-image-generic
con cualquier otro paquete de kernel que haya decidido instalar en el paso 12 anterior, si es diferente. -
Si tuviera que realizar el paso 11 para configurar la red en el
chroot
, restaurar lo viejohosts
expediente. Si omitió el paso 11, omita este paso también.Para restaurarlo, ejecute este comando:
cp /etc/hosts.old /etc/hosts
-
Desmontar sistemas de archivos,
exit
saliendo delchroot
:umount /proc || umount -lf /proc umount /sys /dev/pts exit sudo umount /mnt/dev /mnt
-
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 inicio 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 cada posible Sistema Ubuntu, por lo que es posible que haya un error en él que no he identificado.
En el futuro, recomiendo siempre intentar mantener dos núcleos instalados. Es bueno tener dos en caso de que uno de ellos deje de funcionar por cualquier motivo (puede seleccionar el otro en el menú de inicio de GRUB2). Además, si tiene la intención de mantener dos kernels y accidentalmente desinstala uno más de lo que pretendía y reinicia, todavía le queda uno para arrancar.
Finalizando este artículo puedes encontrar las acotaciones de otros desarrolladores, tú además tienes la libertad de insertar el tuyo si te apetece.