1

(первый постер) Я хочу замедлить скорость копирования данных ddrescue. Я создаю образ жесткого диска с моего ноутбука Linux на рабочий стол Windows. ddrescue может работать быстрее, чем мой компьютер может загрузить то, что он дает, поэтому он заглушает интернет моего компьютера. Я иногда создаю образы, подобные этим, и хочу знать, есть ли способ немного подавить спасение, будь то с рабочего стола Windows или ноутбука с Linux. (Windows 10, Parted Magic)

Спасибо за вашу помощь?

1 ответ1

0

У меня нет простого решения для ddrescue .
РЕДАКТИРОВАТЬ: у меня не так просто решение сейчас.

Подготовка целевого файла

Вам нужно будет знать исходный размер жесткого диска в 512-байтовом блоке. Сохраните это в переменной.

SIZE=$(sudo blockdev --getsz /dev/sdX)

Целевой файл должен иметь соответствующий размер заранее.

fallocate -l $((512*$SIZE)) /mnt/samba/share/target.dd

Подготовка отложенного устройства

Сначала вам нужно устройство петли.

sudo losetup -f /mnt/samba/share/target.dd
sudo losetup -a

Вторая команда сообщает вам, какое устройство цикла связано с target.dd . Здесь я предполагаю, что это /dev/loop0 .

Затем вы создаете устройство с устройством сопоставления.

echo "0 $SIZE delay /dev/loop0 0 0 /dev/loop0 0 500" | sudo dmsetup create delayed_target

Число 500 в этом примере указывает, что каждая операция записи в /dev/mapper/delayed_target будет отложена на 500 мс. (Подробнее см. man dmsetup и этот документ .)

Фактическое чтение

sudo ddrescue --force -D -c 2048 /dev/sdX /dev/mapper/delayed_target logfile.log

Ключ -c 2048 указывает ddrescue обрабатывать 2048 * 512 байт за раз, это один мегабайт. Из-за того, что -D программа не использует кэширование и т.д., В результате чего многие операции записи объединяются в одну. С -D каждый мегабайт образует отдельную операцию записи, которая достигает 500 мс задержки.

доводка

Один твик - изменить -c 2048 в вызове ddrescue . Другое - изменить задержку в dmsetup (см. Раздел Очистка ).

Вы всегда можете остановить ddrescue с помощью Ctrl+C, настроить задержку, если необходимо, повторно запустить ddrescue с тем же лог- файлом и, возможно, с другим параметром -c - и он продолжится. Эксперимент, чтобы найти значения, которые соответствуют вашим потребностям.

очищающий

sudo dmsetup remove delayed_target

(Чтобы настроить задержку, вернитесь к dmsetup create now.)

sudo losetup -d /dev/loop0

Заметка

Вместо того чтобы откладывать запись в целевой файл, вы можете отложить чтение с исходного устройства. Похоже, что это лучший способ, поскольку нет необходимости в петлевом устройстве. Тем не менее, мои тесты показали, что есть немедленные чтения с недавно созданного устройства картографирования. Эти чтения многократно задерживают задержку и блокируют сам dmsetup . Моя интерпретация может быть неверной, но после dmsetup create существует значительная задержка. Это делает настройку (если не всю процедуру) практически невозможной.


Мой оригинальный ответ:

Из моего опыта ddrescue значительно лучше, чем dd только если есть ошибка чтения. Если ваши диски, как правило, находятся в хорошем состоянии и вы ожидаете, что ошибки чтения будут редкими, вы можете использовать dd с pv .

Пример:

dd if=/dev/sdb conv=sync,noerror bs=32M 2>dd.log | pv -L 4M > /mnt/samba/desktop/my-image.dd

Параметр noerror для dd заставляет его продолжить после возникновения ошибки чтения, если таковая имеется; sync заставляет dd выводить нули в этом случае, поэтому хорошие данные впоследствии помещаются с правильным смещением в файл изображения. Я предпочитаю большие bs для производительности HDD. Обратите внимание, что при таком большом bs одна ошибка чтения может вызвать до 32 МБ ошибочных нулей в изображении, поэтому вам может потребоваться:

  • Играйте вручную с помощью карманного калькулятора и опций dd bs , skip , seek и conv=notrunc , чтобы делать то, что делает ddrescue автоматически: читать и сохранять как можно больше, надеясь уменьшить количество ошибочных нулей до 512B или 4096B за ошибку чтения (эти числа являются общими размерами секторов для дисков).
  • или вручную поиграйте с карманным калькулятором и создайте файл журнала для ddrescue , затем запустите ddrescue чтобы перечитать только проблемные фрагменты источника; обратитесь к info ddrescue о структуре файла журнала.

В обоих случаях сохраненный stderr из dd будет полезен для обнаружения проблемных секторов, следовательно, перенаправление 2>dd.log .

Хорошая вещь с pv - это его способность изменять ограничение скорости на лету (замените PID фактическим pid исходного pv используемого с dd):

pv -L 6M -R PID

Таким образом, вы можете регулировать лимит, не начиная заново.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .