Chuyển 15TB tệp nhỏ


79

Tôi đang lưu trữ dữ liệu từ máy chủ này sang máy chủ khác. Ban đầu tôi bắt đầu một rsynccông việc. Phải mất 2 tuần để nó xây dựng danh sách tệp chỉ với 5 TB dữ liệu và một tuần nữa để truyền 1 TB dữ liệu.

Sau đó, tôi đã phải giết công việc khi chúng tôi cần một chút thời gian trên máy chủ mới.

Chúng tôi đã đồng ý rằng chúng tôi sẽ đưa nó lên vì có lẽ chúng tôi sẽ không cần phải truy cập lại. Tôi đã nghĩ đến việc chia nó thành khối 500 GB. Sau tarđó tôi sẽ sao chép nó xuyên suốt ssh. Tôi đã sử dụng tarpigznó vẫn còn quá chậm.

Có cách nào tốt hơn để làm điều đó? Tôi nghĩ rằng cả hai máy chủ đều trên Redhat. Máy chủ cũ là Ext4 và máy chủ mới là XFS.

Kích thước tệp nằm trong khoảng từ vài kb đến vài mb và có 24 triệu jpeg trong 5TB. Vì vậy, tôi đoán khoảng 60-80 triệu cho 15TB.

chỉnh sửa: Sau khi chơi với rsync, nc, tar, mbuffer và pigz trong một vài ngày. Nút thắt sẽ là đĩa IO. Vì dữ liệu bị sọc trên 500 đĩa SAS và khoảng 250 triệu jpeg. Tuy nhiên, bây giờ tôi đã biết về tất cả những công cụ tuyệt vời này mà tôi có thể sử dụng trong tương lai.


1
có thể trùng lặp linux sang linux, chuyển 10TB?
D34DM347

2
Một tùy chọn là tạo các tệp tar được nén trên một ổ đĩa ngoài và di chuyển nó sang hệ thống mới. Đĩa phụ sẽ tăng tốc độ tạo các tệp tar (sẽ không được ghi vào các đĩa hiện có trong hệ thống, có thể trong khi cố gắng đọc 15TB từ chúng) và không buộc máy chủ mới.
Brian

4
Có cách nào tốt hơn để làm điều đó? - Vâng, bản sao Windows Server 2012 R2 DFS sẽ chuẩn bị trong khoảng 10 giờ . Và nó sẽ đồng bộ hóa các thay đổi và chọn nơi nó dừng lại sau khi khởi động lại.
TessellatingHeckler

27
@TessellatingHeckler: vậy bạn có đề nghị OP di chuyển từ Redhat sang Windows trước khi lưu trữ không?
Thomas Weller

12
@ThomasWeller Họ hỏi "có cách nào tốt hơn không?", Và có. Tôi không khuyến nghị rằng họ sử dụng cách tốt hơn. Họ có thể tự do sử dụng các lệnh trong một đường ống không thể phục hồi sau khi bị gián đoạn, sẽ không xác minh nội dung tệp, không thể báo cáo trạng thái sao chép, không thể sử dụng các khối được sao chép trước đó để tránh sao chép các phần của tệp, không ẩn hỗ trợ sao chép mức độ ưu tiên thấp, không thể tạm dừng, không đề cập đến việc sao chép ACL và cần ai đó đăng nhập để chạy nó. Tuy nhiên, bất kỳ ai khác cũng có thể quan tâm - hoặc được nhắc nói "x làm điều đó trên Linux".
TessellatingHeckler

Câu trả lời:


64

Tôi đã có kết quả rất tốt khi sử dụng tar, pigz(gzip song song) và nc.

Nguồn máy:

tar -cf - -C /path/of/small/files . | pigz | nc -l 9876

Máy đích:

Để giải nen:

nc source_machine_ip 9876 | pigz -d | tar -xf - -C /put/stuff/here

Để lưu trữ:

nc source_machine_ip 9876 > smallstuff.tar.gz

Nếu bạn muốn xem tốc độ chuyển chỉ cần thông qua pvsau pigz -d!


3
FYI, bạn có thể thay thế pigzbằng gziphoặc loại bỏ nó hoàn toàn, nhưng tốc độ sẽ chậm hơn đáng kể.
h0tw1r3

10
Làm thế nào điều này có thể được chấp nhận nếu OP đã thử tarpigz? Tôi không hiểu ...
Thomas Weller

