Я использую rsync
для резервного копирования моего домашнего каталога. Это работало хорошо в течение долгого времени. Вот команда, которую я использую:
rsync \
-pavz \
--delete \
--exclude 'mnt/' \
--exclude '.cache/' \
--exclude 'Videos/' \
--exclude 'Music/' \
--exclude 'Documents/virtualbox' \
/home/"${USER}" "${server}":"${dir}" 2>> "${errorFile}"
Однако я переключил сервер, на который я rsync
выполняю резервное копирование, и теперь запускается и работает в течение нескольких секунд (до нескольких минут), но затем останавливается с сообщением об ошибке
packet_write_wait: Connection to x.x.x.x: Broken pipe
rsync: [sender] write error: Broken pipe (32)
rsync error: unexplained error (code 255) at io.c(820) [sender=3.1.1]
Поскольку он работает на других серверах, я подозреваю, что проблема заключается либо в соединении, либо в самом сервере. Связь кажется стабильной. Я подключен через кабель, и я не вижу никаких прерываний. Я также попытался пропинговать сервер во время резервного копирования. Пинг имеет скорость ответа 100%, даже если резервное копирование прерывается.
Я использую kerberos
для аутентификации на удаленном сервере.
Я пробовал несколько комбинаций с ServerAliveInterval
, ServerAliveCountMax
или ClientAliveInterval
по моему ~/.ssh/config
, но безрезультатно.
Возможно, на сервере работает что-то, что rsync
по какой-то причине убивает команду, но я не знаю, как это расследовать. Есть идеи?
источник
kerberos
для аутентификации на удаленном сервере.Ответы:
Ваша проблема может быть (нехватка) памяти. Назад, когда 1 ГБ было большим для сервера, rsync потерпел бы неудачу для меня для больших наборов данных. Возможно, алгоритм улучшил объем памяти, но я не видел эту проблему в течение 8 лет или около того. Так что на самом деле, это внешний выстрел, но его стоит изучить. Попробуйте сначала меньшие наборы данных. Вы также можете попробовать - как форму проверки работоспособности - сделать tar-tar:
Если это также не удается через несколько минут, это не память.
источник
Я встречался с этим и
rsync
в прошлом. Решение, которое исправило это для меня, состояло в том, чтобы запустить его изscreen
сеанса, что помогло поддерживать соединение с удаленным сервером.Вы можете проверить состояние, запустив
screen -x rsync
(или как вы решите назвать сеанс, если вы дадите ему имя, которое не требуется). Это повторно присоединит вашу текущую оболочку к этому сеансу. Просто не забудьте отсоединиться от него снова после того, как вы проверите состояние, чтобы он продолжал работать в фоновом режиме.Вы также можете выполнить команду для запуска
screen
в фоновом режиме одним махом, выполнив [кто-то, пожалуйста, исправьте меня, если я ошибаюсь]screen -dm 'command'
. Возможно, вы захотите,man screen
прежде чем пытаться последний.РЕДАКТИРОВАТЬ:
Я редактирую свой ответ, потому что вы подтвердили, что он не
screen
оказывает никакой помощи в этом сценарии, но вы ответили на мой комментарий, предложив попробоватьscp
и посмотреть, какие результаты вы получите, на что вы ответили, что, как ни странно, все работало просто отлично.Мой новый ответ таков: используйте
scp
- илиssh
(сtar
) - вместоrsync
Конечно,
scp
не поддерживает огромное количество функций , какrsync
, но вы на самом деле будете удивлены , чтобы обнаружить, сколько функций , которые он делает поддержку, которые почти идентичны , что иrsync
.Реальные сценарии для
scp
и другие альтернативыrsync
:Некоторое время назад мне было поручено создать сценарий оболочки, который будет извлекать журналы с наших производственных серверов и сохранять их локально на веб-сервере, чтобы разработчики могли обращаться к ним в целях устранения неполадок. После неудачной попытки заставить команду Unix установить
rsync
на наших серверах, я нашел обходной путь,scp
который также сработал.При этом я недавно изменил сценарий, чтобы все, что он использует, было
ssh
иtar
-GNU tar
/gtar
, если быть точным. GNUtar
поддерживает многие параметры, которые вы фактически найдетеrsync
, такие как--include
,--exclude
сохранение / сохранение атрибутов, сжатие и т. Д.Теперь я выполняю это путем
ssh
-ing к удаленному серверу (через pubkey auth) и используюgtar -czf - [other options such as --include='*.log' and --exclude='*core*', etc.]
- это записывает всю информациюstdout
, которая затем передается [локально], чтобыtar -xzf
на удаленном производственном сервере не было внесено никаких изменений. и все файлы вытащены как есть на локальный сервер. Это отличная альтернативаrsync
в этом случае. Единственное, что важно, ни поддержка,tar
ниscp
инкрементное резервное копирование, а также уровень проверки ошибок на уровне блоковrsync
.Полная команда, на которую я ссылаюсь при использовании , будет примерно такой (удаленный - это Solaris 10; локальный - это Debian, хотя
ssh
иtar
стоит):В вашем сценарии это было бы наоборот -
tar -cf -
локально и по каналу к удаленному серверуssh user@remotehost "tar -xf -"
- есть другой ответ, который ссылается на этот тип поведения, но не вдавается в такие подробности.Есть несколько других опций, которые я включил, чтобы ускорить процесс. Я неуклонно рассчитывал все, чтобы время выполнения было как можно меньше. Можно подумать, что использовать сжатие с помощью
tar
будет бессмысленно, но на самом деле это немного ускоряет процесс, также как и использование-C
флагаssh
для включенияssh
сжатия. Я могу обновить этот пост позже, чтобы включить точную команду, которую я использую (которая очень похожа на ту, которую я опубликовал), но сейчас я не чувствую желания подключаться к VPN, поскольку на этой неделе я в отпуске.В Solaris 10 я также использую
-c blowfish
, потому что это самый быстрый шифр для аутентификации, а также помогает ускорить процесс, но наш Solaris 11 либо не поддерживает его, либо этот набор шифров отключен.Кроме того, если вы решите использовать параметр
ssh
/tar
, было бы неплохо реализовать мое первоначальное решение,screen
если вы делаете резервное копирование, которое займет некоторое время. Если нет, убедитесь, что ваши настройки keepalive / timeout настроеныssh_config
правильно, иначе этот метод также может привести к поломке канала.Даже если вы согласитесь
scp
, я всегда считаю, что это лучший метод для использованияscreen
илиtmux
при выполнении операций такого рода, на всякий случай . Много раз я не следую своему собственному совету и не могу этого сделать, но действительно полезно использовать один из этих инструментов, чтобы гарантировать, что удаленное задание не испортится из-за того, что ваш активный сеанс оболочки каким-то образом отключился.Я знаю, что вы хотите выяснить причину вашей
rsync
проблемы. Однако, если это действительно важно, это два отличных обходных пути, с которыми вы можете поэкспериментировать.источник
screen
, результат тот же.У меня была такая же проблема на OSX El Capitan, и я исправил ее, обновив до rsync v3.11. Проблема произошла для меня на v2.6.9.
источник
rsync 3.1.1
.Kerberos предназначен только для аутентификации, которая не должна вызывать никаких проблем после создания успешного соединения.
Вы тоже пытались использовать демон rsync?
Находятся ли ваши серверы в одной сети или между ними установлен межсетевой экран / маршрутизатор?
Вы можете попробовать установить сеанс netcat между серверами, это простой способ попробовать, если у вас есть какие-либо проблемы с соединением между вашими серверами.
На первом сервере:
И на клиенте
Вы можете оставить соединение открытым и посмотреть, сохранит ли оно соединение или потеряет соединение. Вы также можете попробовать написать что-нибудь на клиенте, увидеть, что это заканчивается на другой стороне.
источник
netcat
на любом порту> 1024 без необходимости привилегий rootУ вас есть что-то на удаленном сервере, который пишет в стандартный вывод . Это может быть в вашем
.profile
или.bash_profile
. Это может быть что-то менее очевидное, какstty
илиmesg
. Если вы сомневаетесь, скопируйте стенограмму в свой вопрос о входе на сервер (обязательно отредактируйте имя хоста).источник
.profile
или.bash_profile
для обзора. Вы ищете такие вещи, какmesg
илиstty
mesg
илиstty
в любом из моих точечных файлов.единственный раз, когда у меня возникла такая проблема с rsync, я отследил ее до свободного порта Ethernet на другой машине, у которой был тот же IP-адрес, что и у моего целевого сервера. Если rsync ненадежен, это почти наверняка проблема с сетью или (в моем случае) проблема конфигурации
источник
Я сталкивался с подобной проблемой при запуске
rsync
или копировании больших файлов с рабочего стола Linux на Linux NAS с низким энергопотреблением на базе ARM через гигабитную кабельную сеть ( вручную или с помощью Gnome Nautiluscp
,scp
или в Gnome Nautilus) (нетkerberos
в моей настройке). Диски NAS используются совместноsamba
и монтируются на клиенте с помощьюcifs
. Решением для меня было смонтировать файловую систему NAS с клиента без кэширования (см. Также страницы руководства mount.cifs ):Кроме того , при установке диска NAS на клиенте с помощью
gvfs
вnautilus
этой проблеме не будет сохраняться при копировании больших файлов (но не работает в сочетании сrsync
хотя).Запись Linux в сетевую файловую систему одновременно с чтением с локального диска дополнительно объясняет причину возникновения этой проблемы.
источник
Просто обновите ваши версии rsync, чтобы они были одинаковыми как на отправляющем, так и на принимающем ПК. Смотрите мой ответ здесь: /server/883487/unable-to-rsync-due-to-broken-pipe/988794#988794 .
источник