Cách dễ nhất để chuyển nhanh các tập tin giữa các máy chủ linux?


16

Tôi cần chuyển tập tin từ máy chủ CentOS này sang máy chủ khác. Sẽ chuyển các tệp 5MB cứ sau 10 phút. Không cần mã hóa.

Một cách dễ dàng để chuyển tập tin nhanh là gì?

Có cái gì đơn giản hơn ftp?

Cảm ơn!


1
Tôi có niềm tin rằng tar trên netcat sẽ chiến thắng ... heh heh ...: serverfault.com/questions/18125/ Kẻ
Evan Anderson

Vì tôi không cần mã hóa nhưng cần tốc độ, tôi thích rsync hơn.
Alex L

Tôi mới biết rằng việc chuyển http không có nhiều chi phí nên có lẽ tôi chỉ có thể sử dụng.
Alex L

Đừng chỉnh sửa một câu trả lời vào câu hỏi của bạn, thay vào đó hãy đăng nó như một câu trả lời. Cuộn lại.
HoplessN00b

Câu trả lời:


25

rsync

Tôi sẽ sử dụng rsync trước khi tôi sử dụng ftp hoặc tftp.

Nhiều lựa chọn hơn và (theo kinh nghiệm của tôi) chuyển giao đáng tin cậy hơn.


1
Tôi cũng thấy rằng rsync thường có thông lượng cao hơn bất kỳ thứ gì khác (scp, cifs, nfs)
Ophidian

Điều gì về chuyển http?
Alex L

@Ophidian Bạn có nghĩa là sử dụng rsync như daemon? Mặt khác, làm thế nào nó có thể nhanh hơn scp, vì cả hai đều sử dụng ssh và có mã hóa.
balki

@balki Vâng, daemon rsync. Nó không đặc biệt trò chuyện, thực hiện tốt việc cung cấp dữ liệu ra khỏi ổ đĩa và thực hiện rất ít công việc cần thiết để hoàn thành yêu cầu (ví dụ áp dụng khác cho các tệp văn bản).
Ophidian

21

tar over ssh là được, nhưng tar qua TCP thông qua netcat là về chi phí thấp như bạn có thể nhận được! Nếu đây là việc một lần, hãy thử cách này:

Trên máy thu:

nc -l -p 8989 | tar x

Trên người gửi:

tar cf - /source-path | nc (receiving host ip address) 8989

Nếu đây là việc bạn sẽ làm thường xuyên, có lẽ tôi sẽ sử dụng rsync.


+1 cho netcat, con dao quân đội Thụy Sĩ
chmeee

Tương tự với bạn vì đã không đọc Evan. Ha ha ha! Nó thực sự không phải là một điều một lần. Anh ấy nói rằng anh ấy sẽ chuyển các tệp 5 MB cứ sau 10 phút. Có lẽ gửi qua mã Morse sẽ là một lựa chọn tốt? ;-) (lưu ý: trò đùa riêng giữa Evan và tôi)
KPWINC

8

Hai người đã đề cập đến tar trên ssh, nhưng không nói làm thế nào để làm điều đó. Đối với bản ghi, thủ tục cơ bản là chạy:

tar cf - files... | ssh remotehost 'cd /destination && tar xvf -'

Hoặc, nếu bạn muốn bắt đầu chuyển từ đầu nhận:

ssh remotehost 'cd /source && tar cf - files' | tar xvf -

Ưu điểm của việc thực hiện theo cách này so với giải pháp netcat của Evan là toàn bộ mọi thứ có thể được bắt đầu từ một máy tính; bạn không phải phối hợp hai lời mời netcat. Nếu bạn cần điều này để chạy tự động, bạn có thể thiết lập khóa ssh cho phép bạn tạo kết nối mà không cần cụm mật khẩu và sử dụng phím đó cho các kết nối này.

ssh có tùy chọn -C để nén luồng dữ liệu của nó hoặc bạn có thể sử dụng khả năng nén dựng sẵn của GNU tar:

tar zcf - files... | ssh remotehost 'cd /destination && tar xzvf -'

Rsync là một tùy chọn khác, nhưng phù hợp mạnh mẽ của nó là trong việc cập nhật các tệp đã tồn tại ở đầu nhận. Tôi đã thấy nó chậm hơn scp hoặc tar / ssh khi sử dụng nó để truyền các tệp không tồn tại ở đầu bên kia.


1
+1 Điều gì, ý bạn là không phải ai cũng trực giác biết cách làm tar trên ssh? Kỳ dị. :)
hỗn loạn

tar, tự nó, không đáng tin cậy - không có kiểm tra tính toàn vẹn tuy nhiên với SSH (TLS) bạn có được tính toàn vẹn do khả năng phát hiện các thay đổi của dữ liệu trong chuyến bay của TLS. Rupync là một lựa chọn tốt hơn và Rupync vì nó sẽ kiểm tra tính toàn vẹn tốt hơn mà không cần mã hóa; mã hóa OP đã nêu là không cần thiết.
Kilo

