파일이 신비하게 비어 있습니다. 복구 옵션?


9

삭제 된 파일 복구에 대한 여러 게시물을 보았지만이 상황은 다릅니다. 제 아내는 Journal.odt라는 파일을 가지고 있는데,이 파일에는 아이들에 대한 특별한 추억과 같은 중요한 개인 정보가 많이 있습니다. 다른 날에 OpenOffice에서 열려고 시도했을 때 형식에 대해 불평했습니다. 나는 그녀의 취소를 취소했다. 내가하면 cat파일이 완전히 비어 있습니다. ls파일이 0 바이트라고 말합니다.

실수로 파일의 모든 텍스트를 선택하고 백 스페이스를 치고 파일에 여전히 OpenOffice 메타 정보가있는 것을 저장했습니다.

할 일이있을 때까지 디스크를 더 이상 변경하지 못하도록 랩톱을 즉시 종료했습니다.

dd디스크에서 원시 텍스트를 복구 하는 데 사용 하는 것과 같이 과거에는 복잡한 작업을 수행 했지만 여기서 어떻게해야할지 모르겠습니다. odt 파일은 평평한 텍스트가 아니기 때문에 grep을 통해 전체 디스크를 파이프 할 수 없습니다.

어떤 제안이라도 대단히 감사하겠습니다.

또한 누군가 잘못되었을 수있는 것에 대한 통찰력이 있다면 그것을 듣고 싶습니다.

감사


1
파일이 실수로 삭제되거나 무언가가 발생하는 경우에는 다를 수 있지만 텍스트 편집기 등에서 파일을 저장하면 법의학 강도 회복으로 복구 할 수있는 모든 것을 효과적으로 "제자리에"작성합니다. 시스템을 즉시 종료하지 않으면 더 좋았을 것입니다. Open Office에서 "실행 취소"기능으로 작성된 control + z를 두 번 누르면 문제가 해결되었을 것입니다.
Tim

@Tim 나는 당신의 요점을 보았지만 불행히도 파일은 며칠 전에 비워졌습니다. 파일의 마지막 수정 시간은 며칠 전이었습니다. 그녀가 OO에서 열었을 때의 설명에서 그것은 이미 비어있었습니다. 그래도 고마워.
jcbwlkr

2
죽은 말을 쓰러 뜨리지 않거나 쓰러 졌을 때 남자를 쫓아 내려고하지는 않지만이 경험으로 인해 백업 솔루션을 찾아 볼 수있을 것 같습니다. 간단한 Linux 호환 백업 응용 프로그램은 "Areca Backup"을 참조하십시오.
Tim

디스크가 가득 찼습니까? 확인df -h
jippie

@Tim 파일이 0 바이트이면 OO 문서가 아닙니다. Ctrl+Z파일이 OO에 의해 그대로 저장되지 않았기 때문에 아무것도하지 않았습니다. @ jacobwalker0814 ODT 파일은 zip 파일이므로 testdisk와 같은 복구 도구에서 찾을 수 있습니다. 그러나 보장이 없으며, 데이터가 여전히 존재하더라도 많은 다른 zip 파일을 통과해야 할 수도 있습니다. 그리고 미래를 위해, 백업하십시오!
Gilles 'SO- 악한 중지'

답변:


3

ext3 파일 시스템을 사용하는 경우 Carlo Wood 's HOWTO를 따르십시오

몇 마디로

  • ext3grep 사용 $ IMAGE --ls --inode 2 | grep your_file을 사용하여 u가 찾고있는 파일을 찾으십시오 (여기서 $ IMAGE는 / dev / sda2와 같은 ur 파티션입니다)
  • 할당되지 않은 공간의 저널이 포함 된 파일 시스템 블록을 찾으십시오.
  • 이전에 찾은 블록을 참조하는 모든 저널 디스크립터를 찾으십시오.
  • dd를 사용하여 블록을 복사하십시오.
  • 파일을 편집하여 후행 0을 삭제하십시오.
  • 당신이 원하는 곳마다 파일을 고양이

출처에서 :

"수동 복구 장 장

다음 예에서는 작은 파일을 수동으로 복구합니다. 공간을 절약하고 예제를 더 읽기 쉽게하기 위해 부분 출력 만 제공됩니다.

ext3grep $ IMAGE --ls --inode를 사용하여 복구 할 파일 이름을 찾습니다.

$ ext3grep $ IMAGE --ls --inode 2 | grep carlo 3 end d 195457 D 1202352103 2 월 7 일 목요일 03:41:43 2008 drwxr-xr-x carlo

$ ext3grep $ IMAGE --ls --inode 195457 | grep 'bin $'| 머리 -n 1 34 35 d 309540 D 1202352104 2 월 7 일 목요일 03:41:44 2008 drwxr-xr-x bin

