Comment puis-je annuler (récupérer) un fichier supprimé sur une partition BTRFS?
Je n'ai pas encore pris un instantané, je ne peux donc pas utiliser cette fonctionnalité. Je sais qu'il y a certainsOutils pour d'autres systèmes de fichiers Linux, mais Google n'a pas encore été spécifique à BTRFS. Je suis tombé sur une vague mention que BTRFS comprend un outil non limité, mais je ne peux pas le trouver. Avant d'essayer des outils pour un autre système de fichiers, je demande ici.
rsync
mal tournée.Lorsque vos fichiers sont de petit texte brut, j'essaierais de numériser la sortie des "chaînes" dans le périphérique où réside le système de fichiers, c'est-à-dire
strings /dev/sda1 | less
ensuite, utilisez "/" pour rechercher les chaînes qui pourraient être dans ce fichier. Lorsque vous trouvez le texte, délimitez le début de celui-ci avec "M" puis passez à la fin et utilisez "| CAT> Fichier" pour l'enregistrer dans un fichier.
En fait, j'ai fait cela quand j'avais une situation similaire sur un autre système de fichiers sans non -lete, quelques années de retour et cela a fonctionné très bien pour moi.
Si votre conduite BTRFS a des sous-volumes, vous devez transmettre le supplément -r <subvol-id>
Option à btrfs restore
. Malheureusement, les scripts là-bas, comme celui-ci User414471 publié ( http://oelkers.de/tips/undeletebtrfs.sh ), ne pas avoir d'option pour ce faire, mais ils peuvent probablement être adaptés pour ça.
Si vous voulez faire cela à la main, vous devez obtenir le bon sous-volant, soit avec:
# mount /dev/sdXY /mnt/blah
# btrfs subvolume list /mnt/blah
# umount /mnt/blah
ou alternativement avec:
# btrfs restore -l /dev/sdXY | grep ROOT_ITEM
Ensuite, vous utilisez btrfs-find-root
Pour obtenir le numéro de bloc à laquelle vous souhaitez revenir (généralement celui juste avant le maximum de la racine actuelle). Pour cela, vous devez d'abord définir la sous-volume par défaut sur celle duquel vous souhaitez rétablir des fichiers (et revenir à ce changement de suite):
# mount /dev/sdXY /mnt/blah
# btrfs subvolume set-default <subvol-id> /mnt/blah
# umount /mnt/blah
# btrfs-find-root /dev/sdXY
Well block 4321280 seems great, but generation doesn't match, have=400760, want=400984 level 0
...
Well block 9928704 seems great, but generation doesn't match, have=400764, want=400984 level 1
Well block 1094836224 seems great, but generation doesn't match, have=400983, want=400984 level 1
Found tree root at 1095270400 gen 400984 level 1
Vous pouvez enfin utiliser btrfs restore
avec -r <subvol-id>
pour la récupération (initialement avec le --dry-run
argument si vous le souhaitez):
# btrfs restore -r <subvol-id> -t 9928704 -v --path-regex '^/(|dir1(|/dir2(|/dir3(|/.*))))$' /dev/sdXY /tmp/recovery
Plus d'informations sur tout cela ici: https://btrfs.wiki.kernel.org/index.php/restore