Làm gián đoạn rsync với ctrl-c, tôi nên sử dụng `--partial` hay` --append`?


14

Tôi muốn làm gián đoạn rsyncvới ctrl-c(giả sử sau khi một nửa số tập tin đã chuyển giao) và tiếp tục mà không cần phải gửi lại dữ liệu đã được chuyển giao.

Thông tin stackexchange / google tôi tìm thấy có vẻ mâu thuẫn. Tôi tìm thấy một số người nói sử dụng --partialvà một số người nói sử dụng --append. Đối với tôi có vẻ như cả hai sẽ làm việc.

Nếu tôi muốn làm gián đoạn rsync với ctrl-c, tôi nên sử dụng --partialhay --append?

Nếu cả hai sẽ hoạt động, khi nào thì tốt hơn là sử dụng cái này với cái kia?

Câu trả lời:


8

Để khởi động lại, --partiallà đủ. Sử dụng --inplacenếu bạn thực sự không muốn rsynctạo một tệp tạm thời hợp nhất dữ liệu đã sao chép hiện có và dữ liệu mới, ví dụ nếu rsynccó vấn đề về quyền tạo tệp tạm thời trong thư mục đích.

Chỉ sử dụng --appendnếu bạn có thể đảm bảo rằng dữ liệu được sao chép một phần vẫn giống hệt với nguồn. (Nói chung đây là một tối ưu hóa sai.)


1
Vì vậy, khi tôi sử dụng các tùy chọn ở trên (thực tế là sử dụng --append-verify) và rsync vẫn tuyên bố rằng nó đang bắt đầu từ đầu và tôi không thấy bất kỳ thay đổi nào về kích thước tệp và thời gian tệp còn lại là ban đầu Khi tôi bắt đầu sao chép, rsync có nói dối không, hay tôi nên lo lắng?
Michael

@Michael nếu bạn có một nguồn địa phương và đích tất cả các quy tắc thay đổi.
roaima

Tôi đã thực hiện nó trên mạng LAN, nhưng sau khi thử nghiệm thêm một chút, có vẻ như vấn đề là vì --append-verifythực sự phải đọc các phần của tập tin ở cả hai bên, nên không thể nhanh hơn do tắc nghẽn là một ổ đĩa cũ ở phía đọc và không phải là mạng LAN.
Michael

@Michael cũng có, nếu bạn đã yêu cầu xác minh dữ liệu đã được truyền thì nó phải đọc dữ liệu!
roaima

1
@alper Tôi chưa bao giờ nhận thấy tùy chọn đó trước đây. Có vẻ như nó là tốt nhất để sử dụng --partial-dir, nhưng tôi chưa thử nó.
roaima

3
  • --append giả sử tập tin có thể đã tồn tại ở đích, nó chỉ khiến rsync không kiểm tra nội dung đã có ở đó (nhưng xem bên dưới).
  • --partial nói với rsync để không xóa các tập tin được chuyển một phần.

Bạn cũng sẽ cần --inplacevới --partial(nó được ngụ ý --append).

Hóa ra --inplacethực sự ngụ ý --partial, đây là lý do tại sao --appendlà đủ (nó ngụ ý --inplacemà ngụ ý --partial). Nhưng --partialmột mình là không đủ, bạn cần --inplace, nếu không, rsync tạo các tệp tạm thời thay vì cập nhật tệp cuối cùng.


Nếu tôi muốn rsync ngắt với ctrl-c, tôi sẽ sử dụng --append? Bởi vì --partialchính nó sẽ không tiếp tục.
Trevor Boyd Smith

Tôi chỉ sử dụng --inplace. rsync "luôn tiếp tục" (nó cố gắng truyền dữ liệu tối thiểu cần thiết). Điều gì --appendlàm cho rsync không kiểm tra dữ liệu đã đến đích, vì vậy nếu tệp một phần tại đích bị hỏng, nó sẽ bị hỏng với --append. --appendcó thể thú vị nếu, giả sử, tệp một phần rất lớn và bạn không thể chờ đợi (và chắc chắn hoặc không quan tâm nếu nó bị hỏng) hoặc một số tình huống cụ thể khác.
spuk

1
trên Fedora 20 man rsynctùy chọn --appendcho biết... Implies --inplace
Trevor Boyd Smith

1
--inplacesẽ làm việc. --appendsẽ hoạt động vì (như tôi đã nói trong câu trả lời) nó ngụ ý --inplace, nó ngụ ý --partial(sẽ giữ các tệp được chuyển một phần khi bị ngắt bởi Ctrl-c, đó là câu hỏi ban đầu). Vì vậy, --appendcó nghĩa là "làm như --inplace, nhưng đừng kiểm tra những gì đã đến đích . Đó là một sự khác biệt quan trọng. Nếu bạn không quan tâm đến nó, hãy sử dụng một trong hai.
spuk

1
vậy thì quan điểm của --partial KHÔNG CÓ --inplace
Evan Carroll
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.