Làm thế nào để bạn đồng bộ hóa các tệp thưa thớt (hình ảnh đĩa VM) giữa các máy?


22

Có một lệnh, chẳng hạn như rsync, có thể đồng bộ hóa các tệp lớn, thưa thớt từ máy chủ linux này sang máy chủ linux khác không?

Điều rất quan trọng là tệp đích vẫn còn thưa thớt. Nó có thể dài hơn (nhưng không lớn hơn) so với ổ chứa nó. Chỉ các khối thay đổi nên được gửi qua dây.

Tôi đã thử rsync, nhưng không có niềm vui. https://groups.google.com/forum/#!topic/mailing.unix.rsync/lPOScZgFE9M

Nếu tôi viết một chương trình để làm điều này, tôi chỉ đang phát minh lại bánh xe? http://www.finalcog.com/synyncise-block-devices

Cảm ơn,

Chris.


rsync cực kỳ kém hiệu quả với các tệp lớn. Ngay cả với --inplace, trước tiên, nó sẽ đọc toàn bộ tệp trên máy chủ đích và THEN bắt đầu đọc tệp trên máy chủ cục bộ và chuyển các khác biệt (chỉ chạy dstat hoặc tương tự trong khi chạy rsync và quan sát)
ndemou 23/8/18

Câu trả lời:


21
rsync --ignore-existing --sparse ...

Để tạo tập tin mới trong chế độ thưa thớt

Theo dõi bởi

rsync --inplace ...

Để cập nhật tất cả các tệp hiện có (bao gồm cả các tệp thưa thớt được tạo trước đó) tại chỗ.


3
Đảo ngược nó để có rsync --existing --inplacevà sau đó rsync --ignore-existing --sparseđể tăng tốc đồng bộ hóa
Mike

2
Bất cứ ai cũng có thể giải thích Mikes bình luận và làm thế nào điều này sẽ tăng tốc độ đồng bộ hóa?
Preexo

Tôi nghĩ Mike có nghĩa là thay đổi tại chỗ đầu tiên và sau đó thêm mới, để những cái mới không cần phải xảy ra - một lần nữa do sự khác biệt về thời gian giữa cuộc gọi đầu tiên và cuộc gọi thứ hai. Điều này chỉ đúng nếu bạn rsync trực tiếp khỏi kho dữ liệu và máy ảo đang chạy. Trừ khi anh ta có ý gì khác?
Yuan

Tôi đồng ý với Yuan. Lệnh thứ hai của Steves sẽ đồng bộ lại các tệp mới, bạn có thể đảm bảo an toàn bằng cách sử dụng chuỗi lệnh Mikes.
falstaff

rsync cực kỳ kém hiệu quả với các tệp lớn. Xem bình luận của tôi về câu hỏi.
ndemou

5

Rsync chỉ chuyển các thay đổi cho từng tệp và với --inplace chỉ nên viết lại các khối đã thay đổi mà không tạo lại tệp. Từ trang tính năng của họ .

rsync là một chương trình chuyển tập tin cho các hệ thống Unix. rsync sử dụng "thuật toán rsync" cung cấp phương pháp rất nhanh để đưa các tệp từ xa vào đồng bộ hóa. Nó thực hiện điều này bằng cách gửi chỉ sự khác biệt trong các tệp qua liên kết, mà không yêu cầu cả hai bộ tệp có mặt ở một trong các đầu của liên kết trước.

Sử dụng --inplace sẽ làm việc cho bạn. Điều này sẽ cho bạn thấy tiến trình, nén chuyển (ở mức nén mặc định), chuyển nội dung của thư mục lưu trữ cục bộ (dấu gạch chéo đầu tiên đó), thực hiện các thay đổi cho các tệp tại chỗ và sử dụng ssh cho việc vận chuyển.

rsync -v -z -r --inplace --progress -e ssh /path/to/local/storage/ \
user@remote.machine:/path/to/remote/storage/ 

Tôi thường sử dụng cờ -a cũng làm một vài điều nữa. Nó tương đương với -rlptgoD Tôi sẽ để lại hành vi chính xác để bạn tra cứu trong trang nam.


1
'-S' dành cho các tệp thưa thớt, không phải 'cắt các dòng dài'. Từ trang man: -S, - thưa thớt xử lý các tệp thưa thớt một cách hiệu quả. Tôi sẽ thử cái này, cảm ơn.
fadedbee

