dimanche 24 juillet 2011

Récupération de haute volée... !

Tout à l'heure j'ai réussi à effacer un répertoire entier par erreur sous windows suite à une mauvaise manip : y avait un fichier à extraire d'un zip pour installation, donc je double clique sur le zip, développe les répertoires sous le lecteur à gauche, puis copie le contenu du zip (qui n'est pas un exe) vers le répertoire cible. Après je fais retour pour ressortir du zip et là miracle, je me retrouve dans mon répertoire où mes fichiers ont bien été copiés avec le fichier zip sélectionné. Plus qu'à faire Ctrl-Suppr pour dégager ce zip devenu inutile... Je ne lis pas la confirmation, et bin j'aurais dû parce que ce crétin dégénéré avait gardé la sélection du répertoire où j'avais copié mes fichiers sur la gauche, du coup quand j'ai fait Ctrl-Suppr au lieu de virer le zip, il a viré tout le répertoire !

Cool ! Voilà ce que c'est de ne pas utiliser la corbeille sous windoze, pas le droit à l'erreur...
Undelete ntfs ? Super aléatoire, impossible d'éviter les écritures sur le disque même pour tout fermer, et en + dur à récupérer à priori. Le contenu du répertoire était plutôt gros, compter au moins une nuit de transfert pour tout récupérer.

Mais soudain me vient une idée un peu tordue : tout ça a été déplacé à partir d'une partition zfs-fuse sous linux. Et juste avant de déplacer tout ça, je venais de mettre à jour le miroir de la partition sur le disque externe. Donc le disque externe doit toujours avoir les fichiers !
Seul problème : on est pas sensé revenir en arrière sur le contenu d'un miroir. J'aurais pu essayer de faire ça en tentant des options de bas niveau pour reprendre le journal des commits à l'envers, mais c'était aléatoire et compliqué, et j'étais pressé. J'ai préféré la méthode d'urgence:

zpool export zip1 -> on déconnecte tout.
cd
mkdir truc
cd truc
ln -s /dev/sdc2
ça crée un lien vers le disque externe tout seul dans son répertoire, puis
zpool import -d .
-> ça affiche bien mon pool zip1, mais il voit encore les 2 lecteurs online, faut que je rende l'autre inaccessible sinon il va avoir la priorité :
cd /dev
sudo mkdir truc
sudo mv sda9 truc
cd -
zpool import -d .
-> ce coup là c'est bon, il indique bien le pool zip1, un seul lecteur accessible, l'externe, plus qu'à importer :
zpool import -d . zip1
Et ça marche, j'ai récupéré mes fichiers effacés.

Seul problème : comment remettre le lecteur interne à niveau ? C'est pas prévu ce genre de manip normalement, quand j'ai essayé de le remettre online, y a des erreurs qui sont apparues dessus, et si on met le lecteur externe offline le répertoire devient inaccessible !
Ca pue !
Seule solution : avoir les 2 lecteurs online, et lancer un scrub sur le pool :
sudo zpool scrub zip1
ça lance une vérification et réparation du pool, et en effet il a corrigé les erreurs trouvées sur le lecteur interne en se servant de l'externe. Seul problème : c'est un gros pool, et il ne peut pas savoir qu'il n'a pas besoin de tout vérifier, y en a pour 2h là !

Mais apparemment il a commencé son scrub par les données les + récentes du pool, donc si on arrête le scrub ça devrait marcher (le status indique 215 erreurs de corrigées, ça m'étonnerait qu'il en trouve d'autres surtout que ça ne bouge plus).
zpool scrub -s zip1
zpool clear zip1
pour effacer les erreurs comptées et corrigées.
Tout a l'air d'être rentré dans l'ordre.

C'est quand même vachement bien zfs-fuse, mais bon j'ai été chanceux sur ce coup là, normalement je ne tiens pas ce miroir à jour tous les jours. Y a des gens qui utilisent des méthodes moins dangereuses comme des snapshots, mais ça prend de l'espace disque, et j'ai pas d'espace à perdre pour ça...

Mais bon c'était amusant quand même !

Aucun commentaire:

Enregistrer un commentaire