Вопрос или проблема
Вот моя команда 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
важна осторожность, так как неправильная команда может привести к повреждению данных на целевых устройствах. Вы всегда должны удостоверяться в корректности пути к файлам и устройствам перед выполнением команд.