Почему rsync разветвляется? И почему один такой раздвоенный процесс почти не работает (как видно из iotop)?

11

Это относится к вопросу, изложенному здесь, и я тоже испытываю то же самое.

На одном из моих серверов я запустил rsync для резервного копирования огромного каталога (размером более 300 ГБ) на другой диск, смонтированный на той же машине. Каталог rsynced содержит тысячи каталогов и файлов. Я выполнил одну команду rsync с nohup, а затем выдвинул ее в фоновом режиме с помощью команды &. Полная команда, приведенная в удаленной оболочке bash (с использованием putty):

nohup rsync -avh /some/local/dir /backup/ >> /opt/rsync.dec22.log &

Затем, чтобы просто проверить, с какой скоростью копируются данные, я использовал команду iotop и обнаружил, что 3 rsync работают с одинаковыми параметрами. При поиске я нашел ссылку выше, в которой говорится, что это нормально.

Но, выполняя iotop для наблюдения только за этими и единственными процессами rsync, работающими в системе, я вижу, что один процесс читает файлы, другой записывает их, но один бездействует. Поведение кажется хорошим, так как один процесс делает только одну вещь за раз, но что делает 3-й процесс (на рисунке ниже он показан как средний)?

Команда iotop, которую я использовал, была:

iotop -p22250 -p22251 -p22252

Вот скриншот для вывода команды iotop:

вывод команды iotop, показывающий процесс 3 rsync

Я спрашиваю об этом, потому что я часто использую rsync и хочу понять его поведение для долгосрочной выгоды. Я даже прочитал руководство, но оно ничего не говорит о разветвлении.

Гаутам Сомани
источник

Ответы:

9

rsync - это программа, разработанная как клиент и сервер. Сервер читает, а клиент пишет. Представьте себе, что вместо одного компьютера у вас есть компьютеры по сети, я уверен, это будет намного понятнее, если вы так думаете.

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

Сердитый
источник
Спасибо за знание. Я понимаю это с точки зрения отдельных компьютеров в сети, каждый компьютер выполняет часть работы синхронно. Но можете ли вы также отослать меня к документации по поведению, где я могу прочитать больше о rsync, а также о концепции? Также хотелось бы знать, как данные чтения передаются процессом чтения процессу записи? Используется ли концепция МПК?
Гаутам Сомани
3
@GautamSomani Официальная страница rsync будет вашим лучшим источником для такого. rsync.samba.org Кроме того, как это работает, можно найти здесь: rsync.samba.org/how-rsync-works.html Если вы хотите получить более подробную информацию, вам, вероятно, придется поискать источник.
сварливый
Оригинальный автор запускает rsync локально. Он не подключается к rsyncd, поэтому демон никак не разветвляет своего ребенка. И нет сетевых подключений. Поэтому остается вопрос, почему Rsync разветвляется при локальном выполнении. Ответ вводит в заблуждение и неправильно.
Друки
@drookie Неважно, локально это или по сети. Это работает так же. Это также объясняет такое поведение в официальном документе, который я связал прямо над вашим комментарием, в котором также говорится, что «либо в локальной передаче, либо через удаленную оболочку, либо через сетевой сокет».
Сердитый