rsync qua VPN: một lần thử lại tái sử dụng lần truyền đã đứt
Một đường hầm rớt kết thúc kết nối, không phải dữ liệu. Giữ lại đoạn với --partial-dir, chạy lại đúng bản sao đó và xác minh tệp trước khi công bố.
Lần tải lên của bạn dừng ở bốn gigabyte của một kho lưu trữ mười hai gigabyte, và thói quen học được từ trình quản lý tải xuống bảo hãy bấm tiếp tục. rsync sẽ không tiếp tục luồng TCP, vì luồng đó đã biến mất cùng lần truyền lại cuối cùng của đường hầm. Điều nó có thể làm là giữ lại những byte đã nhận và dùng chúng làm cơ sở cho lần thử tiếp theo, một cơ chế khác với một bộ quy tắc khác. Các cờ bạn chọn quyết định việc tái sử dụng đó có xảy ra hay không.
Lần thử mới dựng lại trạng thái, nó không tiếp tục luồng
Khi phiên SSH rớt, ở đầu xa chỉ còn lại những gì đã kịp ghi xuống đĩa, và không gì khác. Không có token phiên để gắn lại và không có số thứ tự để phát lại. Lần chạy tiếp theo mở một kết nối mới, đọc lại nguồn và hỏi bên nhận xem nó đã có gì.
Chính câu hỏi cuối đó giải thích vì sao giữ lại một tệp dở dang là đáng. Bản sao của bên nhận cho rsync thứ để so sánh, và thuật toán chỉ gửi những khác biệt mà nó nhận ra được. Đây vẫn là một lần truyền siêu dữ liệu mới và một lượt duyệt mới qua nguồn, nên thời gian tiết kiệm được tỷ lệ với phần tệp khớp nhau, không phải với việc kết nối trước đã đi được bao xa. Nếu bên nhận không giữ gì cả, lần thử tiếp theo là bản sao đầy đủ, bất kể lần đầu đã chuyển bao nhiêu gigabyte.
Quyết định nơi đoạn tái sử dụng được sống
Hành vi mặc định ghi tệp dở dang vào đường dẫn đích, khiến một kho lưu trữ viết dở hiện ra dưới tên cuối cùng. --partial-dir chuyển nó vào một thư mục bạn chọn, và hướng dẫn mô tả thư mục đó là được giữ lại để một lần truyền sau dùng làm dữ liệu. Một tên tương đối được phân giải bên trong thư mục đích, đúng là thứ bạn muốn khi hai đầu có thể có bố cục khác nhau.
rsync -e ssh --partial-dir=.rsync-partial --info=progress2 -- \
large-archive.bin [email protected]:/srv/incoming/
Thứ tự cũng quan trọng ở đích: thư mục dở dang cần đủ chỗ cho đoạn, và ổ đĩa cần đủ chỗ cho tệp hoàn chỉnh nữa. Làm đầy ổ đích giữa lúc truyền tạo ra một lỗi trông như sự cố mạng nhưng không phải, và nó có thể để lại đoạn đã giữ bị cắt cụt. Kiểm tra dung lượng trống trên máy nhận trước khi lần chạy bắt đầu, không phải sau khi nó thất bại. Vài giây với df -h trên cùng đường SSH là phép thử rẻ nhất có thể của kế hoạch.
Quyền truy cập là mối lo nhỏ hơn nhưng có thật. Một thư mục dở dang mà các tài khoản không liên quan ghi được sẽ cho phép người khác thay nội dung mà lần chạy sau của bạn sẽ coi là đã nhận. Giữ nó thuộc sở hữu của tài khoản truyền, và đừng đặt nó ở nơi các dịch vụ khác công bố.
Chạy đúng bản sao đó, không phải bản khôn ngoan hơn
Việc tái sử dụng chỉ áp dụng khi nguồn và đích vẫn mô tả cùng một đối tượng. Cùng đường dẫn, cùng tên, cùng tệp. Đổi tên nguồn hoặc trỏ tới thư mục đích khác sẽ bắt đầu một so sánh mới với thứ chẳng ích gì.
Đừng thêm --whole-file trong khi chờ hành vi delta. Tùy chọn đó bảo rsync sao chép toàn bộ tệp mà không so sánh tổng kiểm tra cuốn, một lựa chọn hợp lý trên liên kết cục bộ nhanh và chính xác là sai sau một lần tải lên đường dài thất bại. --inplace cũng đổi câu chuyện: nó ghi trực tiếp vào tệp đích, nên một ngắt quãng để lại tệp trộn lẫn nội dung cũ và mới mà không có đoạn riêng để lùi về.
Dòng tiến trình báo tiến độ tổng của lần truyền. Đó không phải tín hiệu hoàn tất. Một con số chạm một trăm phần trăm khi kết nối vẫn còn mở nghĩa là dữ liệu đã được đẩy đi, không phải bên nhận đã đổi tên, đồng bộ hay chấp nhận gì.
Chỉ chấp nhận đối tượng sau khi nó khớp
Xác nhận trạng thái thoát trước, rồi so sánh kết quả thay vì tin vào việc không có lỗi. Kiểm tra kích thước bắt được phần lớn các lần truyền bị cắt cụt; so sánh tổng kiểm tra bắt phần còn lại, và cả hai đều rẻ so với việc chạy lại lần tải lên.
Nếu kho lưu trữ được công bố bởi một tiến trình hạ nguồn, hãy để tiến trình đó chờ tệp đã được chấp nhận. Một đoạn đã giữ rơi vào thư mục được theo dõi dưới tên cuối cùng sẽ bị lần quét tiếp theo nhặt lấy, và lỗi của bên tiêu thụ sẽ là về đầu vào hỏng chứ không phải về một lần truyền chưa bao giờ kết thúc.
Đừng chạm vào nguồn cho tới khi bên nhận xác nhận. Tạo lại kho lưu trữ giữa các lần thử sẽ đổi cơ sở so sánh, và lần chạy tiếp theo hoặc truyền gần như mọi thứ hoặc tạo ra một tệp không khớp với nguồn cũ lẫn nguồn mới.
Khi giới hạn là liên kết, không phải cờ
Chi phí tiêu đề và giao thức là một khoản của lần truyền, và hiếm khi là khoản quyết định một tệp lớn mất bao lâu. Hành vi khởi động lại quan trọng hơn: một phương pháp sống sót qua cú ngắt mà không cần bước thủ công giao được tệp dùng được sớm hơn một phương pháp nhanh hơn phải bắt đầu lại. Lưu trữ ở hai đầu và đường xác thực thuộc cùng một so sánh.
So sánh các đường thay thế được phép với cùng tệp và cùng đích, và ghi lại mỗi đường khởi động lại từ đâu sau một ngắt quãng. Cột duy nhất đó cho bạn biết nhiều hơn về một lần tải lên mười hai gigabyte qua VPN so với bất kỳ tốc độ đỉnh nào đo được trong một thử nghiệm ngắn.