Cảm ơn tôi đã sửa nó - Tôi đã tắt một cái gì đó được nói trong liên kết bạn đưa ra.
recbot

Không, thật không may, điều này không giải quyết vấn đề. Nó không đồng bộ hóa tệp, nhưng nó biến tệp thưa thớt ở phía xa thành một tệp không thưa thớt. Tôi đang sử dụng ssh / rsync đi kèm với Ubuntu 9.04.
fadedbee

Nhận xét trên của tôi là không chính xác. Vấn đề là rsync tạo các tệp không thưa thớt trên bản sao đầu tiên. Rsync --inplace hoạt động chính xác, miễn là tệp đích đã tồn tại và dài (không lớn) như tệp gốc. Bây giờ tôi có một giải pháp, nhưng nó yêu cầu tôi kiểm tra xem mỗi tệp đã tồn tại trên máy chủ đích chưa. Nếu có, tôi thực hiện - tại chỗ, nếu không, tôi sử dụng - thưa thớt. Điều này không lý tưởng, nhưng nó hoạt động.
fadedbee

rsync cực kỳ kém hiệu quả với các tệp lớn. Xem nhận xét của tôi về câu hỏi
ndemou

4

Tôi đã kết thúc việc viết phần mềm để làm điều này:

http://www.virtsync.com

Đây là phần mềm thương mại có giá 49 đô la cho mỗi máy chủ vật lý.

Bây giờ tôi có thể sao chép một tệp thưa thớt 50 GB (có 3 GB nội dung) trong vòng dưới 3 phút trên băng thông rộng dân cư.

chris@server:~$ time virtsync -v /var/lib/libvirt/images/vsws.img backup.barricane.com:/home/chris/
syncing /var/lib/libvirt/images/vsws.img to backup.barricane.com:/home/chris/vsws.img (dot = 1 GiB)
[........>.........................................]
done - 53687091200 bytes compared, 4096 bytes transferred.

real    2m47.201s
user    0m48.821s
sys     0m43.915s 

4
TBH, thời gian nêu rõ mà bạn có thể đồng bộ hóa là khá vô nghĩa vì rõ ràng nó phụ thuộc vào lượng dữ liệu thay đổi. Điều chính xác hơn để nói là phần mềm của bạn mất 3 phút để tìm ra khối nào đã thay đổi và thậm chí tốc độ đó có thể phụ thuộc vào đĩa i / o của bạn và có thể có chu kỳ CPU.
thực tế

6
Bạn nên tiết lộ rằng đây là phần mềm thương mại có giá từ 98 đô la trở lên cho chức năng mạng.
Reid

Cảm ơn bạn đã chỉ cho chúng tôi một phần mềm hoạt động tốt cho bạn, giờ đây mọi người có thể xem xét và sử dụng hoặc không sử dụng khi họ cần. Không cảm ơn bạn vì hai người kia đã đóng góp không có gì mới.
Florian Heigl

3

Hãy xem Dự án lưu trữ Linux củaastastast, nó thực hiện sao lưu "snapshot" bằng cách sử dụng "rsync" nhị phân thông qua ddsnapcông cụ.

Từ trang con người:

ddsnap cung cấp sao chép thiết bị khối cho một cơ sở chụp nhanh cấp khối có khả năng giữ nhiều ảnh chụp nhanh đồng thời một cách hiệu quả. ddsnap có thể tạo ra một danh sách các khối snapshot khác nhau giữa hai snapshot, sau đó gửi sự khác biệt đó qua dây. Trên máy chủ xuôi dòng, ghi dữ liệu cập nhật vào thiết bị khối được chụp nhanh.


2

lvmsync làm điều này.

Đây là bảng điểm sử dụng . Nó tạo ra một ảnh chụp nhanh LVM trên nguồn, chuyển phân vùng logic. Bạn có thể chuyển các bản cập nhật gia tăng của các thay đổi kể từ khi tạo ảnh chụp nhanh bao nhiêu lần tùy thích.


Tôi đã thử nó, nhưng nó không hoạt động và tác giả không sẵn sàng hỗ trợ
user1007727

1
@ user1007727 không sẵn sàng hỗ trợ, hoặc không sẵn sàng hỗ trợ miễn phí?
fadedbee