$ ext3grep $ IMAGE --ls --inode 309540 | grep start_azureus 9 10 r 309631 D 1202351093 Thu Feb 7 03:24:53 2008 rrwxr-xr-x start_azureus

분명히, inode 309631이 지워지고이 파일에 대한 블록 번호가 없습니다 :

$ ext3grep $ IMAGE --print --inode 309631 [...] Inode가 할당되지 않음 그룹 : 19 세대 ID : 2771183319 uid / gid : 1000 / 1000 모드 : rrwxr-xr-x 크기 : 0 링크 수 : 0 섹터 : 0 (-> 0 간접 블록).

Inode 시간 : 액세스 : 1202350961 = Thu Feb 7 03:22:41 2008 파일 수정 : 1202351093 = Thu Feb 7 03:24:53 2008 Inode 수정 : 1202351093 = Thu Feb 7 03:24:53 2008 삭제 시간 : 1202351093 = Thu 2 월 7 일 03:24:53 2008

직접 블록 :

따라서 저널에서 이전 사본을 찾아 볼 것입니다. 먼저이 inode를 포함하는 파일 시스템 블록을 찾습니다.

$ ext3grep $ IMAGE --node-to-block 309631 | grep 상주 Inode 309631은 오프셋 0xf00에서 블록 622598에 상주합니다.

그런 다음 블록 622598을 참조하는 모든 저널 디스크립터를 찾습니다.

$ ext3grep $ IMAGE --journal --block 622598 [...] 622598 블록을 참조하는 저널 디스크립터 : 4381294 26582 4381311 28693 4381313 28809 4381314 28814 4381321 29308 4381348 30676 4381349 30986 4381350 31299 4381374 32718 4381707 1465 4381709 2132 4381755 294598 607361 6173 4382137 6672 4382138 7536 4382139 7984 4382140 8931

이는 시퀀스 번호 4381294의 트랜잭션이 블록 26582에서 블록 622598의 사본 등을 가짐을 의미합니다. 맨 아래에있는 가장 큰 시퀀스 번호는 디스크에 기록 된 마지막 데이터 여야하므로 블록 8931은 현재 블록 622598과 동일해야합니다. 마지막으로 삭제되지 않은 사본을 찾으려면 맨 아래에서 시작하여 작업해야합니다. 위로 향하여.

이러한 블록을 인쇄하려고하면 ext3grep는 해당 블록이 inode 테이블의 블록임을 인식하고 32 개의 inode의 내용을 모두 인쇄합니다. 그러나 우리는 단지 inode 309631을보고 싶다. 그래서 우리는 똑똑한 grep을 사용합니다 :

$ ext3grep $ IMAGE --print --block 8931 | grep -A15 'Inode 309631'-------------- Inode 309631 ----------------------- 세대 ID : 2771183319 uid / gid : 1000 / 1000 모드 : rrwxr-xr-x 크기 : 0 링크 수 : 0 섹터 : 0 (-> 0 개의 간접 블록).

Inode 시간 : 액세스 : 1202350961 = Thu Feb 7 03:22:41 2008 파일 수정 : 1202351093 = Thu Feb 7 03:24:53 2008 Inode 수정 : 1202351093 = Thu Feb 7 03:24:53 2008 삭제 시간 : 1202351093 = Thu 2 월 7 일 03:24:53 2008

직접 블록 :

이것은 실제로 블록 622598에서 본 것과 동일합니다. 다음으로 삭제 시간이 0 인 것을 찾을 때까지 더 작은 시퀀스 번호를 봅니다. 우리가 찾은 첫 번째 블록은 블록 6073입니다.

$ ext3grep $ IMAGE --print --block 6073 | grep -A15 'Inode 309631'-------------- Inode 309631 ----------------------- 세대 ID : 2771183319 uid / gid : 1000 / 1000 모드 : rrwxr-xr-x 크기 : 40 링크 수 : 1 섹터 : 8 (-> 0 개의 간접 블록).

Inode 시간 : 액세스 : 1202350961 = Thu Feb 7 03:22:41 2008 수정 된 파일 : 1189688692 = Thu 9 월 13 일 15:04:52 2007 Inode 수정 된 : 1189688692 = Thu 9 월 13 일 15:04:52 2007 삭제 시간 : 0

직접 블록 : 645627

위의 내용은 자동화되어 있으며 명령 줄 옵션 --show-journal-inodes를 사용하여 훨씬 빠르게 수행 할 수 있습니다. 이 옵션은 inode가 속한 블록을 찾은 다음 저널에서 해당 블록의 모든 복사본을 찾은 다음 요청 된 inode 만 각 블록 (각각 32 개의 inode를 포함)에서 인쇄하여 중복을 제거합니다. :

