Chuyển khoảng 300gb trong tệp từ máy chủ này sang máy chủ khác


20

Tôi có khoảng 200.000 tệp mà tôi đang chuyển đến một máy chủ mới ngày hôm nay. Tôi chưa từng làm bất cứ điều gì ở quy mô lớn như vậy trước đây và muốn nhận được một số lời khuyên về cách tôi nên đi về vấn đề này. Tôi đang di chuyển chúng giữa hai phân phối Centos 6 và chúng ở các địa điểm khác nhau trong nước. Tôi không có đủ dung lượng ổ cứng trên máy chủ gốc để sắp xếp tất cả các thư mục và tệp vào một tarball lớn, vì vậy câu hỏi của tôi là làm cách nào để chuyển tất cả các tệp này? rsync? Một số cách đặc biệt để sử dụng rsync? Bất kỳ đầu vào / đề xuất về cách làm nó sẽ là tuyệt vời.

Cảm ơn

EDIT: Đối với những người thắc mắc, tôi rất khuyến nghị sử dụng một screenkhi chạy một rsynclệnh lớn như thế này. Đặc biệt là khi điều gì đó ngớ ngẩn có thể xảy ra và bạn mất kết nối với máy chủ A mà bạn đang chạy rsynclệnh từ đó. Sau đó chỉ cần tháo màn hình và tiếp tục lại sau.


4
Bạn đã thử rsyncchưa Có thể trên một tập hợp nhỏ của tập tin hoặc như vậy? Nên là công cụ lý tưởng cho điều đó.
slhck

Nó gần như chắc chắn không phải là công cụ tốt nhất cho công việc này, nhưng bạn có thể quan tâm đến thực tế là bạn có thể truyền tar qua kết nối ssh thay vì phải nén vào một tệp trước khi di chuyển tệp:tar cz | ssh user@example.com tar xz
Aesin 27/03/13

