Acabo de eliminar "/ bin". ¿Cuál es la mejor manera de recuperarse?

10

Acabo de correr (¡no a propósito!) rm -rf /bin.

He arrancado la computadora y estoy usando Finnix para intentar recuperarme de ella. He logrado montar la unidad y confirmó que sí, /binse elimina toda la carpeta.

¿Es posible recuperarse de esto sin reinstalar el sistema operativo?

Estoy pensando que podría configurar una máquina virtual con el mismo sistema operativo y arquitectura (Ubuntu Server 11.10 alpha release, x86) e instalar todos los paquetes que había instalado en el servidor, luego simplemente copie la /bincarpeta.

esto funcionara? ¿Estoy mejor simplemente comenzando de nuevo?

Tom Marthenal
fuente

Respuestas:

15

En general, me inclinaría hacia una reinstalación (de las copias de seguridad que se supone que debe tener). Pero me siento hackeo, así que aquí hay otra forma (suponiendo que su sistema esté montado debajo /target):

  1. Obtenga una lista de todos los paquetes instalados que tienen archivos en /bin:

    grep ^/bin/ /target/var/lib/dpkg/info/*.list | sed 's%^.*/\([^/\.]*\).list%\1%' >/tmp/pkglist
    

    (En mi sistema Debian Squeeze hay un total de 34 paquetes, casi todos los cuales son básicos)

  2. Descargue cada uno de esos paquetes (no podría molestarme en escribir este bit, así que simplemente acceda a packages.ubuntu.com y descárguelos en algún lugar debajo /target). Si tienes suerte, algunos de los paquetes aún podrían estar flotando /target/var/cache/apt/archives.

  3. Para cada paquete, ejecute /target/usr/bin/dpkg -x <package> /target. Estoy bastante seguro de dpkgque todo es autónomo en estos días, y no debería llamar a nada en /binsí mismo.

Una vez que tenga el sistema nuevamente en funcionamiento, debe asegurarse y ejecutar una apt-get --reinstall install <all the packages from step 1>, porque (dado que está ejecutando una versión preliminar, que Sysadmin Cat dice que es un no-no en los sistemas de producción) las versiones de los paquetes es probable que sea diferente de los que estaban en el sistema anteriormente, y querrá asegurarse de que el sistema sepa exactamente qué es qué.

womble
fuente
Buena respuesta, pero ¿me estoy perdiendo algo? ¿No dpkg-query -S /binharía lo mismo que tu grep .. | sedestrofa? Si la lista necesita ser limpiada para enumerar un nombre de paquete por línea, entonces dpkg-query -S /bin | sed 's/\,\ /\n/g'funciona (aunque tiene extra: / bin en la última línea).
Janne Pikkarainen
1
Sí, lo haría: estaba tratando de minimizar la cantidad de cosas que se ejecutan en el sistema de destino en caso de que lo que sea que se ejecutara necesitara algo /bin, y no quería confiar en nada específico de Debian en el sistema de rescate para hacerlo como lo más general posible para futuros buscadores.
womble
Parece que esta es una lista de solo las utilidades esenciales del sistema, ¿no hay también otros paquetes que tienen archivos /bin? ¿Debo reinstalar todos los paquetes en mi sistema, o solo los generados como resultado de la lista? (También: ¡gracias, te amo!)
Tom Marthenal
1
Por lo general, solo los paquetes esenciales tendrán archivos /bin; la mayoría de los paquetes deberían incluir todos sus datos /usr. En mi sistema, solo un par de paquetes no esenciales (por ejemplo zsh) están en la lista "tiene cosas en /bin". Los votos a favor son una excelente manera de mostrar amor, por cierto ...
womble
1
Seguí tus instrucciones y funcionaron perfectamente: mi servidor está funcionando nuevamente. ¡Muchas gracias por la ayuda!
Tom Marthenal
5

Si bien su estrategia puede funcionar (hay buenas posibilidades para ello, más si una vez que copia el directorio bin, realiza una reinstalación de apt-get de todos los paquetes en su sistema), puede generar problemas en el futuro porque puede obtener Un servidor inestable.

Si eso me hubiera sucedido, volvería a instalar y restaurar desde la copia de seguridad diaria. Tiene una copia de seguridad diaria, un plan de recuperación ante desastres, ¿no?

En caso de que no tenga un plan de recuperación ante desastres, le sugiero que haga una copia de seguridad de todos los archivos de configuración y los datos que desea conservar y continúe con la reinstalación. De esa manera, estará seguro de que terminará con un servidor estable nuevamente.

hmontoliu
fuente
1
Suponiendo que desde que publicó aquí cómo recuperar la carpeta / bin no tiene una copia de seguridad.
Goez
Desafortunadamente, no tengo respaldo diario. El script de bash que estaba escribiendo en ese momento era, irónicamente, un script de respaldo diario. Parece que voy a reinstalar, gracias por el consejo.
Tom Marthenal
No es necesario reinstalarlo; mira mi respuesta
womble
Las instantáneas del sistema de archivos son extremadamente útiles para recuperarse de cosas como esta. Desafortunadamente, los sistemas de archivos ext2 / 3/4 no los implementan y hacerlo con LVM tiene una gran penalización de rendimiento. Si accidentalmente elimino / bin en mi cuadro de FreeBSD, solo monte una instantánea anterior y copie los archivos nuevamente a la versión en vivo del sistema de archivos. OS X supuestamente también tiene esto (se llama "máquina del tiempo" allí).
Snap
3

Intentaría crear una VM y luego copiar el contenido de /binsu máquina dañada. Eso debería ponerte en marcha. Entonces corre

dpkg --get-selections  | awk '{print $1}' | xargs -l1 aptitude reinstall

que debería reinstalar todos los paquetes que estaban en su sistema.

usuario9517
fuente
1

La forma más fácil, si tiene acceso a la máquina, es montar el sistema de archivos, hacer una copia de seguridad de todos sus datos (solo como medida de precaución).

Luego puede reinstalar ubuntu como una instalación normal; en principio, todos sus datos (directorio de inicio, etc. y var) aún deberían estar allí.

Hay una manera de reinstalar todos los paquetes para que / bin se vuelva a llenar, pero eso es bastante complicado.

Joris
fuente
0

Los archivos se han ido. Si bien puede intentar "recuperar" archivos, no lo recomendaría.

Nota: No ejecuto Ubuntu (y no he usado distribuciones de Debian por un tiempo). Sin embargo, he realizado varias recuperaciones de distribuciones en el pasado, todas siguiendo un escenario similar.

Tu mejor curso de acción:

  • arranque desde liveCD
  • usando liveCD monte su sistema en algún lugar (digamos /mnt/mint)
  • usando dpkg consulta todos los paquetes instalados:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • instale todos esos paquetes en su destino / mnt / mint usando apt-get usando:
# apt-get -o RootDir = / mnt / mint .... 
  • (alternativa n. ° 1) Es posible que deba desescapar /mnt/mint- no estoy seguro
  • (alternativa n. ° 2) Puede copiar el /bincontenido de liveCD a, /mnt/mint/binpero no sé si liveCD para mint utiliza busybox, lo que puede complicar las cosas; la alternativa n. ° 1 en ese caso parece más segura.

generalmente esto debería devolver sus archivos mediante "reinstalación bruta" de todo lo que tiene. Puede hacer un poco más de trucos "inteligentes" y consultar todos los paquetes que dejaron caer binarios en / bin

Droopy4096
fuente