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 &
회복 된!"