2
nó có thể lạc đề, nhưng (đặc biệt là cho tải ban đầu, sau đó sử dụng rsynccho các bản cập nhật tiếp theo): "Không bao giờ đánh giá thấp băng thông của một toa xe đầy băng" (nghĩa là: bạn đã cân nhắc đặt hd thứ 2 (hoặc cắm usb2 / đĩa usb3), sao lưu trên đó và gửi cái đó qua fedex đến địa điểm từ xa? Nó có thể NHIỀU nhanh hơn bất cứ thứ gì khác và tiết kiệm băng thông cho các mục đích sử dụng khác.
Olivier Dulac

Tôi không có bất kỳ giới hạn BW nào đối với một nhà cung cấp và nhà cung cấp khác tôi sẽ không đạt được trong tháng này. Vì vậy, tôi thực sự không có vấn đề gì khi lãng phí nó: P
MasterGberry 27/03/13

1
@OlivierDulac what-if.xkcd.com/31
Bob

Câu trả lời:


24

Chỉ cần đưa ra câu trả lời của Simon , rsynclà công cụ hoàn hảo cho công việc:

   Rsync  is  a  fast  and extraordinarily versatile file copying
   tool.  It can copy locally,  to/from  another  host  over  any
   remote  shell,  or to/from a remote rsync daemon.  It offers a
   large number of options  that  control  every  aspect  of  its
   behavior  and permit very flexible specification of the set of
   files to be copied.  It is famous for its delta-transfer algo‐
   rithm,  which reduces the amount of data sent over the network
   by sending only the differences between the source  files  and
   the  existing  files in the destination.  Rsync is widely used
   for backups and mirroring and as an improved copy command  for
   everyday use.

Giả sử bạn có quyền truy cập ssh vào máy từ xa, bạn sẽ muốn làm một cái gì đó như thế này:

rsync -hrtplu path/to/local/foo user@remote.server.com:/path/to/remote/bar

Điều này sẽ sao chép thư path/to/local/foomục /path/to/remote/barvào máy chủ từ xa. Một thư mục con mới có tên bar/foosẽ được tạo. Nếu bạn chỉ muốn sao chép nội dung của một thư mục, mà không tạo một thư mục có tên đó trên mục tiêu, hãy thêm dấu gạch chéo:

rsync -hrtplu path/to/local/foo/ user@remote.server.com:/path/to/remote/bar

Điều này sẽ sao chép nội dung của foo/vào thư mục từ xa bar/.

Một vài lựa chọn liên quan:

 -h,                         output numbers in a human-readable format 
 -r                          recurse into directories
 -t, --times                 preserve modification times
 -p, --perms                 preserve permissions
 -l, --links                 copy symlinks as symlinks
 -u, --update                skip files that are newer on the receiver
 --delete                    delete extraneous files from dest dirs
 -z, --compress              compress file data during the transfer
 -C, --cvs-exclude           auto-ignore files in the same way CVS does
 --progress                  show progress during transfer
 --stats                     give some file-transfer stats

vì vậy tôi có thể làm gì rsync -hrtplu --progressnếu tôi muốn thấy sự tiến bộ khi nó đang diễn ra?
MasterGberry

@MasterGberry yup, chính xác. Tôi có một kịch bản sao lưu chạy rsync --progress --stats -hrtl --update source destination.
terdon 26/03/13

Tôi dường như có vấn đề để chạy nó. rsync -hrtplu --progress --rsh='ssh -p2202'là những gì tôi đang sử dụng và nó không thể kết nối. Tiếp tục nhận được 255 lỗi. Nhưng tôi rất thích nó. Vì vậy, tôi biết nó không phải là tường lửa ... tôi có cần cung cấp mật khẩu qua cmd không? hoặc nó sẽ không hỏi tôi sau đó cho nó?
MasterGberry

Derp, nvm. Tôi quên mất lưu lượng truy cập đi trên tường lửa của tôi. Cảm ơn
MasterGberry

Lưu ý quan trọng: với rsync, hãy cẩn thận hơn khi sử dụng "--delete": đọc nhiều về nó, kiểm tra các thư mục (/ tmp / ...) khác và cẩn thận với các thay đổi khi thêm hoặc không theo dõi "/" ở cuối dir (s) nguồn hoặc dir đích.
Olivier Dulac

14

Nó phụ thuộc vào tốc độ cần sao chép và tốc độ băng thông có sẵn.

Đối với kết nối mạng kém, hãy xem xét băng thông của một chiếc xe tải chứa đầy băng. (Đọc: gửi một ổ cứng 2,5 inch, hoặc tự lái nó ở đó. Ổ đĩa 300 gigabit nên dễ tìm).

Nếu nó ít thời gian quan trọng hoặc bạn có nhiều băng thông thì rsync là tuyệt vời. Nếu có lỗi, bạn chỉ có thể tiếp tục mà không sao chép lại các tệp trước đó.

[Chỉnh sửa] Tôi quên thêm rằng bạn có thể chạy rsync nhiều lần nếu dữ liệu của bạn được sử dụng trong quá trình sao chép.

Ví dụ:
1) Dữ liệu đang sử dụng. Rsync -> Tất cả dữ liệu được sao chép. Điều này có thể mất một thời gian.
2) Chạy lại rsync, chỉ các tệp đã thay đổi mới được sao chép. Điều này nên được nhanh chóng.

Bạn có thể làm điều này nhiều lần cho đến khi không có thay đổi hoặc bạn có thể thực hiện theo cách thông minh / an toàn bằng cách làm cho dữ liệu chỉ đọc trong khi sao chép. .


1
Không có máy chủ nào nên sống ở một nơi mà băng thông không thể xử lý 300G trong một khoảng thời gian hợp lý ...
Dan

1
Điều đó phụ thuộc vào những gì là 'hợp lý'. Giả sử liên kết yếu nhất là 100 mbit (Tôi không quan tâm nếu đó là giới hạn tải lên từ văn phòng hoặc tải xuống ở bên kia). Điều đó gần như cho phép 10MB / giây. (div by 10 có vẻ hợp lý, tôi biết bạn có thể nhận được nhiều hơn một chút nếu mọi việc suôn sẻ. Ví dụ, không ai khác đang sử dụng dòng cho bất cứ điều gì cả). 10MB / giây ~ ~ 600MB / phút ~ ~ 36000MB / giờ ~ ~ 36 GB / giờ ~ ~ 300GB là 8h20 phút. Đó là có thể làm qua đêm. Điều đó cũng làm cho rất nhiều giả định. Ví dụ: nếu tải lên chỉ có 2 mbit (Chúng tôi có văn phòng với các tốc độ đó) thì phải mất 50 lần thời gian (415h hoặc 17,3 ngày).
Hennes

