it-swarm-vi.tech

Sao chép một cây thư mục lớn cục bộ? cp hay rsync?

Tôi phải sao chép một cây thư mục lớn, khoảng 1,8 TB. Đó là tất cả địa phương. Theo thói quen, tôi sẽ sử dụng rsync, tuy nhiên tôi tự hỏi liệu có nhiều điểm không và liệu tôi có nên sử dụng cp.

Tôi lo lắng về quyền và uid/gid, vì chúng phải được giữ trong bản sao (tôi biết rsync làm điều này). Cũng như những thứ như symlink.

Đích đến trống, vì vậy tôi không phải lo lắng về việc cập nhật có điều kiện một số tệp. Đó là tất cả đĩa cục bộ, vì vậy tôi không phải lo lắng về ssh hoặc mạng.

Lý do tôi bị cám dỗ khỏi rsync, là vì rsync có thể làm nhiều hơn tôi cần. tập tin tổng kiểm tra rsync. Tôi không cần điều đó, và lo ngại rằng nó có thể mất nhiều thời gian hơn cp.

Vậy bạn nghĩ gì, rsync hoặc cp?

244
Rory

Tôi sẽ sử dụng rsync vì điều đó có nghĩa là nếu nó bị gián đoạn vì bất kỳ lý do gì, thì bạn có thể khởi động lại nó dễ dàng với rất ít chi phí. Và là rsync, nó thậm chí có thể khởi động lại một phần thông qua một tệp lớn. Như những người khác đề cập, nó có thể loại trừ các tập tin dễ dàng. Cách đơn giản nhất để bảo tồn hầu hết mọi thứ là sử dụng cờ -a - ‘kho lưu trữ. Vì vậy:

rsync -a source dest

Mặc dù UID/GID và các liên kết tượng trưng được bảo tồn bởi -a (Xem -lpgo), Câu hỏi của bạn ngụ ý rằng bạn có thể muốn một đầy đủ bản sao thông tin hệ thống tệp; và -a không bao gồm các liên kết cứng, thuộc tính mở rộng hoặc ACL (trên Linux) hoặc ở trên cũng không forks tài nguyên (trên OS X.) Do đó, để sao chép mạnh mẽ một hệ thống tập tin, bạn sẽ cần bao gồm các cờ đó:

rsync -aHAX source dest # Linux
rsync -aHE source dest  # OS X

Cp mặc định sẽ bắt đầu lại, mặc dù cờ -u Sẽ "chỉ sao chép khi tệp SOURCE mới hơn tệp đích hoặc khi tệp đích bị thiếu". Và cờ -a (Lưu trữ) sẽ được đệ quy, không phải tệp recopy nếu bạn phải khởi động lại và giữ quyền. Vì thế:

cp -au source dest
214
Hamish Downer

Khi sao chép vào hệ thống tệp cục bộ, tôi có xu hướng sử dụng rsync với các tùy chọn sau:

# rsync -avhW --no-compress --progress /src/ /dst/

Đây là lý do của tôi:

-a is for archive, which preserves ownership, permissions etc.
-v is for verbose, so I can see what's happening (optional)
-h is for human-readable, so the transfer rate and file sizes are easier to read (optional)
-W is for copying whole files only, without delta-xfer algorithm which should reduce CPU load
--no-compress as there's no lack of bandwidth between local devices
--progress so I can see the progress of large files (optional)

Tôi đã thấy chuyển khoản nhanh hơn 17% bằng cách sử dụng cài đặt rsync ở trên qua lệnh tar sau như được đề xuất bởi câu trả lời khác:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)
120
Ellis Percival

Khi tôi phải sao chép một lượng lớn dữ liệu, tôi thường sử dụng kết hợp tar và rsync. Vượt qua đầu tiên là tar nó, một cái gì đó như thế này:

# (cd /src; tar cf - .) | (cd /dst; tar xpf -)

Thông thường với một số lượng lớn các tệp, sẽ có một số tar không thể xử lý vì bất kỳ lý do gì. Hoặc có thể quá trình sẽ bị gián đoạn hoặc nếu đó là di chuyển hệ thống tệp, bạn có thể muốn thực hiện sao chép ban đầu trước bước di chuyển thực tế. Ở bất kỳ giá nào, sau bản sao ban đầu, tôi thực hiện bước rsync để đồng bộ hóa tất cả:

