2009-09-20 5 views
2

간헐적으로 작동하는 결함있는 하드 드라이브가 있습니다. 콜드 부팅 후 약 30-60 초 동안 액세스 할 수 있으며 하드 드라이브가 실패합니다. 이 드라이브를 새롭고 더 큰 디스크에 백업 할 소프트웨어를 기꺼이 쓸 것입니다. GNU/Linux 또는 Windows에서 개발할 수 있습니다. 상관 없습니다.간헐적 인 하드 드라이브를 일관성있게 읽는 방법?

문제는 : 얼마 동안 디스크에만 액세스 할 수 있으며 큰 파일이 있고 은 복사 할 시간보다 더 오래 걸릴 것입니다.. 이런 이유로 전체 하드 디스크를 더 작은 조각으로 백업 할 생각입니다. 비트 토 런트 같은 것입니다. 다른 세트를 읽으 려하기 전에 몇 메가 바이트를 읽고 저장하겠습니다. 내 메인 루프는 다음과 같습니다.

while(1){ 
    if(!check_harddrive()){ sleep(100ms); continue; } 
    read_some_megabytes(); 
    if(!check_harddrive()){ sleep(100ms); continue; } 
    save_data(); 
    update_reading_pointer(); 
    if(all_done){ break; } 
} 

문제는 check_harddrive() 함수입니다. maximus API/라이브러리 호환성을 위해 C/C++에서이 글을 기꺼이 쓸 것입니다. 파일 핸들러가 여전히 유효한지 확인하기 위해 파일 핸들러를 일부 제어해야하며 잘못된 데이터를 반환해야하지만 복사 프로세스 중에 드라이브에 오류가 발생하면 리턴해야합니다.

"하드 코드 된"하드웨어 예외를 악용하면 C#이 최상의 결과를 제공합니까?

또 다른 방법은 내 하드 드라이브의 전원을 껐다가 켜고이 시간에만 읽는 프로그램을 코딩하고 전원을 끌 때 시간을 알려주는 시간을 측정하는 것입니다.

이 경우 어떻게 하시겠습니까? 이미이 작업을 수행하는 도구/유틸리티가 있습니까?

아, 광학 미디어가 불량 인 here을 읽는 데 훌륭한 앱이 있습니다.이 제품은 IsoPuzzle이라고 불리며, 내 문제가 아닌 무언가를 공유하고 싶습니다.

! EDIT!

몇 가지 설명. 나는 가정 사용자, 대학 컴퓨터 공학 학생, 나는 그것을 복구하는 데 수천 달러를 쓰는 것보다 데이터를 잃어 버리는 편이 낫다. 하드 드라이브는 Seagate의 보증 대상이지만 Warranty 보증 기간이 5 년이므로 시간이 다할 때까지 가능한 한 모든 것을 시도하고 싶습니다.

콜드 부팅이란 말은 몇 초 후에 전원이 꺼지면 부팅된다는 의미입니다. 핫 부팅은 컴퓨터를 재부팅하는 것이며, 콜드 부팅은 몇 초 기다렸다가 다시 부팅하는 것입니다. 문제의 하드 디스크는 내장형이지만 SATA이므로 전원 케이블을 분리하고 잠시 기다렸다가 다시 연결하면됩니다.

지금까지는 내가 robocopy와 함께 갈 것입니다. 나는 그것을 어떻게 사용할 수 있는지 찾고 있습니다. 코드를 작성할 필요가 없지만 스크립트를 작성할 필요가 없다면 훨씬 쉽습니다.

! EDIT2!

명확하지 않지만 드라이브는 Seagate 7200.11입니다. 그것은 그것이 나쁜 펌웨어를 가지고 있으며, 간단한 펌웨어 업데이트 (이 버그가 나타나지 않은 이후)로 항상 고칠 수있는 것은 아니라고합니다. 드라이브는 물리적으로 작동 상태에서 100 %이며, 펌웨어가 망가져 몇 초 후에 무한대의 사용 상태가됩니다.

+0

이것은 ServerFault에 속할 수 있습니까? 반면에, 질문은 확실히 프로그램을 작성하는 방법을 묻습니다, 그래서 StackOverflow의 임무를 받고 않습니다. –

+0