$ ext3grep $ IMAGE --show-journal-inodes 309631 그룹 수 : 75 최소 / 최대 저널 블록 : 1115/35026 저널 디스크립터로드 중 ... 완료 저널 트랜잭션 4381435 랩핑이 완료되었습니다. 일부 데이터 블록에서이 트랜잭션이 손실되었을 수 있습니다. 저널의 설명자 수 : 30258; 분 / 최대 시퀀스 번호 : 4379495/4382264 저널에있는 inode 309631의 사본 :

-------------- Inode 309631 ----------------------- Generation Id : 2771183319 uid / gid : 1000/1000 모드 : rrwxr-xr-x 크기 : 0 링크 수 : 0 섹터 : 0 (-> 0 개의 간접 블록).

Inode 시간 : 액세스 : 1202350961 = Thu Feb 7 03:22:41 2008 파일 수정 : 1202351093 = Thu Feb 7 03:24:53 2008 Inode 수정 : 1202351093 = Thu Feb 7 03:24:53 2008 삭제 시간 : 1202351093 = Thu 2 월 7 일 03:24:53 2008

직접 블록 :

-------------- Inode 309631 ----------------------- Generation Id : 2771183319 uid / gid : 1000/1000 모드 : rrwxr-xr-x 크기 : 40 개의 링크 수 : 1 섹터 : 8 (-> 0 개의 간접 블록).

Inode 시간 : 액세스 : 1202350961 = Thu Feb 7 03:22:41 2008 수정 된 파일 : 1189688692 = Thu 9 월 13 일 15:04:52 2007 Inode 수정 된 : 1189688692 = Thu 9 월 13 일 15:04:52 2007 삭제 시간 : 0

직접 블록 : 645627

파일은 실제로 작습니다 (단 하나의 블록). 이전에 표시된대로이 블록을 dd로 복사합니다.

$ dd if = $ IMAGE bs = 4096 count = 1 skip = 645627 of = block.645627 1 + 0의 1 + 0 레코드 출력 4096 바이트 (4.1kB) 복사, 0.0166104 초, 247kB / s

그런 다음 파일을 편집하여 후행 0을 삭제하거나 처음 40 바이트 (파일의 지정된 크기)를 복사하십시오.

$ dd if = block.645627 bs = 1 count = 40 of = start_azureus 40 + 0의 40 + 0 레코드가 40 바이트 (40B) 복사 됨, 0.000105397 초, 380kB / s

$ 고양이 start_azureus cd / usr / src / azureus / azureus ./azureus &

회복 된!"


나는 그것을보고 싶어하지만 링크는 죽은 것 같습니다.
jcbwlkr

3
나에게 죽은 것처럼 보이지 않습니다.
Mr Lister

네, 어느 쪽이든 액세스 할 수 있습니다.
java_xof

지금은 잘 작동합니다. 확실히 이전에는 아니었다. 누가 알아? 고마워, 자바 내가 볼게
jcbwlkr

문제 없습니다,이 도움 u, 공격 없음 희망하지만 나는 상호 작용 아내 <-> 컴퓨터에 대해 알고있다;)
java_xof

2

testdisk와 photorec을 사용해보십시오 .하지만 글을 이해하는 방법은 아마 정기적 인 백업의 가치를 배우기 어려운 방법 일 것입니다. 또한 하드 디스크가 더 이상 변경되지 않도록 CD로 부팅 할 수도 있습니다. 개인적으로 System Rescue Disk 를 좋아 하지만 주로 명령 줄 기반입니다.


1

디지털 법의학을위한 특별한 Linux 배포판 인 Caine을 사용하십시오. 파일 및 하드 디스크 복구를위한 많은 도구입니다.


감사. 그 배포판을 살펴보고 무언가가 있는지 알아볼 것입니다. 특정 도구 또는 문제에 접근하는 방법에 대한 권장 사항이 있습니까? 여기서 문제는 파일이 삭제되지 않아서 많은 도구가 해결하는 것입니다. 내용을 잃어 버렸습니다.
jcbwlkr

1
Open Office는 때때로 이전에 저장된 문서를 포함하는 숨겨진 파일을 만듭니다. 운이 좋으면 예를 들어 "extundelete"또는 "testdisk"를 사용하여 복구를 시도 할 수 있습니다. cgsecurity.org/wiki/TestDisk
PsyStyle

~ / .openoffice.org / 3 / user / backup / 또는 ~ / .libreoffice.org / 3 / user / backup /에서 찾아보십시오. 삭제 한 민감한 항목이 아직 존재하지 않도록이 디렉토리를 지우는 스크립트를 작성했습니다.
Joe
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.