# cd /dst; rsync -avPHSx --delete /src/ .

Lưu ý rằng dấu gạch chéo trên /src/ là quan trọng.

79
Chad Huneycutt

rsync

Đây là rsync tôi sử dụng, tôi thích cp cho các lệnh đơn giản, không phải cái này.

$ rsync -ahSD --ignore-errors --force --delete --stats $SRC/ $DIR/

cpio

Đây là một cách thậm chí còn an toàn hơn, cpio. Nó nhanh như tar, có thể nhanh hơn một chút.

$ cd $SRC && find . -mount -depth -print0 2>/dev/null | cpio -0admp $DEST &>/dev/null

tar

Điều này cũng tốt, và tiếp tục thất bại đọc.

$ tar --ignore-failed-read -C $SRC -cf - . | tar --ignore-failed-read -C $DEST -xf -

Lưu ý rằng tất cả chỉ dành cho bản sao địa phương.

14
AskApache

Bất cứ thứ gì bạn thích. Đừng quên -a chuyển đổi khi bạn quyết định sử dụng cp.

Nếu bạn thực sự cần một câu trả lời: Tôi sẽ sử dụng rsync vì nó linh hoạt hơn nhiều. Cần tắt máy trước khi sao chép hoàn tất? Chỉ cần ctrl-c và tiếp tục ngay sau khi trở lại. Cần loại trừ một số tập tin? Chỉ dùng --exclude-from. Cần thay đổi quyền sở hữu hoặc quyền? rsync sẽ làm điều đó cho bạn.

7
innaM

Lệnh rsync luôn tính toán tổng trên mỗi byte mà nó truyền.

Tùy chọn dòng lệnh --checksum chỉ liên quan đến việc tổng kiểm tra các tệp có được sử dụng để xác định tệp nào sẽ chuyển hay không, tức là:

-c, --checksum bỏ qua dựa trên tổng kiểm tra, không phải thời gian và kích thước mod "

Trang này cũng nói điều này:

Lưu ý rằng rsync luôn xác minh rằng mỗi tệp được chuyển đã được xây dựng lại một cách chính xác ở phía bên nhận bằng cách kiểm tra tổng kiểm tra toàn bộ tệp của nó, nhưng xác minh sau khi chuyển tự động không liên quan gì đến tùy chọn này trước khi chuyển " để được cập nhật? " kiểm tra.

Vì vậy, rsync cũng vậy, luôn luôn, tính toán tổng kiểm tra toàn bộ tệp ở phía bên nhận, ngay cả khi -c/ --checksum tùy chọn là "tắt".

7
John

rsync -aPhW --protocol=28 giúp tăng tốc các bản sao lớn đó với RSYNC. Tôi luôn đi rsync bởi vì suy nghĩ giữa chừng 90GiB và điều đó làm tôi sợ CP

6
oneguynick

Chủ đề này rất hữu ích và vì có rất nhiều lựa chọn để đạt được kết quả, tôi quyết định chấm điểm vài trong số chúng. Tôi tin rằng kết quả của tôi có thể hữu ích cho những người khác có ý thức về những gì làm việc nhanh hơn.

Để di chuyển 532Gb dữ liệu được phân phối giữa 1.753.200 tệp chúng tôi đã có những lần đó:

  • rsync mất 232 phút
  • tar mất 206 phút
  • cpio mất 225 phút
  • rsync + parallel mất 209 phút

Trong trường hợp của tôi, tôi thích sử dụng rsync + parallel. Tôi hy vọng thông tin này sẽ giúp nhiều người quyết định trong số các lựa chọn thay thế này.

Điểm chuẩn hoàn chỉnh được công bố tại đây

6
arjones

rsync là tuyệt vời, nhưng có vấn đề với các cây thư mục thực sự lớn vì nó lưu trữ các cây trong bộ nhớ. Tôi chỉ tìm kiếm xem họ có khắc phục được vấn đề này không khi tôi tìm thấy chủ đề này.

