Je viens de supprimer «/ bin». Quelle est la meilleure façon de récupérer?

10

Je viens de courir (pas exprès!) rm -rf /bin.

J'ai démarré l'ordinateur et j'utilise Finnix pour essayer de récupérer. J'ai réussi à monter le lecteur et j'ai confirmé que, oui, le /bindossier entier était supprimé.

Est-il possible de récupérer à partir de cela sans réinstaller le système d'exploitation?

Je pense que je pourrais configurer une machine virtuelle avec le même système d'exploitation et la même architecture (version alpha d'Ubuntu Server 11.10, x86) et installer tous les packages que j'avais installés sur le serveur, puis simplement copier le /bindossier.

Est-ce que ça va marcher? Suis-je mieux de recommencer?

Tom Marthenal
la source

Réponses:

15

En général, je pencherais pour une réinstallation (à partir des sauvegardes que vous êtes absolument censé avoir). Mais je me sens hackish, alors voici une autre façon (en supposant que votre système est monté sous /target):

  1. Obtenez une liste de tous les packages installés contenant des fichiers dans /bin:

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

    (Sur mon système Debian Squeeze, c'est un total de 34 paquets, qui sont presque tous de base)

  2. Téléchargez chacun de ces packages (je ne pouvais pas être dérangé par le script de ce bit, alors appuyez simplement sur packages.ubuntu.com et téléchargez-les quelque part sous /target). Si vous êtes chanceux, certains des paquets peuvent encore flotter /target/var/cache/apt/archives.

  3. Pour chaque package, exécutez /target/usr/bin/dpkg -x <package> /target. Je suis assez certain que dpkgtout est autonome de nos jours et ne devrait rien appeler en /binsoi.

Une fois que le système est de retour, vous devez vous assurer et exécuter un apt-get --reinstall install <all the packages from step 1>, car (puisque vous exécutez une pré-version, qui, selon Sysadmin Cat, est un non-non sur les systèmes de production), les versions des packages vous venez d'extraire sont susceptibles d'être différents de ceux qui étaient sur le système avant, et vous voudrez vous assurer que le système sait exactement quoi.

womble
la source
Belle réponse, mais ai-je raté quelque chose? Ne ferait pas dpkg-query -S /binla même chose que votre grep .. | sedstrophe? Si la liste doit être nettoyée pour répertorier un nom de package par ligne, alors cela dpkg-query -S /bin | sed 's/\,\ /\n/g'fonctionne (même si extra: / bin sur la dernière ligne).
Janne Pikkarainen
1
Oui, je le ferais - j'essayais de minimiser la quantité de choses exécutées dans le système cible au cas où tout ce qui était exécuté nécessiterait quelque chose /bin, et je ne voulais pas compter sur quoi que ce soit spécifique à Debian dans le système de sauvetage pour le faire comme général que possible pour les futurs chercheurs.
womble
Il semble que ce soit une liste des seuls utilitaires système essentiels - n'y a-t-il pas aussi d'autres paquets contenant des fichiers /bin? Dois-je réinstaller tous les packages sur mon système, ou uniquement ceux générés à la suite de la liste? (Aussi: merci, je t'aime!)
Tom Marthenal
1
En règle générale, seuls les packages essentiels contiennent des fichiers /bin- la plupart des packages doivent inclure toutes leurs données /usr. Sur mon système, seuls quelques paquets non essentiels (par exemple zsh) figurent dans la liste "contient des éléments /bin". Les votes positifs sont un excellent moyen de montrer l'amour, au fait ...
womble
1
J'ai suivi vos instructions et elles ont parfaitement fonctionné - mon serveur est de nouveau opérationnel. Merci beaucoup pour l'aide!
Tom Marthenal
5

Bien que votre stratégie puisse fonctionner (il y a de bonnes chances pour elle, plus si une fois que vous recopiez le répertoire bin, vous effectuez une réinstallation apt-get de tous les packages de votre système), elle peut générer des problèmes à l'avenir, car vous pouvez obtenir un serveur instable.

Si cela m'était arrivé, je réinstallerais et restaurerais à partir de la sauvegarde quotidienne. Vous avez une sauvegarde quotidienne - un plan de reprise après sinistre - n'est-ce pas?

Dans le cas où vous n'aviez pas de plan de reprise après sinistre, je vous suggère de sauvegarder tous les fichiers de configuration et les données que vous souhaitez conserver et de procéder à une réinstallation. De cette façon, vous serez sûr de finir avec un serveur stable.

hmontoliu
la source
1
deviner depuis qu'il a posté ici comment récupérer le dossier / bin, il n'a pas de sauvegarde.
Goez
Malheureusement, je n'ai pas de sauvegarde quotidienne. Ironiquement, le script bash que j'écrivais à l'époque était un script de sauvegarde quotidien. On dirait que je vais réinstaller - merci pour les conseils.
Tom Marthenal
Pas besoin de réinstaller; voir ma réponse.
womble
Les instantanés du système de fichiers sont extrêmement utiles pour récupérer à partir de choses comme ça. Malheureusement, les systèmes de fichiers ext2 / 3/4 ne les implémentent pas et le faire avec LVM a une grosse pénalité de performance. Si je supprime accidentellement / bin sur ma boîte FreeBSD, je monte simplement un instantané antérieur et je recopie les fichiers dans la version live du système de fichiers. OS X aurait également cela (il est appelé "machine à remonter le temps").
snap
3

J'essaierais de créer une machine virtuelle puis de copier le contenu de /binvotre machine endommagée. Cela devrait vous permettre d'être opérationnel. Exécutez ensuite

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

qui devrait réinstaller tous les packages qui se trouvaient sur votre système.

user9517
la source
1

Le moyen le plus simple, si vous avez accès à la machine, est de monter le système de fichiers, de faire une sauvegarde de toutes vos données (juste à titre de précaution).

Ensuite, vous pouvez réinstaller ubuntu comme une installation normale; en principe, toutes vos données (home dir, etc et var) doivent toujours être là.

Il existe un moyen de réinstaller tous les packages pour que / bin soit repeuplé, mais c'est assez compliqué.

Joris
la source
0

Les fichiers ont disparu. Bien que vous puissiez essayer de "restaurer" des fichiers - je ne le recommanderais pas.

Remarque: je n'exécute pas Ubuntu (et je n'ai pas utilisé les distributions Debian depuis un certain temps). Cependant, j'ai effectué diverses récupérations de distributions dans le passé, suivant un scénario similaire.

Votre meilleur plan d'action:

  • démarrer à partir de liveCD
  • en utilisant liveCD monter votre système complet (disons, /mnt/mint)
  • en utilisant dpkg requête tous les packages installés:
# dpkg --admindir = / mnt / mint / var / lib / dpkg -l
  • installez tous ces packages dans votre destination / mnt / mint en utilisant apt-get en utilisant:
# apt-get -o RootDir = / mnt / mint .... 
  • (alternative n ° 1) Vous devrez peut-être débooster /mnt/mint- pas sûr
  • (alternative # 2) Vous pouvez copier le /bincontenu de liveCD sur /mnt/mint/binmais je ne sais pas si liveCD for mint utilise busybox qui peut compliquer les choses - l'alternative # 1 dans ce cas semble plus sûre.

généralement, cela devrait renvoyer vos fichiers par «réinstallation brute» de tout ce que vous avez. Vous pouvez faire des astuces et des requêtes plus «intelligentes» pour tous les packages qui ont supprimé des binaires dans / bin

Droopy4096
la source