Я пытаюсь отразить большую базу данных Mongo между производственным сервером и средой разработки, остановив Mongo на обоих серверах, а затем выполнив команду:
rsync --archive --delete --recursive --verbose --compress --rsh "ssh -t -o StrictHostKeyChecking=no -i key.pem" remoteuser@remotehost:/var/lib/mongodb/ /var/lib/mongodb
Он работает нормально в течение нескольких минут, но затем остановился с ошибкой:
receiving incremental file list
./
collection-228--5129329295041693519.wt
inflate returned -3 (0 bytes)
rsync error: error in rsync protocol data stream (code 12) at token.c(557) [receiver=3.1.1]
rsync: [generator] write error: Broken pipe (32)
rsync error: error in socket IO (code 10) at io.c(820) [generator=3.1.1]
Поиск в Google ошибки предполагает, что это какая-то проблема с сетевым подключением, но я могу нормально подключиться к обоим серверам.
Если я повторно запустил команду, она выйдет из строя в том же файле с тем же сообщением об ошибке. Что вызывает эту ошибку и как ее исправить?
Оказывается, rsync обращается к rsync на удаленном сервере, а версии на моих серверах не совпадают. Я запускал 3.1.1 на целевом сервере, но 3.1.0 на исходном сервере, и, очевидно, этого было достаточно, чтобы прервать загрузку определенных файлов. Я установил 3.1.1 на исходный сервер, и после этого передача прошла безупречно.
Так как объяснил Керин здесь, просто обновите свои версии rsync, чтобы убедиться, что они точно так же как на отправляющем, так и на принимающем ПК!
У меня была такая же проблема: ошибка записи сломанного канала при передаче очень большого файла через ssh rsync с помощью rsync --compress
(-z
) установлен флаг.
Моя ошибка rsync была:
rsync: [sender] write error: Broken pipe (32)
rsync error: error in rsync protocol data stream (code 12) at io.c(837) [sender=3.1.0]
rsync --version
с моего ОТПРАВЛЯЮЩЕГО ПК показал rsync version 3.1.0 protocol version 31
, тогда как на моем ПРИНИМАЮЩЕМ ПК он показывал rsync version 3.1.2 protocol version 31
. Поэтому я решил просто обновить свой ОТПРАВЛЯЮЩИЙ ПК до версии 3.1.2. Как только я это сделал, это сработало!
rsync
версия:Просто следуйте этим инструкциям здесь, чтобы установить rsync
из источника: http://www.beginninglinux.com/home/backup/compile-rsync-from-source-on-ubuntu.
Коротко:
Проверьте свою версию rsync, чтобы знать, что у вас сейчас есть:
rsync --version
Загрузите желаемый исходный файл для нужной вам версии здесь: https://download.samba.org/pub/rsync/src/.
Скомпилируйте из исходников и установите:
./configure
make
sudo checkinstall
Проверьте свою версию rsync, чтобы убедиться, что она обновлена:
rsync --version
Готово!
(Я не тестировал это, но, очевидно): Чтобы удалить его из вашей системы, используйте:
dpkg -r rsync
Как только я выполнил обновление, чтобы получить одинаковые версии rsync для обеих систем, все заработало отлично!
Вы пытаетесь синхронизировать данные между локальным и удаленным серверами, удаленный сервер выглядит как aws ec2, вы можете использовать команду ниже для синхронизации данных
rsync -ravhz "ssh -i /path/to/EC2_KEY.pem" / path / to / local / files / * EC2_USER @ EC2_INSTANCE: / path / to / remote / files
Пожалуйста, проверьте с серверов и на серверы перед синхронизацией, поскольку вы можете синхронизировать в неправильном направлении
Если вы пытаетесь выполнить синхронизацию с ec2 на локальный сервер, проверьте, открыли ли вы правильные порты между серверами.
Попробуйте сначала подключиться по telnet и проверить соединение между серверами, вам нужно внести IP-адреса и порты в белый список, так как некоторые брандмауэры могут блокировать передачу данных