Показаны сообщения с ярлыком dd. Показать все сообщения
Показаны сообщения с ярлыком dd. Показать все сообщения

Использование утилиты ddrescue для восстановления данных

ddrescue - это утилита для восстановления данных с поврежденной поверхности диска
При выборе между dd_rescue и ddrescue используйте ddrescue - подробности https://habrahabr.ru/post/236977
Сравнивая с dd_rescue - умеет сохранять сбойные блоки в лог-файл и затем восстанавливать их отдельно и не умеет пересылать данные в pipe (скажем для копирования по сети через ssh-транспорт)

Сценарий восстановления с неисправного диска на исправный

Копируем с неисправного диска /dev/sda на исправный /dev/sdb сбойные блоки пропускаем и сохраняем о них информацию в log
ddrescue -f -n /dev/sda /dev/sdb ddrescue.log

Копируем только сбойные блоки согласно ddrescue.log делая 3 попытки их чтения
ddrescue -f -d -r3 /dev/sda /dev/sdb ddrescue.log

Как правило двух этих простых команд достаточно для восстановления данных с диска на котором появились сбойные блоки

Происходит остановка копирования при чтении с битого диска на позиции 12345
Перезапуск восстановления с байта 12345
ddrescue -f -n -i 12345 /dev/sda /dev/sdb ddrescue.log

Перезапуск восстановления с конца диска
ddrescue -f -n -R /dev/sda /dev/sdb ddrescue.log 
Не забываем после всего про опцию -dr3 для перечитывания битых блоков согласно log-файлу

Расшифровка опций

-f
Заставить ddrescue перезаписать диск outfile. Необходим, когда в качестве outfile используется устройство. Используется для защиты от ошибочного повреждения данных.

-n
Пропускает фазу scrape. Уменьшает время восстановления, снижает время на попытки чтения самых трудных частей файла.

-d
При указании данной опции, ddrescue использует прямой доступ к диску, обходя кэши ядра

-r n
Задает количество повторных попыток чтения поврежденных областей

-R
ddrescue читает данные в обратной последовательности

Перенос операционной системы образом диска по сети (dd over ssh)

Иногда возникают случаи когда нет возможности переместить физически образ диска, например, при использовании rbd, lvm или каких-либо еще случаях. Как же быть в этой ситуации?

Загрузите оба сервера в linux rescue по сети с livecd, поднимите сеть и обеспечьте ssh-доступ

На новом сервере на который выполняем перенос надо выполнить:

ssh root@исходныйсервер "dd if=/dev/vda bs=64k | gzip -1 -" | gunzip - | pv | dd of=/dev/vda bs=64k

P.S. pv - monitor the progress of data through a pipe
dd в GNU Coreutils 8.24+ (Ubuntu 16.04) включает в себя опцию status=progress
Про оптимальный размер blocksize можно почитать тут http://stackoverflow.com/questions/6161823/dd-how-to-calculate-optimal-blocksize

Тест скорости записи жесткого диска утилитой dd

sync; dd if=/dev/zero of=tempfile bs=1M count=1024; sync

Файл закешировался, проверить скорость его чтения из буфера можно так:

dd if=tempfile of=/dev/null bs=1M count=1024

очищаем буфер, проверяем скорость чтения с диска:

sysctl -w vm.drop_caches=3
dd if=tempfile of=/dev/null bs=1M count=1024


update
говорят правильно мерить скорость записи с ключем oflag=direct
dd bs=1M count=256 if=/dev/zero of=test oflag=direct