BTRFS는 스냅샷 없이 삭제된 파일을 복구합니다.

BTRFS는 스냅샷 없이 삭제된 파일을 복구합니다.

4TB 디스크의 모든 파일을 삭제했습니다 /dev/sdb1. 이는 rsync --delete명령을 통해 수행됩니다.

rsync는 중지되기 전에 약 10GB의 데이터를 썼습니다.

물론 디스크에는 스냅샷이 없습니다.

파일 btrfs시스템이 이 폴더에 마운트됩니다 /home/user/Downloads.

그래서 데이터를 복구할 수 있는 방법이 있는지 알고 싶습니다.

지금까지 (디스크를 마운트 해제한 후) 다음을 시도했습니다.

  • btrfs 복구:

btrfs restore -i /dev/sdb1 /mnt/RESTORE/

새 파일은 10GB만 복구되었습니다.

결과:

[...]
Trying root 3001138823168... (1096/1103)
Trying root 853360640... (1097/1103)
Trying root 50626560... (1098/1103)
Trying root 31309824... (1099/1103)
Trying root 31129600... (1100/1103)
Trying root 30900224... (1101/1103)
Trying root 30818304... (1102/1103)
Trying root 30408704... (1103/1103)
Didn't find 'home/user/D*/*
  • 또한 다음 명령을 사용하여 파일을 수동으로 복원해 보았습니다 btrfs restore -t 3001556484096 /dev/sdb1 /mnt/RESTORE/.
parent transid verify failed on 3001556484096 wanted 96918 found 96231
parent transid verify failed on 3001556484096 wanted 96918 found 96231
parent transid verify failed on 3001556484096 wanted 96918 found 96231
Ignoring transid failure
ERROR: root [1 0] level 0 does not match 1

Couldn't read tree root
Could not open root, trying backup super
parent transid verify failed on 3001556484096 wanted 96918 found 96231
parent transid verify failed on 3001556484096 wanted 96918 found 96231
parent transid verify failed on 3001556484096 wanted 96918 found 96231
Ignoring transid failure
ERROR: root [1 0] level 0 does not match 1

Couldn't read tree root
Could not open root, trying backup super
parent transid verify failed on 3001556484096 wanted 96918 found 96231
parent transid verify failed on 3001556484096 wanted 96918 found 96231
parent transid verify failed on 3001556484096 wanted 96918 found 96231
Ignoring transid failure
ERROR: root [1 0] level 0 does not match 1

Couldn't read tree root
Could not open root, trying backup super
  • btrfs-find-root -a /dev/sdb1산출:
Superblock thinks the generation is 96918
Superblock thinks the level is 1
[...]
Well block 3001381945344(gen: 94646 level: 0) seems good, but generation/level doesn't match, want gen: 96918 level: 1
Well block 3001359089664(gen: 94635 level: 0) seems good, but generation/level doesn't match, want gen: 96918 level: 1
Well block 853360640(gen: 94238 level: 0) seems good, but generation/level doesn't match, want gen: 96918 level: 1
  • btrfs rescue super-recover -v /dev/sdb1산출:
All Devices:
        Device: id = 1, name = /dev/sdb1

Before Recovering:
        [All good supers]:
                device name = /dev/sdb1
                superblock bytenr = 65536

                device name = /dev/sdb1
                superblock bytenr = 67108864

                device name = /dev/sdb1
                superblock bytenr = 274877906944

        [All bad supers]:

All supers are valid, no need to recover

어떤 도움이라도 대단히 감사하겠습니다 :)

업데이트 1:

안타깝게도 일부 손상된 파일만 복구할 수 있었습니다. 이것이 내가 단계를 따라 한 일입니다.btrfs-삭제 취소 스크립트.

  • 각 ID를 /tmp/ID파일로 가져옵니다.
btrfs-find-root -a /dev/sdb1 2>&1 | grep ^Well | sed -r -e 's/Well block ([0-9]+).*/\1/' | sort -rn > /tmp/ID
  • ID에서 모든 것을 복원할 수 있습니다.
for i in $(cat /tmp/ID) ; do mkdir /mnt/RESTORE/"$i"; btrfs restore -o -iv -t "$i" /dev/sdb1 /mnt/RESTORE/"$i" 2>&1; done

이제 유일한 해결책은 파일 복구 소프트웨어를 찾는 것 같아요...

답변1

앞서 논의한 것처럼 결국 파일 복구 소프트웨어를 사용하게 되었습니다. 나는 노력했다EaseUS 데이터 복구 마법사그리고UFS Explorer 표준 복구 v9.13둘 다 호환되어야 하기 때문에BTFS.

두 소프트웨어를 모두 무료로 사용해 볼 수 있습니다(이 모드에서는 스캔만 가능하므로 복구할 수 있는지 확인할 수 있습니다).

내 경험상UFS 브라우저더 나은 솔루션입니다. 실제로 스캔 후 삭제된 파일을 원래 이름과 디렉터리 트리와 함께 나열할 수 있습니다.

EaseUS 데이터 복구 마법사파일을 복구할 수 있지만 대부분 이름이 올바르게 지정되지 않았으며 원래 디렉터리 구성을 존중하지 않습니다.

그래서 나에게 가장 좋은 해결책은UFS Explorer 표준 복구. 비용은 약입니다.70$개인용 라이센스의 경우:

https://www.ufsexplorer.com/ufs-explorer-standard-recovery/

관련 정보