간헐적으로 작동하는 결함있는 하드 드라이브가 있습니다. 콜드 부팅 후 약 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 %이며, 펌웨어가 망가져 몇 초 후에 무한대의 사용 상태가됩니다.
이것은 ServerFault에 속할 수 있습니까? 반면에, 질문은 확실히 프로그램을 작성하는 방법을 묻습니다, 그래서 StackOverflow의 임무를 받고 않습니다. –
하드 드라이브를 직접 처리하는 대신 RMA 나 데이터 복구 전문가에게 보내는 방법을 배우고 싶습니다. 이것은 확실히 소프트웨어 질문입니다. – Spidey