그래서 기존 노트북을 새 노트북으로 바꾸는 과정에서 기존 노트북의 하드 드라이브가 물리적으로 손상되었습니다. badblocks
64개의 불량 섹터를 보고합니다. 분할 /
및 파티션이 포함된 2개월 된 Ubuntu GNOME 설정이 있습니다 /home
. 내가 아는 한, 그 안에 있는 섹터 중 일부가 /
손상되었지만 이는 문제가 되지 않습니다. 반면에 /home
파티션은 주석이 달린 ddrescue 로그를 제공합니다.
# Rescue Logfile. Created by GNU ddrescue version 1.17
# Command line: ddrescue -d -r -1 /dev/sdb2 home.img home.log
# current_pos current_status
0x6788008400 -
# pos size status
0x00000000 0x6788000000 +
0x6788000000 0x0000A000 -
first 10 sectors of the ext4 journal
0x678800A000 0x2378016000 +
0x8B00020000 0x00001000 -
inode table entries for /pietro (my $HOME) and a few folders within
0x8B00021000 0x00006000 +
0x8B00027000 0x00001000 -
unknown (inode table?)
0x8B00028000 0x00004000 +
0x8B0002C000 0x00001000 -
unknown (inode table?)
0x8B0002D000 0x001DC000 +
0x8B00209000 0x00001000 -
unknown (inode table?)
0x8B0020A000 0x00090000 +
0x8B0029A000 0x00001000 -
unknown (inode table?)
0x8B0029B000 0x4420E65000 +
debugfs를 사용하여 주석을 달았 icheck
더니 손상된 블록은 모두 사용된 것으로 표시되었습니다. testb
일부 슈퍼블록 통계:
Block size: 4096
Fragment size: 4096
Reserved GDT blocks: 972
Blocks per group: 32768
Fragments per group: 32768
Inodes per group: 8192
Inode blocks per group: 512
그래서 내 질문은 다음과 같습니다
- inode 항목이 아닌 경우 이 5개의 알려지지 않은 블록이 무엇인지 정확히 알 수 있습니까? 나는 그것이 inode 테이블 항목이라고 생각하지만
icheck
말하고 싶지 않습니다. 그렇다면 어떤 인덱스 노드가 있는지 알아낼 수 있나요? - 로그의 처음 10개 블록이 손실되더라도 로그에서 이러한 inode 테이블 항목을 수동으로 복구할 수 있습니까?
나는 모든 파일을 단순한 디렉토리 구조와 중복 파일 fsck
로 버리는 데이터 복구를 수행하고 싶지 않습니다 ./lost+found
감사해요.
답변1
첫 번째 질문의 경우 명령은 debugfs
stats
그룹의 각 부분에 대한 시작 블록이 무엇인지 알려줍니다. 또한, 나는 innumber가 연속적이고 증가해야 한다고 추측했기 때문에 오프셋은 기본적으로 inode 테이블에 추가되었으며 명령은 imap
나에게 첫 번째 innumber를 제공했으며 이는 또한 마지막 불량 섹터인 광산에 대한 나의 의심을 확인시켜주었습니다. 잘못된 그룹에 속해 있다는 것입니다.
byte address block group what first inumber
0x8B00020000 145752096 4448 inode table block 0 36438017
0x8B00027000 145752103 4448 inode table block 7 36438129
0x8B0002C000 145752108 4448 inode table block 12 36438209
0x8B00209000 145752585 4448 inode table block 489 36445841
0x8B0029A000 145752730 4449 inode table block 122 36448161
블록은 4096바이트이고 각 inode 테이블 항목은 256바이트이므로 블록당 16개의 inode가 있습니다. 이제 숫자별로 나열된 80개의 누락된 inode 테이블 항목이 모두 있습니다.
이제 일기 쓰기로 돌아가 보겠습니다. 나는 썼다가제트로그의 각 블록에 정보를 덤프합니다. 로그 슈퍼블록이 없기 때문에 필요한 두 가지 정보가 누락되었습니다.
- 로그가 64비트 블록 번호를 저장하는지 여부
- 저널이 버전 3 체크섬을 사용하는지 여부
다행히 스위치 중 하나(또는 둘 다)를 강제로 켜면 로그의 일부 설명자 블록이 해당 블록을 오버플로하여 이러한 플래그가 설정되지 않았음을 증명합니다.
awk 스크립트( fulllog.awk
) 후에 다음 형식의 로그가 있습니다.
0x0002A000 - descriptors
0x0002B000 -> block 159383670
0x0002C000 -> block 159383671
0x0002D000 -> block 0
0x0002E000 -> block 155189280
0x0002F000 -> block 195559440
0x00030000 -> block 47
0x00031000 -> block 195559643
0x00032000 -> block 195568036
0x00033000 -> block 159383672
0x0002B000 - invalid/data block
0x0002C000 - invalid/data block
0x0002D000 - invalid/data block
0x0002E000 - invalid/data block
0x0002F000 - invalid/data block
0x00030000 - invalid/data block
0x00031000 - invalid/data block
0x00032000 - invalid/data block
0x00033000 - invalid/data block
0x00034000 - commit record
commit time: 2014-12-25 16:53:13.703902604 -0500 EST
이런 식으로 또 다른 awk 스크립트( dumpallfor.awk
)는 모든 블록을 덤프합니다.
byte address block number of journaled blocks
0x8B00020000 145752096 6
0x8B00027000 145752103 10
0x8B0002C000 145752108 206
0x8B00209000 145752585 1
0x8B0029A000 145752730 0
debugfs
ncheck
따라서 마지막 블록은 실제로 누락 되었습니다. 운이 좋으면 .
그래서 나는 블록을 많이 가지고 있습니다. 그리고 그들은 모두 다르게 보입니다! 무엇을 해야 할까요?
나할 수 있다레코드를 실행 취소하여 구조를 의미있게 구문 분석할 수 없는 것 같습니다. 나할 수 있다커밋 레코드 타임스탬프를 따르세요. 하지만 시도하기 전에 각 inode 테이블 블록이 어떻게 다른지 확인하고 싶었습니다. 그래서 내가 썼다또 다른 빠른 프로그램( diff.go
) 알아보려고 합니다.
대부분의 경우 파일마다 타임스탬프만 다르므로 최신 타임스탬프가 있는 파일을 선택할 수 있습니다. 이 작업은 나중에 수행하겠습니다. 다른 모든 파일의 경우 다음을 얻습니다.
36438023 - size differs
36438139 - OSD1 (file version high dword) differs
36438209 - OSD1 differs
글쎄, 그건 좋지 않습니다... 다른 크기의 파일은 문제가 될 수 있으며 두 개의 OSD1 파일을 어떻게 해야할지 모르겠습니다. 또한 debugfs
's를 사용하여 파일이 무엇인지 확인하려고 시도했지만 ncheck
일치하는 파일이 없습니다.
그런 다음 현재 최신 타임스탬프(동일한 저장소 latest.go
)가 있는 블록 덤프를 발견했습니다. 주목해야 할 중요한 점은 커밋 시간의 시간순으로 블록을 스캔했다는 것입니다.이는 블록 번호별 숫자 순서와 반드시 동일하지는 않습니다. 로그가 항상 시간순으로 저장되는 것은 아닙니다.
그러나 최신 블록(커밋 시간 기준)은 실제로 최신 타임스탬프가 있는 블록이라는 것이 밝혀졌습니다!
최신 블록을 시험해 보고 복구할 수 있는지 살펴보겠습니다.
sudo dd if=BLOCKFILE of=DDRESCUEIMG bs=1 seek=BYTEOFFSET conv=notrunc
그러면 내 홈 디렉토리가 돌아왔습니다!
이제 이 세 가지 다른 파일이 무엇인지 알아 보겠습니다.
Inode Pathname
36438023 /pietro/.cache/gdm/session.log
36438209 /pietro/.config/liferea
36438139 /pietro/.local/share/zeitgeist/fts.index
중요한 것은 Liferea의 구성 디렉토리입니다. 하지만 손상된 것 같지는 않습니다.예전에는OSD1 다른 것입니다.
복구할 수 없는 마지막 블록에서 16개의 inode를 찾아보겠습니다.
Inode Pathname
36448176 /pietro/k2
36448175 /pietro/Downloads/sOMe4P7.jpg
36448174 /pietro/Downloads/picture.png
36448164 /pietro/Downloads/tumblr_nfjvg292T21s4pk45o1_1280.png
36448169 /pietro/Downloads/METROID Super Zeromission v.2.3+HARD_v2.4.zip
36448165 /pietro/Downloads/tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
36448173 /pietro/Downloads/1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
36448162 /pietro/.cache/upstart/gnome-settings-daemon.log.6.gz
36448163 /pietro/.cache/upstart/dbus.log.7.gz
36448171 /pietro/.cache/upstart/gnome-settings-daemon.log.3.gz
36448161 /pietro/.local/share/applications/Knytt Underground.desktop
36448166 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 15:47:29.png
36448170 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 16:51:26.png
36448172 /pietro/Documents/Screenshots/Screenshot from 2014-12-03 19:08:54.png
36448168 /pietro/Documents/transactions/premiere to operating transaction 4305747926.pdf
36448167 /pietro/Documents/transactions/transaction 4315883542.pdf
간단히 말해서:
- 날짜 스탬프와 내 채팅 로그에도 있는 내용이 있다는 것을 알고 있기 때문에 무차별 대입 공격이 가능한 내용이 한두 개만 들어 있는 텍스트 파일
- 인터넷에서 일부 이미지를 다운로드했습니다. Firefox 기록에서 URL을 가져올 수 없으면 photorec를 사용할 수 있습니다.
- 인터넷 서핑을 쉽게 다시 할 수 있게 해주는 ROM 해킹 =P
- 로그 파일은 손실되지 않습니다.
- Steam 게임용 .desktop 파일
- 스크린샷; gnome-screenshot이 날짜 스탬프를 메타데이터로 추가한다고 가정하면 photorec을 사용하여 이 정보를 검색할 수 있습니다.
- 은행 계좌 거래 기록; 은행에서 해당 기록을 얻을 수 없는 경우 photorec과 함께 사용할 수 있습니다.
그래서 사상자가 없었던 것은 아니었지만, 완전히 패한 것도 아니었고, 그 과정에서 ext4에 대해 더 많은 것을 배웠습니다. 아무튼 감사 해요!
고쳐 쓰다
이것을 거기에 넣는 것이 좋습니다:
NOT YET /pietro/k2
FOUND /pietro/Downloads/sOMe4P7.jpg
NOT YET /pietro/Downloads/picture.png
FOUND /pietro/Downloads/tumblr_nfjvg292T21s4pk45o1_1280.png
GOOGLEIT /pietro/Downloads/METROID Super Zeromission v.2.3+HARD_v2.4.zip
FOUND /pietro/Downloads/tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
FOUND /pietro/Downloads/1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
UNNEEDED /pietro/.cache/upstart/gnome-settings-daemon.log.6.gz
UNNEEDED /pietro/.cache/upstart/dbus.log.7.gz
UNNEEDED /pietro/.cache/upstart/gnome-settings-daemon.log.3.gz
UNNEEDED /pietro/.local/share/applications/Knytt Underground.desktop
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 15:47:29.png
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 16:51:26.png
NOT YET /pietro/Documents/Screenshots/Screenshot from 2014-12-03 19:08:54.png
NOT YET /pietro/Documents/transactions/premiere to operating transaction 4305747926.pdf
NOT YET /pietro/Documents/transactions/transaction 4315883542.pdf
내가 충분히 이상하지 않다면 다운로드한 이미지는 다음과 같습니다.
sOMe4P7.jpg
("Law & Order" 타이틀 카드 패러디"너클즈와 함께"거기에 추가됨)tumblr_nfjvg292T21s4pk45o1_1280.png
(스크린샷JK 롤링의 트윗)tumblr_mrfex1kuxa1sbx6kgo1_500.jpg
(스포츠 행사로 보이는 광고판에 "Windows가 성공적으로 종료되지 않았습니다."라는 오류 메시지가 표시된 이미지)1*-vuzP4JAoPf9S6ZdHNR_Jg.jpeg
(이 만화)
채팅에서 친구들이 공유한 내용입니다.
계속 업데이트할 것 같은데요? (그렇다고 해서 달라지는 것은 아닙니다...) 모든 것을 복원할 수 있다는 것을 알고 있습니다. 유일한 질문은 =P일 때입니다.