Многие слышали о *nix-утилите GNU ddrescue, предназначенной для сохранения данных, читающихся с ошибками (существует две утилиты с таким названием, но я расматриваю именно GNU-версию). На хабре был топик о ней, рассказывающий основные особенности данной утилиты — копирование данных с записью в лог с последующими попытками считать проблемные места. Но мало кто знает, что её можно использовать в ос семейства windows, под катом я расскажу, как.


Однажды, после неполадок с питанием, старый файловый сервер под управлением ОС windows частично вышел из строя и перестал включаться. Аналогов древнему железу никто искать не стал, поэтому единственное, что от него было нужно — сделать образ зашифрованного раздела, находящегося на аппаратном raid5. К сожалению, другой материнской платы с шиной pci-x, куда можно было бы вставить raid-контроллер, не нашлось, поэтому сделать это надо было на старом сервере. После диагностики и замены вышедших из строя деталей сервер стартанул, но уходил в перезагрузку примерно раз в 5 минут. Было решено использовать ddrescue. На сайте производителя raid нашелся драйвер под SLES11, корректной инструкции к которому, к сожалению, не было и завести его не получилось. Тогда я подумал о том, что собрать ddrescue для windows, для которой драйвер raid у меня имелся, проще, чем заставить работать драйвер raid-контроллера под linux. Начал я с установки cygwin. На официальном сайте лежит веб-инсталлятор, который качает с указанного зеркала нужные файлы. За 5 минут до ребута инсталлятор не успевал скачать всё, что нужно, поэтому качать пришлось на другом ПК, потом ско��мить дистрибутив инсталлятору. Самый большой сюрприз ожидал меня на этапе выбора дополнительного ПО, устанавливаемого вместе с cygwin — там был скомпилированный пакет ddrescue! Поэтому самому собирать ничего не пришлось.

После установки необходимо узнать, как cygwin нумерует диски, чтобы не затереть не то, что нужно. Все устройства именуются /dev/sd*, где последний символ соответствует номеру диска в «управлении дисками» windows (диск 0 — sda, диск 1 — sdb и т.д.). fdisk/cfdisk вместе с cygwin не поставляется и в предкомпилированных пакетах отсутствует, поэтому для того, чтобы убедиться, что нужный диск значится именно под тем именем, под которым предполагается, можно предпринять следующие шаги:
  • просмотр данных раздела или диска командой less -f (например, можно увидеть сигнатуру NTFS)
  • просмотр размера разделов командой cat /proc/partitions
  • просмотр количества разделов на харде командой ls /dev/sd*

Дальше — дело техники. Был написан однострочный bat-файл со следующим содержимым
c:\cygwin\bin\ddrescue.exe -f -D -v /dev/sdb /dev/sdc log.txt
и положен в автозагрузку. Теперь клонированию не страшны перезагрузки, через несколько часов копия готова.
Все операции проводились в старой ос, в windows vista и новее, возможно, для доступа к дискам необходимо будет отключить UAC/запускать батник от администратора.