Rất tiếc! Vâng, 8-10 là hợp lý, nhưng tôi thực sự đã đưa ra một số giả định.
Dan

2
@Dan Nếu yêu cầu máy chủ phục vụ và phục vụ các yêu cầu, bão hòa băng thông ngược dòng có lẽ là một ý tưởng tồi. Vì vậy, bạn sẽ phải điều chỉnh tốc độ truyền một cách giả tạo để tính đến điều đó.
Bob

6

Tôi sẽ đi cho rsync! Tôi đang sử dụng nó để sao lưu máy chủ của mình sang máy chủ ngoại vi và nó hoạt động tốt. Thông thường có một vài MB để sao chép nhưng một số ngày nó lên tới 20-30GB và nó luôn hoạt động mà không gặp vấn đề gì.


0

rsync qua NFS sử dụng kết nối Gigabit sẽ mất gần 10h. Sẽ tốt hơn nếu sao chép dữ liệu trên ổ cứng và di chuyển chúng giữa máy chủ. Nếu bạn cần tạo một bản sao một-một của đĩa thực sự, hãy sử dụng dd hoặc một cái gì đó tương tự, để tạo hình ảnh thô của đĩa. Sử dụng ssh (scp) gây ra một chi phí rất lớn. Thử nghiệm thực nghiệm trên kết nối Gigabit. rsync rất tốt trong việc thực hiện đồng bộ hóa gia tăng giữa hai máy chủ được sử dụng trong HA hoặc trong chế độ sao lưu. Tôi đoán.


Ngôn ngữ và phong cách của câu trả lời này cần phải được cải thiện.
FSMaxB

Rsync đặc biệt tuyệt vời nếu các tệp có thể thay đổi trong quá trình sao chép. Chỉ cần chạy nó một vài lần. Lần đầu tiên tất cả dữ liệu được sao chép. Lần thứ hai chỉ những gì đã thay đổi trong bản sao đầu tiên (dài). Lần thứ ba sẽ được thực hiện vào ban đêm hoặc với các cổ phiếu chỉ đọc.
Hennes

will took nearly about 10h. It will be better to copy data on HDD and move them between server.ngoại trừ việc nó trên toàn quốc, vì vậy sẽ mất nhiều thời gian hơn.
Cướp

@FSMaxB: Tôi sẽ làm điều này sau, thx.
Pawel

@Rob: Tôi đã đọc cái này;) Rằng các máy chủ ở hai vị trí khác nhau. Vì vậy, bạn cần tính toán, những gì sẽ tốt hơn cho bạn. Thực hiện một chuyến đi xuyên quốc gia (kiểm tra chi phí nhiên liệu, v.v.) hoặc sử dụng kết nối mạng. Điều gì sẽ có lợi hơn.
Pawel

0

Lần đầu tiên sử dụng NFS và tar / unsar (NFS là giao thức nhanh nhất trong trường hợp này, tar để tiết kiệm băng thông mạng bằng cách sử dụng CPU nhiều hơn)

tar cf - * | ( cd /target; tar xfp -)

lần sau / s sử dụng rsync


Nếu bạn có đủ sức mạnh CPU, bạn có thể cải thiện điều này bằng cách thêm gzip vào vòng lặp. Và không có NFS bạn có thể sử dụng netcat. (Hoặc thậm chí cả hai: tar -cf - * | gzip | nc -p 4567nc -l 4567 | gunzip | tar xf -.
Hennes

cảm ơn Hennes, đó là ý tưởng của tôi, nhưng tôi đã quên gzip trong đường ống
máy bay phản lực
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.