Kiểm tra tính toàn vẹn không cần tar? Các lớp TCP và ssh cung cấp truyền dữ liệu đáng tin cậy. Nếu bạn khẳng định rằng bản thân tar có thể có lỗi, bạn phải xử lý rsync theo cách tương tự. Trên thực tế, tôi đã chuyển rsync đóng băng do vấn đề giao thức. Tôi không nhớ một đường ống tar / unar bao giờ làm điều đó.
Kenster

6

Tôi thực sự sử dụng scphoặc tarhơn ssh. Việc mã hóa làm mọi thứ chậm lại, nhưng sự dễ dàng thiết lập và sử dụng, độ tin cậy và (chủ quan, tất nhiên) làm cho tôi sẵn sàng thực hiện cú đánh, trừ khi tôi thực sự cần tốc độ đó.

Bạn cũng có thể tăng tốc độ chuyển ssh bằng cách yêu cầu nó sử dụng mật mã nhanh hơn mặc định. Mặc định thường là 3desvà bạn thường có thể làm -c des, vì vậy điều đó rõ ràng sẽ nhanh hơn và -c blowfishcũng được thể hiện nhanh như vậy, mặc dù tôi đã không kiểm tra chính xác.

(Quay lại thời của SSHv1, bạn có thể thường xuyên làm điều đó -c none, nhưng tôi đoán ai đó đã quyết định rằng đó là juju tồi.)


4

Nếu bạn phải trải qua scp / ssh, các thử nghiệm của tôi cho thấy rằng mật mã nhanh nhất được bật theo mặc định những ngày này là RC4. Bạn chỉ định mật mã thông qua ' -c arcfour ' trong lệnh ssh / scp của bạn:

cho bản sao ban đầu:

  • scp -c arcfour -r foo/ desthost:/destdir

để cập nhật:

  • rsync -e 'ssh -c arcfour' -r foo/ desthost:/destdir

3

Rsync là một cách tốt để đi bởi vì nếu bạn thấy mình chuyển cùng một tệp nhiều lần, nó sẽ tăng tốc độ sao chép, như được hiển thị với trích dẫn này từ trang man.

   rsync is a program that behaves in much the same way that rcp does, but
   has many more options and uses  the  rsync  remote-update  protocol  to
   greatly  speed  up  file  transfers  when the destination file is being
   updated.
   The rsync remote-update protocol allows rsync to transfer just the dif-
   ferences between two sets of files across the network connection, using
   an efficient  checksum-search  algorithm  described  in  the  technical
   report that accompanies this package.

2

FTP khá đơn giản, nhưng một cách thậm chí đơn giản hơn có thể là tạo một chia sẻ NFS trên một máy và gắn nó trên máy kia. Sau đó, sao chép các tập tin sẽ bao gồm thực hiện một cp từ thư mục này sang thư mục khác.


tùy theo yêu cầu. Tôi sẽ không sử dụng NFS trên Internet chẳng hạn.
Kyle Hodgson

1
Điểm tốt. Trong trường hợp đó, tôi khuyên dùng rsync vì nó có thể tiếp tục ở nơi bị tắt nếu bị gián đoạn. Cũng bởi vì nó chỉ chuyển delta giữa nguồn và đích.
Swoogan

Câu hỏi rất chung chung, tôi thích linh hồn được đăng bởi Swoogan, đặc biệt là tác giả đã đề cập rằng cần giải pháp đơn giản nhất và không yêu cầu mã hóa
integratorIT

2

Nếu bạn muốn tốc độ, bạn có thể sử dụng netcat và tar. Nó sẽ nhanh hơn ssh, rsync hoặc scp trên mạng cục bộ nơi mã hóa không phải là vấn đề đáng lo ngại. Google "netcat tar".

Máy chủ đích

nc -l -p 7878 | tar -C /target/dir -xzf -

Máy chủ nguồn

tar -cz /source/dir | nc DestinationServer 7878

Điều này rõ ràng đòi hỏi netcat thực sự được cài đặt. Google "netcat tar" để biết thêm.


1

Tôi tin rằng bạn đã giải quyết vấn đề của mình nhưng trong trường hợp ssh của bạn hoạt động trên một cổng khác (không phải trên cổng tiêu chuẩn 22), bạn có thể sử dụng điều này

rsync -avz --rsh = 'ssh -pXXXXX' / local / dir / root@192.168.1.2: / remote / dir

Lưu ý: - thay thế XXXXX bằng số cổng của bạn - thay thế 192.16.1.2 bằng IP máy chủ từ xa chính xá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.