5
@ThomasWeller bạn đã lấy nó ở pigzđâu? Từ câu hỏi, có vẻ như anh ta chỉ cố gắng rsynccho đến nay, và đang xem xét sử dụng tarđể phân tách và bó dữ liệu. Đặc biệt là nếu anh ta chưa sử dụng tùy chọn -z/ --compresstrên rsync, pigzvề mặt lý thuyết có thể giúp ích đáng kể.
Doktor J

1
@ThomasWeller vâng, thực sự tôi đã thử tar và pigz nhưng không phải nc. Tôi đã sử dụng ssh vì vậy nó đã thêm rất nhiều chi phí.
lbanz

2
@lbanz điều đó đơn giản có nghĩa tarlà không tạo ra dữ liệu đủ nhanh pigzđể sử dụng nhiều CPU để nén. Đọc nhiều tệp nhỏ liên quan đến nhiều tòa nhà hơn, nhiều lần tìm đĩa hơn và nhiều chi phí nhân hơn so với việc đọc cùng một số byte của các tệp lớn hơn và có vẻ như bạn chỉ đơn giản là bị tắc nghẽn ở mức cơ bản.
hobbs

21

Tôi muốn sử dụng giải pháp rsync. Rsync hiện đại (3.0.0+) sử dụng danh sách tệp gia tăng, do đó không phải xây dựng danh sách đầy đủ trước khi chuyển. Vì vậy, khởi động lại nó sẽ không yêu cầu bạn thực hiện lại toàn bộ chuyển khoản trong trường hợp gặp sự cố. Chia tách chuyển trên mỗi thư mục cấp cao nhất hoặc thứ hai sẽ tối ưu hóa điều này hơn nữa. (Tôi sẽ sử dụng rsync -a -Pvà thêm --compressnếu mạng của bạn chậm hơn ổ đĩa.)


Tôi đang sử dụng rsync 2.6.8 trên máy chủ cũ. Vì đây là một trong những hộp mà chúng tôi không được phép cài đặt / cập nhật bất cứ điều gì theo quy định của nhà cung cấp hoặc nó không bảo hành. Tôi có thể cập nhật nó và xem nếu nó nhanh hơn.
lbanz

18
Tìm (hoặc xây dựng) một nhị phân rsync được liên kết tĩnh và chỉ cần chạy nó từ nhà của bạn. Hy vọng rằng sẽ không làm hỏng bảo hành.
Fox

Thế còn unison? Làm thế nào để nó so sánh với rsync?
Gwyneth Llewelyn

15

Thiết lập VPN (nếu là internet), tạo một ổ đĩa ảo có định dạng trên máy chủ từ xa (tạo thành ext4), gắn nó vào máy chủ từ xa, sau đó gắn nó vào máy chủ cục bộ (sử dụng giao thức cấp khối như iSCSI ) và sử dụng dd hoặc công cụ cấp khối khác để thực hiện chuyển. Sau đó, bạn có thể sao chép các tệp từ ổ đĩa ảo sang ổ đĩa thực (XFS) một cách thuận tiện.

Hai lý do:

  1. Không có hệ thống tập tin, đó là thủ phạm hiệu suất chính
  2. Không tìm kiếm, bạn đang xem đọc / ghi tuần tự ở cả hai bên

3
Bỏ qua hệ thống tập tin là tốt. Sao chép cấp độ khối của hệ thống tập tin gắn kết đọc-ghi là một ý tưởng thực sự tồi tệ. Ngắt kết nối hoặc gắn kết chỉ đọc đầu tiên.
JB.

Có một bản sao 15TB hút, quá. Điều đó có nghĩa là máy chủ mới cần tối thiểu 30.
Arthur Kay

3
Nếu máy chủ đang sử dụng LVM, người ta có thể thực hiện một ảnh chụp nhanh chỉ đọc của hệ thống tập tin và sao chép nó. Không gian trên không chỉ dành cho những thay đổi trong hệ thống tập tin xảy ra trong khi ảnh chụp nhanh được đọc.
liori

9

Nếu máy chủ cũ đang ngừng hoạt động và các tệp có thể ngoại tuyến trong vài phút thì thường là nhanh nhất chỉ cần rút các ổ đĩa ra khỏi hộp cũ và cáp chúng vào máy chủ mới, gắn chúng (quay lại trực tuyến ngay bây giờ) và sao chép các tệp đến các máy chủ mới đĩa gốc.


2
Đó là khoảng 1PB ổ đĩa 2TB nên quá nhiều.
lbanz

3

Sử dụng mbuffer và nếu nó nằm trên một mạng an toàn, bạn có thể tránh bước mã hóa.


3