하드 드라이브를 직접 처리하는 대신 RMA 나 데이터 복구 전문가에게 보내는 방법을 배우고 싶습니다. 이것은 확실히 소프트웨어 질문입니다. – Spidey

답변

2

가장 간단한 방법은 전체 디스크 이미지를 복사하는 것입니다. 리눅스에서는 디스크가 블럭 장치로 표시됩니다 (예 : /dev/sdb1).

읽기 오류가 나타날 때까지 디스크 이미지 복사를 시작하십시오. 그런 다음 사용자가 디스크를 "수리"하고 마지막 위치에서 읽기를 기다립니다.

파일 디스크 이미지를 쉽게 마운트하고 내용을 읽을 수 있습니다. -o loop 옵션 (mount)을 참조하십시오.

사용하기 전에 디스크를 냉각하십시오. 나는 그것이 도움이된다고 들었다.

+0

C에서 간단한 FILE 처리기로/dev/sdb1을 열 수 있습니까? 그런 다음 어떤 종류의 변수를 사용하여 fseek에 대한 포인터를 제어하고 eof까지 계속 읽습니다. 장치 파일이 내 eof를 제공합니까? 마운트에 대해서는 루프 장치를 사용하여 파티션을 마운트 할 수 있습니다. 루프 장치로 전체 장치 (예 :/dev/sdb)를 마운트 한 다음 다른 루프 장치로 파티션을 마운트 할 수 있습니까? 장치 이미지 파일을 마운트 할 때 어떻게 파티션에 액세스 할 수 있습니까? 저는 호기심에서 이걸 묻고 있습니다. 어쨌든이 디스크에는 단지 하나의 파티션 만 있습니다. – Spidey

+0

물론, 전체 파티션을 열고 파일로 읽을 수 있습니다. 블록 장치이므로 fseek 및 eof 작업을 비롯한 일반적인 기능을 사용할 수 있습니다. Afaik를 사용하면 파티션이있는 전체 디스크를 마운트 할 수 없으며 단지 구체적인 파티션 만 마운트 할 수 있습니다. – Viliam

6

먼저 하드웨어 각도에서이 작업을 수행합니다. 외부 드라이브입니까? 그렇다면 다른 경우에 시도해 볼 수 있습니까?

콜드 부팅 작업을 언급 한 다음 종료합니다. 이 열이 관련이 있습니까? 냉동실 같은 곳에서 오랫동안 하드 드라이브를 사용해 보셨습니까?

소프트웨어 측에서는 소량의 데이터를 읽는 반복 된 루프에 의해 업데이트 된 진행률 카운터에 대한 두 번째 스레드를 확인한 후 정의 할 시간 초과를 통해 실패 신호를 보낼 수 있습니다.

+1

+1, 그가 문자 그대로 "콜드 부팅"을 의미하는 경우, 냉장고/냉동고에 두는 것은 그다지 어렵지 않습니다. 한 번 드라이브가 정반대로 작동했습니다. 드라이브가 충분히 따뜻해지기 전에 몇 번 부팅하면 블루 스크린이 나타납니다. – GRB

+1

+1 동의, 먼저 HW 문제를 해결하려고합니다. – Justicle

+0

하드 드라이브를 냉장고에 넣고 몇 시간 동안 가방에 넣어두면 백업 과정에 충분히 시간이 걸릴 것이라고 들었습니다. 그러나 다시, 나는 하드웨어 문제가 아니라 펌웨어 문제라고 생각한다. – Spidey

2

robocopy ("강력한 파일 복사"). Robocopy는 명령 줄 도구이며 네트워크 중단을 허용하고 이전에 중단되었던 위치에서 복사를 다시 시작할 수 있습니다 (불완전한 파일은 1980-01-01에 해당하는 날짜 스탬프로 기록되며 복구 기록을 포함하므로 Robocopy는 어디에서 계속할 것인지를 압니다). 당신은 알고

... 난 "게으른을"인 ... 여기 것은 내가 할 것 인 것이다 좋아 :

