vendredi 7 décembre 2012

Créer une copie sécurisée de ses données

C'est parti pour une petite explication sur la création d'une copie sécurisée de ses données (enfin à ma façon). Il "existe" 3 règles de sauvegarde simples :
  • 3 copie de sauvegarde des données à conserver, parce qu'une copie peut se corrompre (les CD peuvent s'abîmer assez facilement par exemple) .. ou se perdre bêtement lorsqu'on tente d'y récupérer les données (oups, j'ai supprimé les mauvais fichiers .. Gnééé )
  • 2 support de stockage différents, pour éviter qu'un type de support vous lâche ; par exemple disque dur, mémoire flash (SSD, SD), CD/DVD, bande magnétique, en ligne.
  • 1 site de stockage "hors site", càd pas chez vous : ben oui, si les 3 sauvegardes sont dans la même maison qui brûle, c'est fini.
Ici, l'idée c'est de faire une sauvegarde hors site (chez une personne de la famille) sur un disque dur, avec une petite variante, la sauvegarde sera chiffrée pour ne pas être lisible "hors ligne", en cas de vol par exemple. Cette sauvegarde se fait depuis un autre disque dur qui lui reste avec moi.

Note : je n'ai pas fait de lien dans l'article pour chaque annexe, mais elles font références à des remarques dans cet article, il peut donc être utile d'y jeter un œil.

Grosso-modo, voici les étapes :
  1. ranger la source
  2. la vérifier (chkdsk), faire un audit (fslog)
  3. enlever ce disque source, préparer la destination (ici avec TrueCrypt)
  4. remettre et monter la source en ReadOnly
  5. lancer la copie (environ une bonne nuit pour 750Go)
  6. vérifier cette copie (les fichiers, le filesystem, le conteneur chiffré)
  7. remonter la source en RW
Ranger la source : simplement car c'est plus facile de le faire avant la réplication qu'après ; par exemple voici la racine de mon disque : 
Albums        Jeux             Photos                     !En vrac
Albums - tmp  Jeux Steam       Steam                      !Tmp
Archives      Jeux console     System Volume Information  $RECYCLE.BIN
Docs          Logiciels        Vidéos                     _fslog
ATEPI         Mangas           Wii
Images        Matériel         ZTE Blade
Info          Personalisation  !Backup - Wuala

Vérifier la source, faire un audit : pour ne pas être emmerdé lors de la copie (un fichier corrompu qui gène ou serait copié, ..) et l'audit (contenant la liste des fichiers et leur propriétés) pour garder une trace du contenu à ce moment.
Pour l'audit j'utilise un petit batch perso "fslog" qui me récupère et me compresse pour un lecteur :
  • Tree /A et Tree /A /F : la liste des fichiers et dossiers sous forme d'arbre
  • Dir /A /S : le contenu des répertoires (avec les heures de modification donc)
  • Attrib /D /S : les attributs des fichiers
  • Streams -s et Streams -s -d : enregistre les flux alternatifs avant de les supprimer (indésirables)
Compressé cela me donne un fichier que je date, de quelques mégaoctets. Si ça intéresse quelqu'un je peux le passer.

Enlever la source/préparer la destination : ici la destination est amenée à être formatée, ça serait dommage de se tromper de disque et perdre la source avant même de l'avoir copié .. Donc on l'enlève.
On peut s'occuper de la destination, vérifier que le disque ne contient pas d'erreurs si il n'a jamais été utilisé et finalement préparer le conteneur TrueCrypt.
J'ai choisi de le placer dans une partition de type NTFS Cachée (0x17) que Windows n'essayera pas de monter : j'ai supprimé toute partition du disque, créé une partition simple, changé son type avec un éditeur comme Active@ Partition Manager :
Puis j'ai créé le conteneur TrueCrypt sur cette partition :
  • Créer une volume
  • Chiffer une partition non système
  • choisir le type de volume, choisir le périphérique (de la forme \Device\Harddisk1\Partition1 du coup)
  • Create encrypted volume and format it (ne va pas essayer de convertir un éventuel contenu)
  • choisir le chiffrement/hashage (AES/SHA-512 convient très bien et AES est accéléré matériellement sur mon PC) ; voir le lien en annexe
  • confirmer la sélection, choisir une/des clefs (et ne pas les oublier !)
  • enfin choisir le système de fichier : je recommande NTFS qui est robuste et lisible au minimum partout, en formatage rapide (utile surtout si les traces d'anciens fichier qui pourraient persister peuvent rester avant de se faire écraser), puis c'est parti !

Quand c'est terminé, le conteneur peut être monté et devient accessible via le lecteur choisi.

Remonter la source en ReadOnly : la destination est prête, on peut s'attaquer à la copie, mais a mon avis une étape importante est de bien placer la source en lecture seule pour éviter des erreurs bête telles que supprimer dans la source au lieu de la destination ou inverser source et destination lorsqu'on utilise robocopy en mode miroir (ce qui revient a supprimer la source si la destination est vide).
Sous Windows (7) cela peut être fait assez simplement, en lançant une invite de commande en mode admin, pour accéder a diskpart :
diskpart
list volume
select volume <x>
att vol set readonly

Puis vérifier qu'aucune création/suppression de fichier n'est possible.

Lancer la copie : la source est "sécurisée", la copie peut être faite sans risque ; pour ma part j'ai utilisé Robocopy. Celui-ci est fourni dans Win7, mais bugg..featuré d'un log unicode illisible, j'ai donc utilisé la version précédente, XP026 trouvable dans Easy RoboCopy par exemple (avec un p'tit coup de Winrar/7-zip sur le fichier d'install).
It's not a bug, it's a feature 
Et pour la ligne de commande :
robocopy.xp026.exe H:\ G:\ /MIR /V /ETA /R:3 /XD "H:\$RECYCLE.BIN" "H:\System Volume Information" /X /TS /FP /BYTES /NP /TEE /UNILOG+:C:\tmp\robocopy.log
Explications :
  • Lecteur H source, G destination
  • MIR : G aura exactement le même contenu que H, des fichiers peuvent donc être supprimés sur G si besoin (attention donc à ne pas inverser source et destination)
  • ETA : affiche les heures et un ETA pour chaque fichier (peut servir pour trouver ce qui prend du temps à copier)
  • R:3 : ne pas essayer de copier un fichier plus de 3 fois (! 1 million par défaut, et quand on oublie d'exclure System Volume Information, bah ça bloque)
  • XD : exclut ces chemins (liés à Windows, chaque volume possède sa version)
  • TS : affiche l'horodatage du fichier source
  • FP : affiche le chemin complet de chaque fichier
  • BYTES : affiche la taille en octets, pas d'affichage "humain" en mega/giga
  • NP : pas de progression (pourrit les logs avec des lignes de 1% 2% 3%)
  • TEE : permet d'afficher les informations tout en enregistrant dans un fichier de log
  • UNILOG+ : enregistre l'affichage dans un fichier de log, en unicode ; dans mon cas le fichier faisait ~80Mo non compressé au final
  • ah, et /L permet de faire une simulation de ce qui serait fait.

Plus qu'a laisser tourner une nuit.

Vérifications (fichiers, filesystem, conteneur) : la copie terminée, pour Robocopy la même commande peut être relancée (en changeant le fichier de log de préférence) pour vérifier en 10 mins que la destination est bien un miroir, aucune modification ne devrait alors être faite. On peut aussi lancer un fslog sur la destination et comparer les Tree /A /F qui doivent être identiques à 1-2 lignes près.

Ensuite un chkdsk peut être utile ("Vérifier" dans TC si ça ne fonctionne pas) pour s'assurer que le système de fichier est sain.

Enfin on peut démonter le volume chiffré pour essayer de le remonter et s'assurer qu'il est bien lisible.

Remonter la source en RW : bon, ben c'est fini pour la copie, on peut remonter la source en modification, ce qui donne dans diskpart
att vol clear readonly

And it's done !

A côté, on peut se rendre ce volume accessible à distance en étant relié à un petit serveur linux par exemple. TrueCrypt n'est pas très apprécié sous Linux il semblerait, j'ai utilisé tc-play qui s'installe en 5 secs sous linux (yum install tcplay de mémoire). Ensuite pour s'en servir, pas très compliqué (on retrouve les infos dans la man page) :
tcplay -i -d /dev/sdc1 pour des infos sur le volume et
tcplay -m tc_Teranium -d /dev/sdc1 pour le rendre accessible dans /dev/mapper/tc_Teranium, puis il reste à le monter avec mount /dev/mapper/tc_Teranium /media/Teranium par exemple :)
Dans les 2 cas la clef est demandée pour pouvoir lire le volume.

[alex@Virgo Teranium]$ ls -la /dev/mapper/
lrwxrwxrwx  1 root root      7 Dec  1 15:47 tc_Teranium -> ../dm-2

[alex@Virgo Teranium]$ ls -la /dev/disk/by-uuid/
lrwxrwxrwx 1 root root  10 Dec  1 15:47 6234BB7C34BB51B1 -> ../../dm-2

[alex@Virgo Teranium]$ mount
/dev/mapper/tc_Teranium on /media/Teranium type fuseblk (rw,noexec,nosuid,nodev,allow_other,blksize=4096,default_permissions)

Me voici donc avec 2 copies de mes fichiers à 2 emplacements, et pour les plus importants, j'utilise Wuala, qui fait un chiffrement côté client, de la synchro, backup, .., un client java qui est d'ailleurs disponible sur un peu toutes les plateformes.

3 sauvegardes, 2 supports différents, 3 emplacements différents (au moins, je ne sais pas ce fait Wuala), pas trop mal non ? Et sans forcément se ruiner ..

Les annexes : 
https://fedoraproject.org/wiki/Forbidden_items?rd=ForbiddenItems#TrueCrypt
https://github.com/bwalex/tc-play#readme
https://ask.fedoraproject.org/question/358/tcplay-usb-clean-unmount
http://leaf.dragonflybsd.org/cgi/web-man?command=tcplay&section=8

http://superuser.com/questions/213005/how-to-mount-an-ntfs-partition-read-only-in-windows
http://superuser.com/questions/383333/truecrypt-ripemd-160-vs-sha-512-vs-whirlpool
http://superuser.com/questions/295934/robocopy-unilog-output-is-gibberish
http://christ-offer.blogspot.fr/2011/01/simple-backups-with-robocopy.html
http://technet.microsoft.com/en-us/magazine/2009.04.utilityspotlight.aspx
http://tribblesoft.com/EasyRoboCopy.php (1.0.13)