(Nhiều câu trả lời khác nhau có thể hoạt động. Đây là một câu trả lời khác.)

Tạo danh sách tệp với find -type f(việc này sẽ hoàn thành sau vài giờ), chia nó thành các phần nhỏ và chuyển từng đoạn bằng cách sử dụng rsync --files-from=....


3

Bạn đã xem xét sneakernet? Với điều đó, tôi có nghĩa là chuyển tất cả mọi thứ vào cùng một ổ đĩa, sau đó di chuyển vật lý ổ đĩa đó qua.

khoảng một tháng trước, Samsung đã tiết lộ một ổ đĩa 16 TB (về mặt kỹ thuật, đó là 15,36 TB), cũng là một ổ SSD: http://www.theverge.com/2015/8/14/9153083/samsung-worlds-largest-hard -drive-16tb

Tôi nghĩ rằng ổ đĩa này sẽ làm điều này. Bạn vẫn phải sao chép tất cả các tệp, nhưng vì bạn không có độ trễ mạng và có thể có thể sử dụng SATA hoặc một kỹ thuật nhanh tương tự, nên nó sẽ nhanh hơn rất nhiều.


2

Nếu có bất kỳ cơ hội nào để có được tỷ lệ thành công cao khi bị trùng lặp, tôi sẽ sử dụng một cái gì đó như borgbackup hoặc Attic.

Nếu không, hãy kiểm tra giải pháp netcat + tar + pbzip2 , điều chỉnh các tùy chọn nén theo phần cứng của bạn - kiểm tra nút cổ chai (CPU? Mạng là gì? IO?). Pbzip2 sẽ trải dài trên tất cả các CPU, cho hiệu năng tốt hơn.


lzma ( xz) giải nén nhanh hơn bzip2 và hoạt động tốt trên hầu hết các đầu vào. Thật không may, xztùy chọn đa luồng chưa được triển khai.
Peter Cordes

Thông thường giai đoạn nén cần nhiều mã lực hơn giải nén, vì vậy nếu CPU là yếu tố giới hạn, pbzip2 sẽ mang lại hiệu suất tổng thể tốt hơn. Giải nén không ảnh hưởng đến quá trình, nếu cả hai máy đều giống nhau.
neutrinus

Vâng, quan điểm của tôi là thật xấu hổ vì không có lzma đa luồng đơn luồng. Mặc dù đối với trường hợp sử dụng này, việc chuyển toàn bộ hệ thống tệp dữ liệu, pigzsẽ có thể xảy ra. là máy nén chậm nhất bạn muốn sử dụng. Hoặc thậm chí lz4. (Có một lz4mtđa luồng-cho-một-đơn dòng có sẵn Nó không phải là thread rất hiệu quả (sinh ra các luồng mới rất thường xuyên), nhưng nó không có được một sự tăng tốc rắn.)
Peter Cordes

2

Bạn đang sử dụng RedHat Linux, vì vậy điều này sẽ không áp dụng, nhưng như một tùy chọn khác:

Tôi đã thành công lớn khi sử dụng ZFS để giữ hàng triệu tệp vì inodes không phải là vấn đề.

Nếu đó là một tùy chọn cho bạn, thì bạn có thể chụp ảnh nhanh và sử dụng zfs để gửi các bản cập nhật gia tăng. Tôi đã có rất nhiều thành công khi sử dụng phương pháp này để chuyển cũng như lưu trữ dữ liệu.

ZFS chủ yếu là một hệ thống tập tin Solaris, nhưng có thể được tìm thấy trong illumos (ngã ba mã nguồn mở của SunS OpenSolaris). Tôi biết cũng đã có một số may mắn khi sử dụng ZFS trong BSD và Linux (sử dụng FUSE?) - nhưng tôi không có kinh nghiệm về việc thử nó.


3
Hiện tại đã có một cổng ZFS không phải là FUSE của Linux: zfsonlinux.org
EEAA

1

Bắt đầu một rsyncdaemon trên máy mục tiêu. Điều này sẽ tăng tốc quá trình chuyển giao rất nhiều.


-1

Bạn có thể làm điều này chỉ với tar và ssh, như thế này:

tar zcf - <your files> | ssh <destination host> "cat > <your_file>.tar.gz"

Hoặc, nếu bạn muốn giữ các tệp riêng lẻ:

tar zcf - <your files> | ssh <destination host> "tar zxf -"


1
Nó sẽ không lặp lại, không có cách nào để tiếp tục, nén chỉ bằng một CPU.
neutrinus
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.