Que faire en cas de grosse c....ie rm -Rf *

Damned [code]

rm -Rf *[/code]malencontreux et irrécupérable (récupérer est un autres souci). Que faire? Bien sûr tout dépend du répertoire sous lequel ça a été fait. Tout ce qui suit est fait sous root, la c…ie ayant déjà été faite, pas la peine de prendre des précautions tardives. Commencez par aller prendre un remontant et un café et rappelez vous qu’une grosse bourde devient une catastrophe à cause de ce qu’on a fait dans les 5-10 minutes qui ont suivies la bourde. Vous pouvez aussi aller sur Pause Café et trouver un troll et une tête de turc sur laquelle vous allez pouvoir vous défouler, Anthropo s’est révélé parfait pour moi dans ce rôle :slightly_smiling:, qu’il en soit remercié.

  1. Sous /: là c’est foutu, il ne reste rien. Si vous êtes adepte de Bernadette, allez à Lourdes, il vous restera Lisieux pour pleurer car ça ne marchera pas :slightly_smiling:

  2. Sous /tmp, /var/tmp, /var/run ça ne devrait pas être grave, recréer le répertoire si il a disparu (attention au mode 1777 pour /tmp ET /var/tmp) et redémarrer.

  3. Sous /boot, vous avez juste perdu votre noyau donc ne reboutez pas (réfléchissez si vous ne voyez pas pourquoi). Réinstallez tranquillement votre noyau ET grub ou lilo. Pour grub, il faut tout réinstaller, pour lilo, c’est (comme souvent :slightly_smiling:) plus simple, un petit «lilo» après la réinstallation du noyau suffit.

  4. Sous /usr, ça n’est pas trop grave, il suffit de faire une réinstallation de tous les paquets, or -joie, bonheur- la liste des paquets est récupérable. Il est même possible de ce contenter de réconstruire la branche /usr en décompressant manuellement les paquets dans un coin avec dpkg-deb et de recopier le /usr, ça évitera une reconfiguration de tous les paquets (innocente a priori mais on ne sait jamais). Cela peut même se faire directement sur la machine et via un CD-Live ou USB-live en récupérant préalablement un binaire dpkg-deb et en se souvenant que les paquets sont souvent dans /var/cache/apt/archives (damned vous avez fait «apt-get clean» avant!! Tant pis pour vous!). Il est donc une bonne idée d’avoir ce binaire dans un coin genre sous /root.

Donc, le plus simple, la liste des paquets se récupère par

# export LST=$(grep -B 1 "Status: install ok installed" /var/lib/dpkg/status | grep Package | sed -e '1,$s/Package: *//') si on a tous les paquets dans /var/cache/apt/archives, ça deviet plus simple: Il faut tout d’abord retrouver la commande ar, celle ci est dans /usr MAIS il y a busybox, faites donc sous /bin

# ln -s busybox arVous avec désormais ar de disponible
Créez un repertoire /tempo puis faites

Là vous avez un répertoire usr convenable, vous le déplacez sous / et vous avez récupéré votre répertoire /usr.

Dans le cas où vous n’avez pas tous les paquets, il suffit de se procurer les paquets apt, gnupg, dpkg et peut être gpgv puis de faire la manoeauvre avec ces paquets. Ensuite un

[code]# apt-get install -d $(grep -B 1 “Status: install ok installed” /var/lib/dpkg/status | grep Package | sed -e ‘1,$s/Package: *//’)

[/code]

permet de récupérer les autres paquets et de continuer la manoeuvre.


Les cas recensés à partir d’ici correspondent au cas où vous êtes mal, la machine s’est figé ou ne marche pas bien, ce qui suit se fait donc à partir d’un live CD ou d’une live-USB (vous connaissez clefagreg:
?)

  1. Sous /bin, /lib c’est plus ennuyeux, vous avez bouffé tous les binaires, la machine ne va pas démarrer et ne continue plus. Cependant ça n’est pas la cata quand même. Vous avez la liste des paquets installés en faisant

ls *.list | sed -e '1,$s/.list//'dans le répertoire

Il vous suffit donc de récuperer l’arborescence correspondante en décompressant les paquets correspondants via dpkg-deb: Si les paquets sont dans un répertoire /paquets vous faites

Sous /tmp, vous avez les répertoire lib, bin, … recopiez celui que vous avez effacé. A priori, votre machine est réparée.

