У меня неисправный жесткий диск, который работает с перебоями. После холодной загрузки я могу получить к нему доступ примерно 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(). Я готов написать это на C/C++ для совместимости с maximus API/библиотекой. Мне понадобится некоторый контроль над моими обработчиками файлов, чтобы проверить, действительны ли они, и мне нужно что-то, чтобы возвращать неверные данные, но возвращать, если диск выходит из строя во время процесса копирования.
Может быть, С# даст мне наилучшие результаты, если я буду злоупотреблять «жестко запрограммированными» аппаратными исключениями?
Другим подходом было бы измерение того, сколько времени мне потребуется для включения и выключения моего жесткого диска, и кодирование программы, чтобы читать его только в течение этого времени, и помечать меня, когда нужно выключить и снова включить питание.
Что бы вы сделали в этом случае? Существуют ли какие-либо инструменты/утилиты, которые уже делают это?
О, есть ОТЛИЧНОЕ приложение для чтения плохих оптических носителей здесь , это называется IsoPuzzle, это не мое, я просто хотел поделиться чем-то связанным с моей проблемой.
!РЕДАКТИРОВАТЬ!
Некоторые уточнения. Я домашний пользователь, студент факультета вычислительной техники в колледже, и я лучше потеряю данные, чем потрачу тысячи долларов на их восстановление. На жесткий диск по-прежнему распространяется гарантия Seagate, но, поскольку они дали мне 5 лет гарантии, я хочу попробовать все возможное, пока не истечет время.
Когда я говорю «холодная загрузка», я имею в виду загрузку через несколько секунд без питания. Горячая загрузка будет перезагружать ваш компьютер, холодная загрузка будет выключать его, ждать несколько секунд, а затем снова загружать. Поскольку рассматриваемый жесткий диск является внутренним, но SATA, я могу просто отключить кабель питания, подождать несколько секунд и подключить его снова.
До сих пор я буду использовать robocopy, я просто ищу его, чтобы посмотреть, как я могу его использовать. Если мне нужно не кодить самому, а писать скрипт, будет еще проще.
!РЕДАКТИРОВАТЬ2!
Я не понял, у меня диск Seagate 7200.11. Известно, что у него плохая прошивка и это не всегда лечится простым обновлением прошивки (не после появления этого бага). Диск физически на 100% в рабочем состоянии, просто прошивка накручена, заставляя через несколько секунд переходить в состояние бесконечной занятости.