Як виправити пошкоджену помилку пакету за допомогою rsync для (відносно) великих файлів?


10

Спроби оновити файли на сервері за допомогою rsyncкоманди:

rsync -ravq -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

corrupt packet помилки продовжують кидатись, зокрема:

rsync: writefd_unbuffered failed to write 4092 bytes to socket [sender]: Broken pipe (32)
rsync: connection unexpectedly closed (11337 bytes received so far) [sender]
rsync error: unexplained error (code 255) at /home/lapo/package/rsync-3.0.9-1/src/rsync-3.0.9/io.c(605) [sender=3.0.9]

Це, мабуть, пов’язано з тимчасовим sshочікуванням, як це здається, що з великими (r) файлами. Крім того, я постійно отримую тайм-аути за допомогою WinSCP. Це відбувається тільки зі мною; кілька людей, з якими я працюю, використовують цей сервер, не мають однієї проблеми.

Використання rsyncз терміналу Cygwin в Windows 7 проти сервера Centos 6.3.

Я не впевнений, яка інша інформація може бути корисною чи як її отримати. Я оновлю питання або додаю коментарі відповідно до будь-яких пропозицій.

Як я повинен це вирішити?

Дуже дякую!

Відповіді:


12

Я не впевнений, що може спричинити corrupt packetпроблему, яка скасовує ваше з'єднання, але ви можете виявити rsync --partialабо --partial-dirваріант корисним при передачі великих файлів, так що при перезапуску передачі він продовжуватиметься там, де передача припинена, замість того, щоб починати перезавантаження цілий файл знову:

- частковий-dir = .rsync-частковий

Таким чином, ви можете змінити оригінальну команду так:

rsync -rav --progress --partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

або

rsync -rav --progress --partial-dir=.rsync-partial -e "ssh -o ConnectTimeout=2 -o ServerAliveInterval=2 -ServerAliveCountMax=2" --delete ./local_dir user@$SERVER:/dest_dir

Зауважте, що для цього прикладу я видалив параметр -q( --quiet) і додав --progressпараметр у перший приклад та --partial-dir=.rsync-partialу другий приклад.

Різниця між --partialі --partial-dir=.rsync-partialполягає в тому, що пізніше створюється каталог, який зберігає часткові файли окремо від повністю переданих файлів, якщо це важливо для вас на приймальній (серверній) стороні.

Сторінка rsync пояснить це детальніше, хоча я також зазначу важливу інформацію про безпеку на сторінці:

ВАЖЛИВО: --partial-dir не повинен писати інші користувачі, або це загроза безпеці. Наприклад, ЗАБЕЗПЕЧИТИ "/ tmp".


Я спробував обидва варіанти, і жоден не вирішив проблему. Дякую за підказку.
Хуан Карлос Кото

1

Пошкодження свідчить про поганий драйвер NIC або NIC у вашій машині; колись це було у вікні моєї дружини: довелося кілька разів намагатися встановити rsync. Як тільки це вдалося, я міг неодноразово викликати rsync для передачі та виправлення іншого необхідного програмного забезпечення, яке, зокрема, включало оновлені драйвери NIC та інструмент контрольної суми.


0

Якщо значення ulimit дорівнює 0 або невелике число, воно повинно давати цю помилку. Спробуйте збільшити значення ulimit (such as 9999999999)і повторіть спробу. ви можете написати невеликий сценарій оболонки (a.sh)і використовувати щось подібне:

#!/bin/sh
ulimit 99999999999

rsync -avrz --perms --delete --chmod=u+rwx,g+rx,o+x /dir1/ /dir2/

2
Це цікаво. Я над цим не працював деякий час; однак, якщо ви хочете пояснити, чому це працює, я думаю, це було б дуже корисно для тих, хто читає це питання. Дякую!
Хуан Карлос Кото

-1

просто петлю, поки вона остаточно не передається

while ! sshpass -p 'xxxx' rsync --partial --append-verify --progress -a -e 'ssh -p 22' /source/ remoteuser@1.1.1.1:/dest/; do sleep 5;done
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.