Restaurer datatables après que zfs détruit

Sur Debian 8,7, j'avais un pool zfs. (évidemment utilisant ZFS sous Linux, pas Oracle ou Solaris zfs)

Il fallait étendre le pool ZFS du miroir sur 2 disques à raidz sur 4 disques. J'ai fait une sauvegarde (une copy des données – c'était ma première erreur)

Je pensais que zpool destroy ne fonctionnerait pas tant que je supprimerais tous les jeux de données (volumes), alors j'ai fait zfs destroy (c'était ma deuxième erreur).

Après cela, j'ai publié 'zpool destroy', répartis tous les 4 disques et j'ai découvert que la sauvegarde était endommagée.

J'ai donc commencé mon aventure de récupération : première chose à propos de ZFS, c'est qu'il est capable d'importer des pools détruits. Après que zpool destroy yourPoolName vous pouvez appeler zpool import -D pour voir la list des pools détruits. Vous pouvez alors l'utiliser en utilisant zpool import -D yourPoolName ou si vous avez détruit plusieurs pools avec le même nom, vous pouvez l'importer par ID, ce qui est montré par zpool import -D .

zpool import -D nécessite des partitions dans leur lieu d'origine. Il doit être exact jusqu'au secteur. J'ai utilisé fdisk pour créer des partitions avec le numéro de début et de fin du secteur. J'ai utilisé cfdisk pour définir le type de partition (car il est plus convivial :)). Ensuite, vous devriez invoquer partprobe pour être sûr que le operating system connaît les partitions modifiées.

zpool import -D fonctionné comme un charme et j'ai eu ma piscine en ligne en parfaite santé à nouveau! … Mais avec les conséquences complètes de zfs destroy – toutes datatables manquaient.

Les magasins ZFS changent en files et système de files dans les transactions, qui sont enregistrées sur le disque dans les groupes de transactions (TXG). Mes searchs supplémentaires ont montré que je devais renvoyer les derniers groupes de transactions.

Il existe 2 façons de renverser les groupes de transactions ZFS :

  1. en utilisant une zpool import spéciale avec option -T
  2. en utilisant zfs_revert-0.1.py

Tout d'abord, vous devez find le dernier TXG. zpool history -il aidé.

Selon la première façon, vous devriez appeler quelque chose comme: zpool import -o readonly=on -D -f -T <LAST-GOOD-TXG> poolName (avec des parameters supplémentaires, si vous le souhaitez: -F , -m , -R ) Malheureusement cette command ne fonctionnait qu'avec le TXG actuel. Revenir à la pré-dernière TXG n'a pas fonctionné et a montré des messages d'erreur comme "l'appareil n'est pas disponible". Il semble que cette fonction fonctionne (ou a travaillé) sur Solaris uniquement. Pitié.

J'ai analysé le code du zfs_revert-0.1.py , il est clair et prometteur. J'ai utilisé cet outil, mais il me semble que je devais supprimer trop de TXG. Après cette zpool import -D n'a plus pu détecter le pool.

Actuellement, j'ai récupéré une des sauvegardes plus anciennes, j'ai dd dumps de 2 disques, qui ont été miroir, mais après zfs destroy et zpool destroy . Il semble que nous allons simplement vivre avec des données de sauvegarde plus ancienne et arrêter un process de récupération supplémentaire. Néanless, je serai heureux d'essayer de récupérer datatables si quelqu'un suggère ce qu'il faut faire dans une telle situation.

Une récupération supplémentaire serait effectuée dans VMWare Workstation, alors je devrai find une façon d'importer zpool dans une machine virtuelle (les identifiants de disque vont probablement changer)

Question Que puis-je essayer ensuite?

Leçons apsockets :

  1. Gardez toujours au less 2 copys de données. Lorsque vous manipulez le stockage principal, vous avez besoin d'une sauvegarde de sauvegarde.
  2. zfs destroy n'est pas nécessaire et très dangereux si vous allez faire zpool destroy toute façon.

Commentaires : Il est évident que lors de la récupération, vous devez complètement arrêter les écritures sur les disques où datatables endommagées ont été stockées.

Commandes utiles : zpool import -D zpool import -o readonly = on -D -f originalPoolName newPoolName zpool status tank

 zpool online dozer c2t11d0 zpool scrub tank zpool history -il zpool export tank zpool import dozer zeepool zpool online dozer c2t11d0 zpool online dozer c2t11d0 zpool scrub tank zpool history -il zpool export tank zpool import dozer zeepool zpool scrub tank zpool online dozer c2t11d0 zpool scrub tank zpool history -il zpool export tank zpool import dozer zeepool zpool history -il zpool online dozer c2t11d0 zpool scrub tank zpool history -il zpool export tank zpool import dozer zeepool zpool export tank zpool online dozer c2t11d0 zpool scrub tank zpool history -il zpool export tank zpool import dozer zeepool 

Liens :

  1. devises

    • zfs_revert-0.1.py
    • zfs_revert-0.1.py DOCS: script de défilement ZFS forensics
  2. Informations sur les ZFS endommagés

    • ZFS sur FreeBSD: récupération de la corruption de données
    • Guide d'administration Oracle Solaris ZFS
    • Importation de pools de stockage ZFS
    • Récupération de données ZFS
    • Besoin d'aide pour récupérer datatables du pool ZFS endommagé
    • Chapitre 9. Dépannage ZFS et récupération de données
    • Questions Bruning: ZFS Forensics – Récupération de files à partir d'un Zpool détruit
    • "Retour dans le time – ou: zpool import -T"
    • Toutes datatables disparues. Accidential zfs destroy
    • Rétablissement du jeu de données ZFS
    • Besoin d'aide pour invalider Uberblock
  3. Importation ZFS

    • zpool import par UUID?
    • ZFS Zpool import change l'identificateur de disque
    • changement de lecteur / dev / devices, confusion zpool
    • L'location du disque ZFS a changé
    • Migration des pools de stockage ZFS
    • ZFS sur les images de disque: la simulation ultime
    • Modifier le numéro de série du disque dur avec VMware