¿Es posible?
Bueno, la mayoría de las utilidades triviales e importantes están instaladas /bin
, y ahora has perdido el acceso a todas ellas. De hecho, si reinicia, su sistema ya no podrá arrancar.
De todos modos, solucionaremos el problema y haremos que /bin
el contenido esté lo más cerca posible de donde estaba. La única diferencia sería algunos enlaces simbólicos que también arreglaremos.
¿Cómo?
Primero, debemos chroot
entrar en su sistema roto, ¡pero con una pequeña diferencia ! Después de eso, obtendremos una lista de los paquetes instalados en su sistema que tienen cualquier archivo instalado en el /bin
directorio, luego solo descargaremos los paquetes necesarios y extraeremos los archivos necesarios /bin
. Entonces habremos terminado.
Por ejemplo, después chroot
, podemos obtener una lista de paquetes que tienen archivos instalados al /bin
usar:
dpkg --search /bin | cut -f1 -d: | tr ',' '\n'
Y también podemos usar:
dpkg --listfiles PACKAGE-NAME | grep "^/bin/" # or awk '$0 ~ "^/bin/
para enumerar los archivos instalados por estos paquetes en /bin
.
Luego, simplemente creamos una lista de todos los paquetes que son necesarios para nosotros, luego los descargamos y los extraemos /bin
con algo como:
xargs apt download < list-packages
dpkg-deb -x PACKAGE .
mv ./bin/* /bin
Sin embargo, debemos usar un script para verificar todos los paquetes instalados en nuestro sistema, porque hacerlo manualmente es una locura.
Entonces escribí un guión que hace todo lo que necesitamos. Encuentra todos los paquetes necesarios para que los restauremos /bin
, nos muestra el nombre de cada paquete y sus archivos relacionados a los que pertenece /bin
. Aquí hay una captura de pantalla:
Al final, elegimos reinstalar todos los paquetes o solo descargar y extraer los archivos necesarios para /bin
(que es la opción recomendada):
Puede obtener una copia de este script o descargarlo directamente .
Empecemos
chroot
Arranque su sistema con un disco en vivo que tenga la misma arquitectura que su Ubuntu instalado, abra una terminal y obtenga acceso de root:
sudo -i
Monta tu root
sistema de archivos (para mí es /dev/sda1
):
mount /dev/sda1 /mnt
Necesitaremos conectividad a Internet, así que copie resolv.conf
desde Ubuntu en vivo a su partición raíz montada:
cp /etc/resolv.conf /mnt/etc/resolv.conf
Ahora copie el script en algún lugar de la partición montada, por ejemplo:
cp /media/ubuntu/usb/restore-bin.sh /mnt/restore-bin.sh
o puedes descargarlo usando wget
, etc. como:
wget https://git.io/v9fRm -O /mnt/restore-bin.sh
Monte otros caminos necesarios:
mount --bind /dev /mnt/dev
mount --bind /sys /mnt/sys
mount -t proc /proc /mnt/proc
Y aquí está la pequeña diferencia : ¿cómo podemos acceder chroot
a un sistema dañado cuando no hay un /bin
directorio allí? ¿Qué shell debemos ejecutar?
Entonces cree un directorio bin temporal. Por ejemplo: nombrado bintmp
dentro de la raíz del sistema roto:
mkdir /mnt/bintmp
Luego une la vida /bin
a eso:
mount --bind /bin /mnt/bintmp
Ingresa al sistema mientras configuras /bintmp/bash
como tu shell de inicio de sesión:
chroot /mnt /bintmp/bash
Exporte /bintmp
como su PATH
variable de entorno:
export PATH=/bintmp:$PATH
Dele al script el bit ejecutable:
chmod +x restore-bin.sh
Ejecute el script:
./restore-bin.sh
Espere a que se complete la búsqueda y luego responda la pregunta que vimos en la captura de pantalla. Comenzará a restaurar el /bin
y ya casi hemos terminado.
Una vez hecho esto, use CTRL+ Dpara salir del chroot
entorno y desmontar las rutas montadas:
umount -R /mnt
Reinicia el sistema.
Restaurando los enlaces dentro /bin
Ahora casi todos los archivos dentro del /bin
directorio están de regreso, excepto alrededor de 5 enlaces simbólicos que son administrados por update-alternatives
.
En su sistema en ejecución, ejecute:
sudo update-alternatives --all
Te hace algunas preguntas; simplemente puede presionar ENTERpara aceptarlos a todos.
Y ahora hemos terminado.
/bin
Ubuntu solo un enlace simbólico en/usr/bin
estos días? ¿Entonces todo lo que necesita hacer es volver a colocar el enlace simbólico?