Tôi cũng tìm thấy:

http://matthew.mceachen.us/geek/gigasync/

Bạn cũng có thể tự ngắt cây và chạy nhiều rsyncs.

5
n3bulous

Khi thực hiện một bản sao thư mục cục bộ, kinh nghiệm của tôi là "cp -van src Dest" nhanh hơn 20% so với rsync. Theo như khả năng khởi động lại, đó là những gì "-n" làm. Bạn chỉ cần rm các tập tin sao chép một phần. Không đau trừ khi đó là ISO hoặc một số như vậy.

3
Ron

ARJ IS SO TRƯỜNG OLD !! Tôi thực sự nghi ngờ rằng ARJ và/hoặc rsync sẽ mang lại hiệu suất.

Chắc chắn những gì tôi luôn làm là sử dụng cpio:

find . -print | cpio -pdm /target/folder

Điều này gần như nhanh hơn CP, chắc chắn nhanh hơn tar và không có bất cứ điều gì.

2
Gonzalo Gorosito

Bạn chắc chắn muốn cho rclone một lần thử. Điều này thật điên rồ:

Sudo rclone sync /usr /home/fred/temp -P -L --transfers 64

Transferred:       17.929G / 17.929 GBytes, 100%, 165.692 MBytes/s, ETA 0s
Errors:                75 (retrying may help)
Checks:            691078 / 691078, 100%
Transferred:       345539 / 345539, 100%
Elapsed time:     1m50.8s

Đây là bản sao cục bộ từ và sang ổ SSD LITEONIT LCS-256 (256GB).

Bạn có thể thêm --ignore-checksum trong lần chạy đầu tiên để làm cho nó nhanh hơn nữa.

1
Frédéric N.

Cả hai sẽ hoạt động tốt.

0
pauska

Có một số tăng tốc có thể được áp dụng cho rsync:

Tránh

  • -z/--compress: nén sẽ chỉ tải lên CPU vì quá trình truyền không qua mạng mà qua RAM.
  • --append-verify: tiếp tục chuyển khoản bị gián đoạn. Điều này nghe có vẻ là một ý tưởng tốt, nhưng nó có trường hợp thất bại nguy hiểm: bất kỳ tệp đích nào có cùng kích thước (hoặc lớn hơn) so với nguồn sẽ được IGNORED. Ngoài ra, nó kiểm tra toàn bộ tập tin ở cuối, có nghĩa là không tăng tốc đáng kể so với --no-whole-file trong khi thêm một trường hợp thất bại nguy hiểm.

Sử dụng

  • -S/--sparse: biến chuỗi null thành các khối thưa thớt
  • --partial hoặc là -P đó là --partial --progress: lưu mọi tệp được chuyển một phần để tiếp tục trong tương lai. Lưu ý: các tệp sẽ không có tên tạm thời, vì vậy hãy đảm bảo rằng không có gì khác mong đợi sử dụng đích cho đến khi toàn bộ bản sao hoàn thành.
  • --no-whole-file để bất cứ điều gì cần phải bực bội đều sử dụng chuyển delta. Đọc một nửa tệp được chuyển một phần thường nhanh hơn nhiều so với viết lại.
  • --inplace để tránh sao chép tệp (nhưng chỉ khi không có gì đang đọc đích cho đến khi toàn bộ quá trình chuyển hoàn thành)
0
Tom Hale

tar cũng sẽ thực hiện công việc, nhưng sẽ không tiếp tục bị gián đoạn như rsync.

0
pgs

Nếu bạn sử dụng ARJ thì sao?

arj a -jm -m1 -r -je filepack /source

ở đâu -jm -m1 là các mức nén và -je làm cho nó thực thi được. Bây giờ bạn có một bash tập tin đóng gói.

Sau đó để trích xuất vào bản đồ đích

filepack -y  

nơi bản đồ nguồn sẽ được tạo ra (trong đó -y luôn được chấp nhận, ghi đè, bỏ qua, v.v.)

Sau đó, người ta có thể scp ftp filepack đến khu vực đích và thực hiện nó, nếu điều đó là có thể.

0
herauthon