질문
/home/username
실수로 내 에서 여러 파일을 삭제했습니다 rm
. 엔터키를 누르자마자 실수를 깨달았지만, 피해가 발생했다. 즉시 전체 디스크 이미지를 생성하여 sudo dd if=/dev/sda of=/media/username/external_drive/image.iso
다른 컴퓨터에 복사하고 데이터 복구를 위한 먼 길을 준비했습니다. 그러다가 어디서부터 시작해야 할지 몰랐다는 것을 깨달았습니다.
내가 뭘 한거지
나는 온라인에서 몇 가지 가이드를 읽었고 마침내 extundelete /dev/partition_to_recover_from --restore-directory /path/to/restore
이것이 가장 유망한 솔루션이라는 것을 알았고 그래서 시도해 보았습니다.
제가 직면한 첫 번째 문제는 LUKS를 사용하여(OS 설치 중) 드라이브를 암호화하고 이를 해독해야 한다는 것이었습니다. 좀 더 조사한 후 다음 명령을 사용하여 파티션을 준비했습니다(여기서는 실제 볼륨 그룹 이름을 실제 값에서 변경했습니다 <my_pc_name>-vg
) pc-vg
.
$ sudo kpartx -a -v image.iso # map the disk image partitions
add map loop0p1 (254:0): 0 997376 linear 7:0 2048
add map loop0p2 (254:1): 0 2 linear 7:0 1001470
add map loop0p5 (254:2): 0 975769600 linear 7:0 1001472
$ sudo cryptsetup luksOpen /dev/mapper/loop0p5 img # unlock the partition with my data
Enter passhprase for /dev/mapper/loop0p5:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 465,8G 0 loop
├─loop0p1 254:0 0 487M 0 part
├─loop0p2 254:1 0 1K 0 part
└─loop0p5 254:2 0 465,3G 0 part
└─img 254:3 0 465,3G 0 crypt
├─pc--vg-root 254:4 0 464,3G 0 lvm
└─pc--vg-swap_1 254:5 0 980M 0 lvm
[...omitting other lsblk output...]
$ sudo vgchange -a y pc-vg
2 logical volume(s) in volume group "pc-vg" now active
그런 다음 복원을 시도하십시오
$ sudo extundelete /dev/mapper/pc--vg-root --restore-directory /home/username/path/to/restore
NOTICE: Extended attributes are not restored.
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
The partition should be unmounted to undelete any files without further data loss.
If the partition is not currently mounted, this message indicates
it was improperly unmounted, and you should run fsck before continuing.
If you decide to continue, extundelete may overwrite some of the deleted
files and make recovering those files impossible. You should unmount the
file system and check it with fsck before using extundelete.
Would you like to continue? (y/n)
그런데 파티션이 마운트되지 않아 df
이를 확인하였습니다. 또한 .sudo fsck -N
/dev/sdaX
의심이 들어서 시스템을 재부팅하고 위의 단계를 반복했습니다. 저는 똑같은 출력을 받았고, 원본 디스크 이미지의 복사본을 다루고 있다는 점을 고려하여(데이터 손실에 대비해 백업을 가지고 있었습니다) 이번에는 이라고 대답했습니다 y
. 결과 :
$ sudo extundelete /dev/mapper/pc--vg-root --restore-directory /home/username/path/to/restore
NOTICE: Extended attributes are not restored.
WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
The partition should be unmounted to undelete any files without further data loss.
If the partition is not currently mounted, this message indicates
it was improperly unmounted, and you should run fsck before continuing.
If you decide to continue, extundelete may overwrite some of the deleted
files and make recovering those files impossible. You should unmount the
file system and check it with fsck before using extundelete.
Would you like to continue? (y/n)
y
Loading filesystem metadata ... extundelete: Extended attribute has an invalid value length when trying to examine filesystem
다른 조사도 해봤지만 이것이 무엇을 의미하는지 알 수 없습니다.
질문
않도록 최선을 다해 노력하겠습니다XY 문제.
내 데이터를 복구하려고 할 때 올바른 일을 하고 있습니까? 그렇다면 extundelete
불만 사항은 무엇이며 어떻게 해결됩니까? 그렇지 않다면 어떻게 Debian의 LUKS 암호화 디스크에서 데이터를 복구할 수 있습니까?
추가 정보가 필요한 경우 문의하시기 바랍니다.
첨부된:«최근 백업에서 복원확실히예 »가 정답입니다. 저도 알고 있습니다 =).
데이터 손실이 발생하기 며칠 전에 집 전체를 백업했습니다.그런a n00b), 하지만 20시간 넘게 일한 일을 잃었고 다시 되찾고 싶었습니다.
고쳐 쓰다
fsck
파티션에서 데이터를 실행해 보았는데 결과는 다음과 같습니다.
$ sudo fsck -r /dev/mapper/pc--vg-root
fsck from util-linux 2.36.1
e2fsck 1.46.2 (28-Feb-2021)
/dev/mapper/pc--vg-root: recovering journal
Clearing orphaned inode 7077927 (uid=1000, gid=1000, mode=0100600, size=0)
Clearing orphaned inode 7077925 (uid=1000, gid=1000, mode=0100600, size=65536)
Clearing orphaned inode 19794062 (uid=1000, gid=1000, mode=040775, size=4096)
Clearing orphaned inode 18366502 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 18366515 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 18366503 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 18366504 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 18366511 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 18366512 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 18351755 (uid=1000, gid=1000, mode=0100444, size=15383322)
Clearing orphaned inode 18351757 (uid=1000, gid=1000, mode=0100444, size=12832)
Clearing orphaned inode 18366521 (uid=1000, gid=1000, mode=040755, size=4096)
Clearing orphaned inode 7078039 (uid=1000, gid=1000, mode=0100600, size=0)
Clearing orphaned inode 7077945 (uid=1000, gid=1000, mode=0100600, size=65536)
Clearing orphaned inode 11927591 (uid=0, gid=0, mode=0100644, size=147932)
Clearing orphaned inode 18096551 (uid=0, gid=0, mode=0100644, size=2456)
Clearing orphaned inode 11535970 (uid=0, gid=0, mode=0100644, size=335240)
Setting free inodes count to 29879660 (was 29737485)
Setting free blocks count to 41417686 (was 20072881)
/dev/mapper/pc--vg-root: clean, 553620/30433280 files, 80298026/121715712 blocks
/dev/mapper/pc--vg-root: status 0, rss 6876, real 38.344677, user 0.482391, sys 0.290328
파일 시스템이 어떻게 작동하는지 전혀 모르지만 지난 몇 시간 동안 읽은 내용에 따르면 fsck가 복구하려는 데이터를 방금 삭제한 것 같습니다. 지금은 extundelete
별 불만 없이 잘 돌아가고 있지만
$ sudo extundelete /dev/mapper/pc--vg-root --restore-directory /home/username/path/to/restore
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 3715 groups loaded.
Loading journal descriptors ... 0 descriptors loaded.
Searching for recoverable inodes in directory /home/username/path/to/restore...
0 recoverable inodes found.
Looking through the directory structure for deleted files ...
0 recoverable inodes still lost.
No files were undeleted.
덮어쓴 데이터를 복구할 수 없다는 것을 알고 있지만 실수로 100GB 이상을 삭제했고 디스크 이미지를 생성하기 전에는 모두 덮어쓰일 것 같지 않습니다 dd
...
답변1
또한 sudo는
fsck -N
/dev/sdaX에서만 작동하기를 원합니다.
이것은 말이 되지 않습니다. e2fsck
모든 블록 장치, 심지어 이미지 파일에서도 작동합니다.
이미지에 되돌릴 수 없는 쓰기를 수행하지 않아야 합니다. 스왑 볼륨을 삭제하고 VG의 여유 공간을 활용하여 pc--vg-root
스냅샷()을 생성하는 것을 권장합니다 lvcreate --snapshot ...
. 그런 다음 e2fsck
실제 데이터가 아닌 스냅샷에 대해 실행할 수 있습니다 . 문제가 발생하면 스냅샷을 버리고 다시 시작할 수 있습니다.
나는 익숙하지 않다 extundelete
. 빠른 검색에서는 지원되어야 한다고 표시되지만 ext4
메시지는 WARNING: EXT3_FEATURE_INCOMPAT_RECOVER is set.
지원되지 않거나 마음에 들지 않는 것처럼 들립니다 ext4
. 이거 엄청 오래된 버전인가요 extundelete
?
따라서 먼저 실행 e2fsck
하고 Extended attribute has an invalid value length
메시지가 여전히 존재하면 최신 버전을 얻으십시오 extundelete
.
이 전체 질문은 LUKS 및 암호화와 전혀 관련이 없으므로 질문 제목을 변경하는 것이 좋습니다.
답변2
나는 잃어버린 파일 중 많은(어쩌면 전부)을 복구했습니다 photorec
. 찾을 수 없는 포럼 페이지에서 이에 대해 읽었고 "이 다른 도구도 사용해 보자"고 생각했습니다.
나는 달렸다
$ sudo kpartx -a -v image.iso # map the disk image partitions
add map loop0p1 (254:0): 0 997376 linear 7:0 2048
add map loop0p2 (254:1): 0 2 linear 7:0 1001470
add map loop0p5 (254:2): 0 975769600 linear 7:0 1001472
$ sudo cryptsetup luksOpen /dev/mapper/loop0p5 img # unlock the partition with my data
Enter passhprase for /dev/mapper/loop0p5:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 465,8G 0 loop
├─loop0p1 254:0 0 487M 0 part
├─loop0p2 254:1 0 1K 0 part
└─loop0p5 254:2 0 465,3G 0 part
└─img 254:3 0 465,3G 0 crypt
├─pc--vg-root 254:4 0 464,3G 0 lvm
└─pc--vg-swap_1 254:5 0 980M 0 lvm
[...omitting other lsblk output...]
$ sudo vgchange -a y pc-vg
2 logical volume(s) in volume group "pc-vg" now active
파티션을 준비한 다음
$ sudo photorec
EXT3와 관련하여 처음 오류가 발생했을 때 기억이 잘 나지 않습니다. 나는 달리기를 시도했고 sudo fsck -r /dev/mapper/pc--vg-root
질문 업데이트에 쓴 것과 동일한 결과를 얻었습니다. 그러나 그것은 photorec
효과가 있었습니다. 내가 정확히 무엇을 했는지는 모르지만 효과가 있었으므로 따르지 않겠습니다.
두 번째 실행에서는 photorec
마법사를 따랐습니다. 최선의 결과를 얻을 수 있다고 생각되는 옵션을 선택했을 뿐이고, 전체 이력이 없으므로 제가 확신하는 옵션만 적어보겠습니다.
- 올바른 장치 선택(
/dev/mapper/pc--vg-root
) - 올바른 파티션을 선택하십시오(
ext4
). - 올바른 파티션 파일 시스템을 선택하십시오(
[ ext/ext3 ] ext2/ext3/ext4 filesystem
). [ Free ] Scan for file from ext2/ext3 unallocated space only
삭제되지 않은 파일을 복구할 필요가 없으므로 할당되지 않은 공간( )만 검사하도록 선택합니다.- 복구된 파일을 쓸 위치 선택
어떤 시점에서는 복구하고 싶은 파일 형식(텍스트 및 PDF)도 선택했습니다.
몇 시간의 분석 및 복구를 통해 임의의 이름과 올바른 확장자를 가진 파일(예: 올바른 이름의 텍스트 파일로 저장한 것으로 알고 있는 파일)로 채워진 수백 개의 하위 디렉터리( , 증분 번호는 어디에 있습니까?) photorec
를 얻었 습니다. 임의의 파일 몇 개를 검사했는데 삭제되지 않은 텍스트 파일(예: 포함), 겉보기에 임의의 이름으로 이름이 바뀌고 하위 디렉터리에서 무작위로 정렬된 파일 까지 포함하여 디스크의 모든 텍스트 파일을 다시 가져온 것 같습니다. 총 80GB. 하지만 적어도 나는 그것들을 돌려받았어요.recup_dir.<nnn>
<nnn>
f582010347.txt
/etc/ssh/sshd_config
앞으로 며칠 동안 자동으로 필터링하여 필요한 것을 찾으려고 노력할 것입니다. 나는 몇 가지 빠른 시도를 했고 좋은 결과를 얻었습니다
$ grep --ignore-case --recursive -B5 -A5 'string' restore_path
어디:
string
복원하려는 파일에 존재하는 것으로 알고 있는 문자열입니다.restore_path
photorec
복구 파일을 작성하기 위해 지정한 경로입니다
--text
옵션을 추가한 후 grep
복구해야 할 일부 PDF도 식별할 수 있었습니다. 그러나 PDF는 바이너리 파일이기 때문에 PDF를 모두 가져오지 못할 수도 있다는 것을 알고 있습니다.
결과적으로는 제가 상상했던 것보다 훨씬 더 나은 결과가 나왔습니다. 내가 배운 교훈은 정기적인 백업이 나 자신으로부터 나를 보호하지 못한다는 것입니다. 또한 rm
덜 위험한 항목 대신 별칭을 사용하는 것이 좋습니다(이것흥미로워 보이네요).