Làm cách nào để sửa lỗi gói bị hỏng đối với rsync đối với các tệp lớn (tương đối)?


10

Đang cố cập nhật tệp trên máy chủ, bằng rsynclệnh:

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

corrupt packet lỗi tiếp tục bị ném, cụ thể:

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]

Điều này có thể liên quan đến sshthời gian chờ, vì nó dường như xảy ra với các tệp (r) lớn. Ngoài ra, tôi tiếp tục nhận được thời gian chờ bằng WinSCP. Điều này chỉ xảy ra với tôi; Một số người tôi làm việc với máy chủ này không gặp vấn đề tương tự.

Sử dụng rsynctừ thiết bị đầu cuối Cygwin trong Windows 7, đối với máy chủ Centos 6.3.

Tôi không chắc những thông tin nào khác có thể hữu ích hoặc làm thế nào để có được nó. Tôi sẽ cập nhật câu hỏi hoặc thêm ý kiến ​​theo bất kỳ đề xuất nào.

Làm thế nào tôi nên giải quyết điều này?

Cảm ơn rất nhiều!

Câu trả lời:


12

Tôi không chắc điều gì có thể gây ra sự corrupt packetcố làm mất kết nối của bạn, nhưng bạn có thể thấy tùy chọn --partialhoặc --partial-dirtùy chọn của rsync hữu ích khi chuyển các tệp lớn để khi bạn khởi động lại quá trình chuyển, nó sẽ tiếp tục khi chuyển khoản bị tắt thay vì phải bắt đầu chuyển toàn bộ tập tin một lần nữa:

--partial-dir = .rsync-part

Vì vậy, bạn có thể sửa đổi lệnh ban đầu của bạn như thế này:

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

hoặc là

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

Lưu ý rằng với ví dụ này, tôi đã loại bỏ tùy chọn -q( --quiet) và thêm --progresstùy chọn trong ví dụ đầu tiên và --partial-dir=.rsync-partialtrong ví dụ thứ hai.

Sự khác biệt giữa --partial--partial-dir=.rsync-partiallà sau này tạo một thư mục giữ các tệp một phần tách biệt với các tệp được chuyển hoàn toàn nếu điều đó quan trọng đối với bạn ở phía nhận (máy chủ).

Trang chủ rsync sẽ giải thích điều này chi tiết hơn, mặc dù tôi cũng sẽ chỉ ra một lưu ý bảo mật quan trọng từ trang này:

QUAN TRỌNG: người dùng --partial-dir không thể ghi được bởi người dùng khác hoặc đó là một rủi ro bảo mật. Ví dụ: TRÁNH "/ tmp".


Tôi đã thử cả hai tùy chọn và không khắc phục được sự cố. Cảm ơn cho gợi ý, mặc dù.
Juan Carlos Coto

1

Tham nhũng cho thấy trình điều khiển NIC hoặc NIC xấu trong máy của bạn; đã có cái này một lần trên hộp Windows của vợ tôi: phải liên tục thử cài đặt rsync. Khi đã thành công, tôi có thể liên tục gọi rsync để chuyển và sửa các phần mềm khác cần thiết, trong đó đáng chú ý nhất là các trình điều khiển NIC được cập nhật và một công cụ kiểm tra.


0

Nếu giá trị ulimit là 0 hoặc một số nhỏ, thì nó sẽ đưa ra lỗi đó. Cố gắng tăng giá trị ulimit (such as 9999999999)và thử lại. bạn có thể viết một tập lệnh shell nhỏ (a.sh)và sử dụng một cái gì đó như thế này:

#!/bin/sh
ulimit 99999999999

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

1
Nó thật thú vị. Tôi đã không làm việc này trong một thời gian; tuy nhiên, nếu bạn muốn giải thích lý do tại sao nó hoạt động, tôi nghĩ rằng nó thực sự hữu ích cho bất cứ ai đọc câu hỏi này. Cảm ơn!
Juan Carlos Coto

-1

chỉ cần lặp cho đến khi nó chuyển cuối cùng

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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.