Se sua unidade btrfs tiver subvolumes, você precisará passar a opção -r <subvol-id>
adicional para btrfs restore
. Infelizmente os scripts lá fora, como o que o user414471 postou ( link ), não tem uma opção para fazer isso, mas eles provavelmente podem se adaptar a isso.
Se você quiser fazer isso manualmente, você precisa obter o subvol-id correto, com:
# mount /dev/sdXY /mnt/blah
# btrfs subvolume list /mnt/blah
# umount /mnt/blah
ou alternativamente com:
# btrfs restore -l /dev/sdXY | grep ROOT_ITEM
Depois, você usa btrfs-find-root
para obter o número do bloco ao qual deseja reverter (geralmente o número imediatamente anterior ao número máximo que é a raiz atual). Para isso, você precisa primeiro definir o subvolume padrão para o qual deseja reverter os arquivos (e reverter essa alteração depois):
# 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
Finalmente, você pode usar btrfs restore
com -r <subvol-id>
para a recuperação (inicialmente com o argumento --dry-run
, se desejar):
# btrfs restore -r <subvol-id> -t 9928704 -v --path-regex '^/(|dir1(|/dir2(|/dir3(|/.*))))$' /dev/sdXY /tmp/recovery
Mais informações sobre tudo isso aqui:
link