Làm cách nào để rsync một tệp lớn, với càng ít chi phí CPU và băng thông càng tốt?


13

Tôi có một tệp 500 GB mà tôi dự định sao lưu từ xa. Các tập tin thay đổi thường xuyên. Tôi sẽ kết nối nó từ máy tính để bàn với máy chủ. Cả hai đều có thể chạy rsync client hoặc máy chủ.

Lệnh thích hợp cho việc này là gì? Những cái tôi đã thử sofar đã được dùng mãi mãi hoặc đơn giản là hành động kỳ lạ.

Ví dụ và kết quả:

rsync -cv --partial --inplace --no-whole-file /desktop/file1 myserver.com::module/file1 

Có vẻ như để làm việc, nhưng chỉ khi tôi làm điều đó hai lần (?!). Ngoài ra, chậm.

Lệnh trên có thực hiện kiểm tra trên cả hai máy tính hay chỉ trên máy gửi? Có đúng không?


Một tập tin lớn mà thay đổi thường xuyên? Bạn sẽ nhận được kết quả rất, rất đáng thất vọng với rsync ...
Ignacio Vazquez-Abrams

Bất cứ một đề nghị nào khác? Tôi nên làm được với một số ứng dụng, ứng dụng khách độc quyền của Dropbox làm điều đó rất tốt. Xem forums.dropbox.com/topic.php?id=17631
Johan Allgoth

--inplace ngụ ý - Xem một phần: linux.die.net/man/1/rsync
Ray Hulha

Câu trả lời:


12

Sẽ không bao giờ nhanh được, vì rsync sẽ phải đọc / kiểm tra toàn bộ tệp và việc đọc 500 GB sẽ mất nhiều thời gian, trừ khi bạn đã lưu trữ nó trên SSD hoặc thứ gì đó.

Thử rsync -vhz --partial --inplace <file/server stuff> .

-ccó nghĩa là nó kiểm tra toàn bộ tệp TRƯỚC KHI thực hiện bất kỳ chuyển khoản nào, thay vì sử dụng dấu thời gian để xem nó có thay đổi hay không, nghĩa là đọc toàn bộ tệp hai lần. Nếu dấu thời gian không bị thay đổi (thì nên), thì bạn chỉ có thể touchtệp trước khi chạy rsync.

Nếu điều này không có kịch bản, bạn có thể thêm --progressđể bạn có thể thấy nó hoạt động như thế nào khi nó chạy.


Vâng, tôi biết 'tệp lớn == xử lý lâu'. Nhưng tôi cảm thấy tôi đang thiếu một cái gì đó ở đây, xem bình luận ở trên. Nếu Dropbox có thể làm điều đó thì chúng ta cũng có thể! =) Tôi không nói, nhưng tôi cũng đã thử mà không có -c, vẫn chậm.
Johan Allgoth

2
cũng --inplacengụ ý--partial

2

Mặc dù đó không phải là rsync, tùy thuộc vào những gì bạn đang cố gắng làm điều này có thể hoạt động tốt hơn. Tôi đã làm một nhiệm vụ sao lưu tương tự và nó chắc chắn nhanh hơn.

Sử dụng netcat để làm một ống nhựa từ máy này sang máy kia.

Trên máy nguồn của bạn:

tar -cpv --atime-preserve=system . | nc -q 10 -l -p 45454

Bạn đang tạo một tarball bảo vệ quyền và thời gian, sau đó chuyển nó vào netcat trên cổng 45454

Trên máy dự phòng của bạn

nc -w 10 X.X.X.X 45454 | tar -xpv

X.X.X.X = địa chỉ IP cục bộ của máy nguồn của bạn.

Đối với tôi, điều này làm việc tốt. Nó chạy ở tốc độ 25-30 MB / giây qua mạng LAN có dây, trái ngược với 2-3 MB / giây với rsync. Nhược điểm là: nó không đồng bộ hóa, nó chỉ tạo một bản sao của những gì trên nguồn của bạn. Đối với bản sao lưu như bạn mô tả mặc dù - một tệp 500 GB - nó có thể hoạt động rất tốt.

Bạn có thể phải làm điều này với quyền root để tránh các vấn đề về quyền, hoặc bạn có thể gặp may mắn.

FWIW, ban đầu tôi đã tìm hiểu về điều này tại đây: http://www.screenage.de/blog/2007/12/30/USE-netcat-and-tar-for-network-file-transfer/


1
tartốt hơn so với rsynckhi bạn có rất nhiều tệp nhỏ để chuyển. Việc sử dụng nccũng giúp cải thiện tốc độ truyền khi kết nối nhanh, vì bạn không có chi phí mã hóa SSH (mà tôi không cần trên kết nối ngang hàng)
jornane

0

Để tránh phí mạng, chỉ cần sử dụng giao thức rsync chứ không phải SSH. Theo mặc định, rsync sử dụng SSH khi chỉ định URL như tên máy chủ: / path. Thay vào đó, hãy sử dụng rsync: // hostname / path để sử dụng giao thức rsync nhanh hơn. Không có thủ thuật với tar / netcat là cần thiết theo cách này. Thuật toán delta rsync nên nhanh hơn nhiều.

Xem thêm https://gergap.wordpress.com/tag/rsync/ để biết thêm thông tin.

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.