Как исправить ошибку ввода / вывода с помощью dd?

9

Привет, я пытаюсь исправить мою систему Windows 7 сломанным жестким диском, но он все еще работает.

Я пытаюсь скопировать все данные на новый диск, чтобы переустановить Windows 7. Диск с именем SQSERVICE.

Я не могу копировать вообще - см. ниже:

$ sudo dd if=/dev/sdc1 of=/dev/sda1
dd: reading '/dev/sdc1': Input/output error
11233976+0 records in
11233976+0 records out
5751795712 bytes (5.8 GB) copied, 187.731 s, 30.6 MB/s

Как исправить эту «ошибку ввода / вывода»?

    
задан Erazer 09.02.2013 в 13:24
источник

2 ответа

11

Вы сами это сказали: ваш диск сломан. Вы можете попробовать ddrescue , он может работать по сломанному пути. Помните, что вы потеряете данные.

Восстановление из резервной копии будет проще:)

Правильное использование ddrescue выглядит следующим образом:

sudo apt-get install gddrescue
sudo ddrescue /dev/sdc1 /dev/sda1

, или если вы хотите передать stdout в инструмент мониторинга программы:

sudo ddrescue /dev/sdc1 /dev/sda1 | pv
    
ответ дан Dennis Kaarsemaker 09.02.2013 в 13:26
6

Я не знаю, полезно ли это кому-либо, но если бы я нашел эту страницу в своем поиске, возможно, это поможет кому-то (кроме OP, который, надеюсь, решил свою проблему несколько месяцев назад).

ddrescue может быть лучшим выбором в этом случае для восстановления данных (в отличие от «исправления» ошибки / диска, когда был издан исходный вопрос), как предложил Деннис.

Кроме того, вы также можете установить диск и скопировать файлы. Это намного быстрее, если есть много пустого пространства или вам нужны только определенные файлы. ПРЕДУПРЕЖДЕНИЕ: сделанное с машины Linux, это теряет все расширенные атрибуты, такие как разрешения на доступ к файлам, поэтому это очень плохой выбор для файлов ОС, но допустимый для пользовательских файлов. Выполнение этого из окон должно сохранять их, но может не обрабатывать ошибки плавно, возможно, что это происходит очень медленно.

Еще одна возможность фактически «исправить» секторы, а не просто обойти их, - это перераспределение плохих секторов. Если вы знаете номер сектора (в вашем случае, 11233976 при условии, что размер вашего блока в dd и размер сектора равны 512), просто запустите это и запустите снова для каждого нового плохого сектора, который вы найдете:

hdparm –write-sector 11233976 –yes-i-know-what-i-am-doing /dev/sdb

ПРЕДУПРЕЖДЕНИЕ: Это уничтожит данные в этом секторе. Поэтому будьте уверены, что вы действительно знаете, что делаете. Если этот сектор не может быть прочитан, перезапись его остановит ошибки, но это будет означать, что сектор будет содержать мусор, возможно, повреждая важный файл.

Смотрите это для получения дополнительной информации: Ссылка

И если на вашем диске большое количество (возможно, тысяч) поврежденных секторов (или как Current_Pending_Sector, Offline_Uncorrectable или Reallocated_Sector_Ct), либо если оно новое и все еще на гарантии, или если число последовательно растет со временем, тогда вы должен в любом случае заменить диск. Не позволяйте им сообщать вам, что перераспределение исправляет диск. Он только фиксирует известные плохие сектора и потребляет сектора, зарезервированные для перераспределения. Если диск склонен к развитию более плохих секторов, проблема будет просто продолжать возвращаться, каждый раз искажая некоторые данные.

    
ответ дан Peter 21.05.2013 в 12:59