Как перенаправить dd в pv?

Вопрос или проблема

Вот моя команда dd, которую мне нужно изменить:

dd if=/tmp/nfs/image.dd of=/dev/sda bs=16k

Теперь я хотел бы использовать pv, чтобы ограничить скорость копирования с сервера NFS. Как я могу этого достичь? Я знаю, что --rate-limit выполняет эту задачу, но не уверен, как построить пайпы.

Если по какой-то причине вам нужно читать блочное устройство с размером блока 16K:

dd if=/mnt/nfs bs=16k | pv -L rate > /dev/sda

Где rate — это максимальный допустимый объем байт в секунду, который может быть передан, или максимальный допустимый объем кибибайтов, мибибайтов, гибибайтов и т.д. в секунду, если указаны K, M, G и т.д.

Тем не менее, если вам не обязательно читать файл с размером блока 16K, просто используйте pv, который может читать блочные устройства:

pv -L rate /mnt/nfs > /dev/sda

Вам не нужен dd здесь. pv уже выполняет задачу перенаправления входных данных на выходные данные.

pv -L 1m </tmp/nfs >/dev/sda

Несмотря на то, что вы могли прочитать на некоторых веб-страницах, в dd нет ничего магического. Вам не нужно использовать его для доступа к устройствам. Все магические силы находятся в /dev/stuff.

Примечание: эта команда имеет смысл, если /tmp/nfs — это образ диска, и вы хотите записать его на диск /dev/sda. Она эквивалентна команде в вашем вопросе, за исключением ограничения скорости. Никакой сервер NFS не задействован.

Ответ или решение

Чтобы перенаправить вывод команды dd через pv с целью ограничения скорости копирования с NFS-сервера, а также сохранить использование заданного размера блока в 16K, вам нужно использовать конвейер (pipe) для передачи данных. В данном ответе мы подробно рассмотрим, как можно достичь этого.

Перенаправление dd к pv

Для начала рассмотрим первоначальную команду dd, которую вы хотите изменить:

dd if=/tmp/nfs/image.dd of=/dev/sda bs=16k

Эта команда читает образ диска из файла /tmp/nfs/image.dd и записывает его на устройство /dev/sda с размером блока 16К. Теперь, чтобы ограничить скорость копирования, мы можем использовать pv.

Использование dd с pv

Разберем, как можно использовать pv для ограничения скорости. Для этого необходимо немного изменить вашу команду:

dd if=/tmp/nfs/image.dd bs=16k | pv -L <rate> | dd of=/dev/sda bs=16k

Здесь <rate> — это значение, задающее максимальную скорость передачи данных (например, 1m для 1 Мб/с). В данном варианте данные передаются от dd в pv, который будет контролировать скорость, а затем передаются вновь в dd, который будет записывать их на диск.

Прямое использование pv

Однако, если нет строгой необходимости использовать dd, можно упростить команду. pv может напрямую работать с файловыми образами, и может применяться так:

pv -L <rate> /tmp/nfs/image.dd > /dev/sda

Это также ограничит скорость передачи данных с файла на диск, но без необходимости использования dd для управления блоками.

Объяснение параметров

  • -L <rate>: Этот параметр настраивает ограничение скорости переноса, где <rate> можно указать в байтах в секунду или использовать суффиксы (K для Кибибайтов, M для Мебибайтов и т.д.).
  • /tmp/nfs/image.dd: Это файл-образ, который вы хотите записать на диск.
  • >/dev/sda: Запись выходного потока напрямую на блоковое устройство.

Заключение

Используя указанные команды, вы сможете перенаправить вывод с dd на pv, либо воспользоваться только pv, что может ещё больше упростить процесс. Таким образом, вы ограничите скорость копирования данных между NFS-сервером и конечным устройством с помощью простой и эффективной команды.

Не забывайте, что при работе с dd и pv важна осторожность, так как неправильная команда может привести к повреждению данных на целевых устройствах. Вы всегда должны удостоверяться в корректности пути к файлам и устройствам перед выполнением команд.

Оцените материал
Добавить комментарий

Капча загружается...