Les cas recensés à partir d’ici correspondent au cas où vous êtes vraiment mal:

  1. Sous /etc, ah… là, ça me parait foutu, vous avez paumé toute votre configuration, vous êtes comme si vous deviez réinstaller votre machine (une bonne idée est donc de conserver ce répertoire dans un coin, il est petit souvent). À noter que
    $ dpkg --get-selections > /root/paquets_installes
    vous permet d’avoir les paquets installés. Je suggère donc
  • soit la récupération d’un /etc d’une machine équivalente, à ce moment là

grep "^/etc" *.list | sed -e '1,$s/^.*://' | sort -u sur la machine abimée permet de connaître les fichiers sous /etc installés par les paquets (sauf ceux constitués). Pensez que des fichiers n’y figure pas: ceux que vous avez ajoutés ou qui ont été crées avec des scripts (/etc/modules, /etc/resolv.conf, /etc/fstab, /etc/hosts, /etc/hostname, …).

  • Soit une réinstallation en utilisant la liste des paquets installés.
  1. Sous /var (fut mon cas). Au début on se dit, pas si grave, puis l’étendue des dégats apparait: la base de dpkg, la base d’apt, la base d’aptitude ont disparues. De plus, les données de tous les services ont sautées (votre site, votre base mysql, vos logs, …). Allez pleurer un coup ou taper sur Anthropo sur Pause Café puis revenez. Vous pouvez récupérer des choses:
  • La liste des paquets peut se retrouver à l’aide de /usr/share/doc: Un répertoire -> Un paquet du même nom. La correspondance n’est pas tout à fait exacte mais suffit.
  • Recopiez le répertoire /etc ailleurs
    Personnellement, j’ai fait comme suit:
  • Installation d’un debootstrap dans un répertoire /tmp/lenny
  • Récopie de l’arborescence obtenue sur le disque
  • Recopie des sauvegardes des sites, mysql et de etc
  • Réinstallation de tous les paquets
    (2 heures)
    Il faut penser à plusieurs choses:
  • Un debootstrap directement sur le disque ne fonctionne pas, debootstrap veut un répertoire vide au démarrage, une réinstallation par dessus peut être efficace, je n’ai pas essayé.
  • Les fichiers /etc/hosts, /etc/resolv.conf, /etc/network/interfaces, /etc/hostname, /etc/fstab, /etc/modules (?), /etc/crontab, /etc/passwd,shadow,gshadow et group sont démolis. Il faut également réinstallé console-setup.
  • Il faut penser à reconfigurer l’heure (tzdata).

(Question: la simple recopie du /var du debootstrap et la réinstallation des paquets aurait-elle suffit? À mon avis oui)

[À PEAUFINER]

Voilà un T&A qui risque de servir…
Bien qu’étant encore en “développement”, je me permet de signaler quelques coquilles dans ce tuto :

[quote]4) Sous /usr, ça n’est pas trop grave, il suffit de faire une réinstallation de tous les paquets, or -joie, bonheur- la liste des paquets est récupérable. Il est même possible de ce contenter de réconstruire la branche /usr en décompressant manuellement les paquets dans un coin avec dpkg-deb et de recopier le /usr, ça évitera une reconfiguration de tous les paquets (innocente a priori mais on ne sait jamais). Cela peut même se faire directement sur la machine et via un CD-Live ou USB-live en récupérant préalablement un binaire dpkg-deb et en se souvenant que les paquets sont souvent dans /var/cache/apt/archives (damned vous avez fait «apt-get clean» avant!! Tant pis pour vous!). Il est donc une bonne idée d’avoir ce binaire dans un coin genre sous /root.
[/quote]
De plus, je pense que ça serait pas mal de mettre un gros machin en rouge du style “attention ne faites pas cette commande” pour éviter tout accident, cf junichirô dans le fil d’Anthropo :smt003 …
A+

La référence Debian contient aussi beaucoup d’astuces à ce sujet.
Par exemple, si on perd /etc il y a pas mal à récupérer (passwd, group …) dans /var/backups (à condition de ne pas avoir aussi perdu /var !) : debian.org/doc/manuals/refer … -rm-passwd

[quote=“fran.b”](Question: la simple recopie du /var du debootstrap et la réinstallation des paquets aurait-elle suffit? À mon avis oui)[/quote]Confirmation peut-être : debian.org/doc/manuals/refer … ver-status

[quote=“ursus”]La référence Debian contient aussi beaucoup d’astuces à ce sujet.
Par exemple, si on perd /etc il y a pas mal à récupérer (passwd, group …) dans /var/backups (à condition de ne pas avoir aussi perdu /var !) : debian.org/doc/manuals/refer … -rm-passwd

ce qui me pousse en générale à me demander la meilleur façon de partitionner avec tous séparés ou juste une partition / et un /home à côté ainsi que la SWAP qui vas bien :confused:

d’ailleurs je me demande si un fil n’existe pas sur la façon de partitionner ces disques à la sauce debian de façon éfficace ?

[quote=“Clochette”]d’ailleurs je me demande si un fil n’existe pas sur la façon de partitionner ces disques à la sauce debian de façon éfficace ?[/quote]c.f. le manuel de sécurisation Debian : debian.org/doc/manuals/secur … .html#s3.2

Merci bien il m’a échappé ce topic 8) je regarde ça de suite :smt003

sinon en prevention le mieux reste de se faire un alias a rm.

genre un cp du truc dans un ~/corbeille

c’est le premier truc qu’on nous a appris en iut info :smiley:

Quand le but est de libérer de la place disque, ça marche moyen…

certes…j’y avait jamais pense :smiley:

Moins intrusif que le -i, mais tout aussi efficace pour eviter les gaffes !
Et ne JAMAIS utiliser de -f lorsque ce n'est pas justifie !

Moins intrusif que le -i, mais tout aussi efficace pour eviter les gaffes !
Et ne JAMAIS utiliser de -f lorsque ce n’est pas justifie !

Je sais tout cela, le but n’est pas de dire comment ne pas faire la c…rie, mais que faire quand elle est faite. Le «rm -I» amène une quantité industrielle de «Y» même si il y en a moins que le -i donc devient tout aussi pénible. La meilleure idée serait de faire un wrapper indiquant quels fichiers vont être supprimés parmi une liste de fichiers déclarés importants mais bon, j’ai la flemme et le propos n’est pas là…

C’etait plutot a la proposition de byx de creer un alias que mon message repondait…
C’est vrai qu’on s’est eloigne du sujet qui ne cherche pas a eviter la cnnr*e mais plutot a la corriger…
Fin du HS, je ne reposterai que si j’ai quelque chose a apporter au sujet initial !

[quote=“vv221”]alias rm='rm -I'
Moins intrusif que le -i, mais tout aussi efficace pour eviter les gaffes !
Et ne JAMAIS utiliser de -f lorsque ce n’est pas justifie ![/quote]

% alias rm='rm -rf'
:laughing:

J’aime vivre dangereusement (et puis avec un NAS qui me récupère tout régulièrement et les fichiers style prog ou .tex/.odt en svn et zsh qui me demande confirmation quand ça va supprimmer un rep entier ça deviens moins dangereux).

@fran.b : Tu compte installer apt dans /root ? Pourquoi ne pas se limiter à dpkg ?

[quote=“MisterFreez”][
@fran.b : Tu compte installer apt dans /root ? Pourquoi ne pas se limiter à dpkg ?[/quote]
Moi, la machine en question était un serveur que je venais d’installer (le Fit-PC slim). Il était impératif qu’elle fonctionne le plus rapidement possible. J’ai suivi ce que j’ai dit pour la partie 7 (rm -Rf /var/* donc) et ça a marché sans souci (co…rie à 22h05, serveur de nouveau opérationnel à 00h10). Donc pour moi, le pbm est passé…

Je ne peux plus éditer ce post…
ah si!

Y’a pas une coquille dans ta commande de la partie 4) ?.. enfin… il me semble (je n’ai que testé d’avoir la liste des paquets à partir du fichier status (ou status-old… :wink: ), pas leur réinstall… mais bon… ça devrait “correspondre”…):
remplacer le | sed -e '1,$s/Package: *//)' par | sed -re '1,$s/^Package: *//') … tu fermes la parenthèse trop tôt… :wink: :whistle: :wink:

édit: pour le test j’ai remplacé apt-get(…) par un “echo”:

$ echo $(grep -B 1 "Status: install ok installed" /var/lib/dpkg/status | grep Package | sed -re '1,$s/^Package: *//')

:006

Exact… Je rectifie

:wink: … et du coup, simple curiosité intéressée (et complètement HS… 'fin, p’tet’pas…), dans le cas de notre ami keb83 (recuperer-sa-debian-apres-suppression-foireuse-de-paquets-t41678.html), tu penses que ça pourrait marcher avec le fichier status-old? :unamused: :whistle: :unamused: (c’est surtout pour savoir si j’ai vu juste en fait… :wink: …)

édit: je pense que t’as fait la même coquille juste un peu plus haut… sur ton “export”… (haaaaa, ces matheux et les parenthèses… :005 :016 :005 ):# export LST=$(grep -B 1 "Status: install ok installed" /var/lib/dpkg/status | grep Package | sed -e '1,$s/Package: *//')au lieu de )’ pour la fin… :wink:

:006