У меня есть сервер, для которого я хочу начать делать ежедневные резервные копии определенных файлов. Поскольку сервер находится в производстве, лучше ограничить пропускную способность сети, я думал, что trickle справится с этой задачей, но, похоже, это вообще не имеет никакого эффекта, и я не понимаю, почему.
На сервере A есть файлы, которые я хочу заархивировать. Я создал на нем общий ресурс NFS и дал доступ к серверу B, на котором смонтировал файлы. На сервере B я запускаю эту команду:
trickle -s -u 20000 -d 20000 find /mnt/ServerA/log/ -newermt 20181001 -not -newermt 20181002 -type f -print0 | xargs -0 tar -cvzf /tmp/archive.tar.gz
Когда я наблюдаю за сетевым трафиком сервера B с помощью инструмента iptraf-ng, я вижу, что оба сервера полностью используют свою 1-гигабитную пропускную способность (они расположены в одной локальной сети). trickle не ограничивает его до 20 Мбит / с, как я указал в приведенной выше команде.
Вот что я вижу в iptraf-ng: 846,68 Мбит / с (как сервер A, так и сервер B) во время выполнения команды.
Почему не работает команда trickle и что я могу использовать вместо этого, это относительно просто.
Я не очень знаком с trickle, но мне кажется, что в вашей команде trickle работает с командой "find", а не с командой tar, которая будет использоваться для полосы пропускания.
Я бы посмотрел на перенастройку команды на использование PV для ограничения скорости потока. Я не пробовал, но думаю, что что-то вроде этого сработает:
find /mnt/ServerA/log/ -newermt 20181001 -not -newermt 20181002 -type f -print0 | tar -c --files-from - | pv --rate-limit 2m | gzip > /tmp/archive.tar.gz
Разбивая это, команда find находит ваши файлы, как и раньше. --files-from позволяет tar читать файлы в потоке (без сжатия). Команда pv действует как перерыв в потоковой передаче - 2m - это 2 мегабайта, то есть чуть больше 20 мегабит. Этот поток tar затем сжимается в файл gzip.
Я отмечаю здесь, что много лишнего вздора ушло на потоковую передачу, а затем на сжатие файла - это потому, что я понимаю, что источником является удаленная система. Если бы источником была локальная система, а файл записывался на удаленную, вы могли бы использовать гораздо более простой вариант, когда tar выполняет сжатие с потоком, а затем передает его через pv и записывает его - но это ограничит скорость сжатый поток.