Tôi đã sử dụng lvmsync trong quá khứ, nó hoạt động nhưng nó không phải là phần mềm "prod class". :-)
Florian Heigl

1

Có thể sao chép toàn bộ hệ thống tập tin là một giải pháp? DRBD? http://www.drbd.org/


Tôi không nghĩ drbd là một giải pháp tốt ở đây, nhưng ý tưởng về rsyncing - thay thế toàn bộ fs, thay vì các tệp hình ảnh đĩa, là thú vị. Tôi không chắc liệu rsync có cho phép điều này hay không - tôi sẽ dùng thử và báo cáo lại ...
fadedbee

1

Có thể hơi lạ ở đây, nhưng tôi phát hiện ra rằng NFS xử lý việc này tốt.

Vì vậy, bạn xuất một thư mục trên một máy sau đó gắn nó vào máy khác và bạn chỉ cần sao chép các tệp với các tiện ích cơ bản như cp. (Một số tiện ích cũ / cũ có thể có vấn đề với các tệp thưa thớt.)

Tôi thấy rsyncđặc biệt không hiệu quả trong việc chuyển các tập tin thưa thớt.


1

Để đồng bộ hóa các tệp lớn hoặc thiết bị chặn với sự khác biệt từ thấp đến trung bình, bạn có thể sao chép đơn giản hoặc sử dụng bdsync , rsync hoàn toàn không phù hợp với trường hợp cụ thể này *.

bdsynclàm việc cho tôi, có vẻ đủ trưởng thành, lịch sử lỗi là đáng khích lệ (vấn đề nhỏ, giải quyết kịp thời). Trong các thử nghiệm của tôi, tốc độ của nó gần bằng mức tối đa về mặt lý thuyết mà bạn có thể nhận được ** (đó là bạn có thể đồng bộ hóa trong khoảng thời gian bạn cần đọc tệp). Cuối cùng, nó là nguồn mở và không có chi phí.

bdsyncđọc các tập tin từ cả hai máy chủ và trao đổi tổng kiểm tra để so sánh chúng và phát hiện sự khác biệt. Tất cả những điều này cùng một lúc . Cuối cùng nó tạo ra một tệp vá nén trên máy chủ nguồn. Sau đó, bạn di chuyển tệp đó đến máy chủ đích và chạy bdsync lần thứ hai để vá tệp đích.

Khi sử dụng nó qua một liên kết khá nhanh (ví dụ ethernet 100Mbit) và đối với các tệp có sự khác biệt nhỏ (thường xảy ra trên các đĩa VM), nó sẽ giảm thời gian đồng bộ hóa với thời gian bạn cần đọc tệp. Qua một liên kết chậm, bạn cần thêm một chút thời gian vì bạn phải sao chép các thay đổi được nén từ máy chủ này sang máy chủ khác (có vẻ như bạn có thể tiết kiệm thời gian bằng một thủ thuật hay nhưng chưa được thử nghiệm).


*: rsync cực kỳ kém hiệu quả với các tệp lớn. Ngay cả với --inplace, trước tiên nó sẽ đọc toàn bộ tệp trên máy chủ đích, SAU KHI bắt đầu đọc tệp trên máy chủ nguồn và cuối cùng chuyển các khác biệt (chỉ chạy dstat hoặc tương tự trong khi chạy rsync và quan sát). Kết quả là ngay cả đối với các tệp có sự khác biệt nhỏ, sẽ mất khoảng gấp đôi thời gian bạn cần đọc tệp để đồng bộ hóa.

**: Theo giả định rằng bạn không có cách nào khác để nói phần nào của tệp đã thay đổi. Ảnh chụp nhanh LVM sử dụng bitmap để ghi lại các khối đã thay đổi để chúng có thể cực kỳ nhanh hơn (Readme của lvmsync có nhiều thông tin hơn).


0

Tôi không biết về một tiện ích như vậy, chỉ các cuộc gọi hệ thống có thể xử lý nó, vì vậy nếu bạn viết một tiện ích như vậy, nó có thể khá hữu ích.

những gì bạn thực sự có thể làm là sử dụng qemu-img convert để sao chép các tệp, nhưng nó sẽ chỉ hoạt động nếu FS đích hỗ trợ các tệp thưa thớt

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.