나는이 간단한 스크립트를 작성합니다. 그들 중 하나는 robocopy (지속성 기능을 해제 한 상태로)를 시작하고 복사를 시작하는 반면 다른 하나는 주기적으로 확인합니다 (아마 루트 디렉토리의 내용을 나열하려고 시도하고 그보다 몇 초 이상 걸리면 죽은 것입니다). .. 다시 ..) 드라이브가 여전히 작동하는지 여부와 HDD가 작동을 멈 추면 기계를 다시 시작합니다. 시스템을 재부팅 할 때 로그인 및 자동 로그인을 설정 한 후 시스템을 재시동하면 시스템이 자동으로 계속됩니다.

+0

나는 robocopy 접근법을 좋아하지만 천 번 이상처럼 시스템을 재부팅하는 것은 좋은 생각으로 보이지 않습니다. 나는 정비사 버전을 계속 사용할 것이다. [dis] sata 전원 케이블을 직접 연결한다. – Spidey

1

"내 데이터를 되 찾을 필요가 있습니다"라는 관점에서 데이터가 정말로 가치있는 것이라면 데이터 복구 전문가에게 드라이브를 보내는 것이 좋습니다. 데이터의 가치에 따라 비용 (아마도 수백 달러)은 사소한 것입니다. 이상적으로는 복구를 수행하기 위해 일부 소프트웨어를 실행하지 않는 데이터 복구 전문가를 찾을 수 있습니다. 소프트웨어 접근 방식이 작동하지 않으면 드라이브의 서킷 보드를 교체 할 수 있어야하며, (데이터 복구 전문가가 아닙니다.)

드라이브의 데이터 값이 그 수준까지 올라 가지 않으면 데이터 복구를 위해 많은 소프트웨어 중 하나를 구입해야합니다. 예를 들어, 저는 개인적으로 런타임 소프트웨어 http://www.runtime.org에서 GetDataBack을 사용하여 권장했습니다. 내가 실패한 드라이브를 복구하는 데 사용했습니다, 그것은 나를 위해 일했습니다.

그리고 더 일반적인 정보 ... 고장난 드라이브의 데이터 복구를위한 표준 프로세스는 드라이브 자체에서 가능한 한 적게 수행하는 것입니다. 드라이브의 플러그를 뽑고 아무것도 시도하지 마십시오. 드라이브가 고장 나고, 악화 될 가능성이 있습니다. 너는 그걸로 놀고 싶지 않아. 데이터를 가져올 가능성을 극대화해야합니다.

프로세스가 작동하는 방식은 드라이브를 파일 단위가 아닌 블록 단위로 읽는 소프트웨어를 사용하고 드라이브의 이미지 복사본을 만드는 것입니다. 소프트웨어는 모든 블록을 읽으려고 시도하고 실패 할 경우 다시 시도하고 전체 하드 드라이브의 이미지 인 이미지 파일을 작성합니다.

하드 드라이브가 이미 이미지화되면 소프트웨어는 이미지와 함께 드라이브의 다양한 논리 부분 (파티션, 디렉토리 및 파일)을 식별합니다. 그런 다음 이미지에서 파일을 복사 할 수 있습니다.

소프트웨어는 일반적으로 이미지에서 구조를 "추론"할 수 있습니다. 예를 들어 파티션 테이블이 손상되거나 누락 된 경우 소프트웨어는 전체 이미지를 스캔하여 파티션 일 수있는 항목을 찾고 파티션처럼 보이면 파티션처럼 처리하고 찾을 수 있는지 확인합니다 디렉토리 및 파일. 따라서 드라이브의 여러 구조에 대한 많은 지식을 사용하여 훌륭한 소프트웨어를 작성합니다.

당신이 그런 소프트웨어를 작성하는 법을 배우고 싶다면, 당신에게 좋습니다!내 추천은 다양한 운영 체제가 하드 드라이브의 데이터를 구성하는 방법에 대한 책으로 시작하기 때문에 드라이브 이미지를 사용하여 소프트웨어에서 데이터를 가져 오는 방법에 대해 직관적 인 느낌을 갖기 시작할 수 있습니다.

+0

내 문제는 자기 디스크의 비트 추상화에서 OS 계층에 서 있지 않습니다. 문제는 하드웨어이지만 물리적으로는 결함이있는 펌웨어뿐입니다. 일부 전문가는 쉽게 데이터를 복구 할 수 있지만 좀 더 과감한 시도를하기 전에 약간의 모험을 할 것입니다. – Spidey

관련 문제