NTFS로 포맷된 2TB 외장 HDD( /dev/sda
)가 있습니다. 최근에 파일을 이동할 때 "입력/출력 오류"가 발생하고 명령으로 이상한 출력이 표시되기 시작했습니다 ls
.
...
??????????? folder_1
? ? ? folder_2
ls: cannot access 'folder_3': Input/output error
ls: cannot open directory 'folder_3': Input/output error
...
새로운 4TB HDD( )가 있어서 다음 명령을 사용하여 디스크가 고장나기 전에 파일을 복사 /dev/sdb
해 보았습니다.ddrescue
ddrescue -f -r3 /dev/sda /dev/sdb mapfile
명령은 오류 보고 없이 약 6시간 만에 완료되었지만 "입력/출력 오류"가 새 드라이브에 여전히 존재합니다. 즉, ls
새 드라이브에서 실행하려고 하면 여전히 이전과 동일한 출력이 제공됩니다.
Windows에서 새 드라이브를 열려고 했더니 외장 드라이브에 "수리해야 할" 항목이 있다는 경고가 나타났습니다(이전 드라이브에서도 동일한 작업을 수행했음에도 불구하고). 기회를 주려고 했습니다. Windows에서 새 드라이브를 "복구"한 후에는 더 이상 "입/출력 오류" 메시지가 표시되지 않지만 폴더는 사라졌습니다. 즉, 새 드라이브에는 folder_1
없습니다 folder_2
.folder_3
이것이 출력이다smartctl -a /dev/sda
ID# ATTRIBUTE_NAME FLAG VALUE WORST THRESH TYPE UPDATED WHEN_FAILED RAW_VALUE
1 Raw_Read_Error_Rate 0x000b 100 100 050 Pre-fail Always - 0
2 Throughput_Performance 0x0005 100 100 050 Pre-fail Offline - 0
3 Spin_Up_Time 0x0027 100 100 001 Pre-fail Always - 2107
4 Start_Stop_Count 0x0032 100 100 000 Old_age Always - 320
5 Reallocated_Sector_Ct 0x0033 100 100 050 Pre-fail Always - 0
7 Seek_Error_Rate 0x000b 100 100 050 Pre-fail Always - 0
8 Seek_Time_Performance 0x0005 100 100 050 Pre-fail Offline - 0
9 Power_On_Hours 0x0032 100 100 000 Old_age Always - 103
10 Spin_Retry_Count 0x0033 106 100 030 Pre-fail Always - 0
12 Power_Cycle_Count 0x0032 100 100 000 Old_age Always - 189
191 G-Sense_Error_Rate 0x0032 100 100 000 Old_age Always - 19
192 Power-Off_Retract_Count 0x0032 100 100 000 Old_age Always - 105
193 Load_Cycle_Count 0x0032 100 100 000 Old_age Always - 1166
194 Temperature_Celsius 0x0022 100 100 000 Old_age Always - 15 (Min/Max 13/46)
196 Reallocated_Event_Count 0x0032 100 100 000 Old_age Always - 0
197 Current_Pending_Sector 0x0032 100 100 000 Old_age Always - 0
198 Offline_Uncorrectable 0x0030 100 100 000 Old_age Offline - 0
199 UDMA_CRC_Error_Count 0x0032 200 253 000 Old_age Always - 0
220 Disk_Shift 0x0002 100 100 000 Old_age Always - 0
222 Loaded_Hours 0x0032 100 100 000 Old_age Always - 53
223 Load_Retry_Count 0x0032 100 100 000 Old_age Always - 0
224 Load_Friction 0x0022 100 100 000 Old_age Always - 0
226 Load-in_Time 0x0026 100 100 000 Old_age Always - 181
240 Head_Flying_Hours 0x0001 100 100 001 Pre-fail Offline - 0
~에 따르면이 테이블, "괜찮아" 보이는군요(아마도).
그래서 내 질문은 다음과 같습니다.
- 기존 드라이브에서 "모든" 데이터를 복구할 수 있는 방법이 있습니까?
- 1.의 대답이 "아니요"인 경우. 어떤 "다음 단계"를 취해야 합니까? 새 드라이브에서 동일한 오류를 찾는 데 사용하는 것만 으로
ddrescue
는 해결책이 아닌 것 같습니다. rsync
새 드라이브를 특정 파일 시스템(예: exFAT)으로 포맷한 다음 이전 드라이브의 모든 파일(예:)을 새 드라이브에 복사해야 합니까?
답변1
수집한 팁에 따르면 문제는 디스크 물리적 수준이 아니라 파일 시스템 구조 수준에 있는 것 같습니다. 일부 데이터 구조(예: 디렉터리)가 손상되었습니다. I/O 오류는 커널 파일 시스템이 불가능한 위치에 있는 디스크에 액세스하도록 지시하는 디렉터리 구조의 이탈 포인터에서 비롯된 것으로 추측할 수 있습니다.
나는 당신처럼 시작하겠습니다 (별도의 디스크로 복구). 귀하가 다른 복사본에서 복원을 시도하는 동안 두 복사본 중 하나를 읽기 전용 백업으로 유지하겠습니다.
그런 다음 액세스 가능한 파일을 새 파티션(ntfs 또는 다른 파티션)에 복사합니다.
그런 다음 일부 하위 수준 도구를 통해 나머지 부분을 복원해 보겠습니다. 나는 ntfs 관련 도구를 모르지만 존재한다고 확신합니다. 데이터 가치가 높으면 전문 서비스를 시도해 볼 수 있습니다. 복구 가능한 데이터는 확실히 복구할 수 있습니다.
직접 시도해 보고 싶다면 데이터 파일 자체가 손상되지 않고 디스크에서 연속되어 있다는 가정 하에 .jpeg 및 .mov 파일을 포함하는 디렉터리가 손상되더라도 해당 파일을 recoverjpeg
저장할 수 있습니다.recovermov
다른 데이터 파일을 복구하려면 흑마법이 필요합니다. 여기에는 파일 서명(명령에서 사용하는 서명 file
)을 검색하기 위한 일부 ntfs 관련 도구나 대용량 파일 바이너리 편집기를 찾고 데이터를 검색하여 이를 식별하고 파일의 시작과 끝을 찾는 작업이 포함됩니다(디스크에 있다고 가정).