liên kết rsync và tượng trưng


69

Tôi muốn sao lưu thư mục nhà của mình vào một ổ đĩa ngoài hàng đêm bằng cách sử dụng một croncông việc để thực thi rsync. Tôi không chắc về hành vi chính xác của rsynccác cờ liên kết tượng trưng.

  1. rsync's -acờ bao gồm các -lcờ (tức là 'sao chép liên kết tượng trưng như symlink'). Điều này chỉ có nghĩa là nó sẽ sao chép liên kết hoặc nó sẽ theo liên kết và sao chép mọi thứ trong thư mục liên kết? Tôi muốn tránh điều đó bởi vì tôi có các liên kết đến các thư mục chứa đầy các tệp phương tiện có liên quan đến việc sao chép hàng trăm gigabyte mà tôi không cần sao lưu.
  2. Lo sợ (nhưng không chắc chắn) rsync -asẽ sao chép tất cả các tệp phương tiện mà tôi đã thêm --no-linkscờ. Đây dường như không phải là hành vi tôi muốn. Nó chỉ bỏ qua việc sao chép bất kỳ liên kết nào có vấn đề vì tôi có các liên kết tôi muốn sao chép (ví dụ: liên kết đến các tệp tiêu đề phổ biến từ các thư mục dự án khác nhau).
  3. Giả sử số 1 ở trên (không có --no-linkscờ) là điều tôi thực sự muốn và nó chỉ sao chép liên kết mà không sao chép các tệp được liên kết đến, liệu các liên kết có bị phá vỡ khi chúng được sao lưu không? Ví dụ tôi có thể rsyncnguồn thư mục /home/me/projects/miscđến /media/extdrive/backup/home/me/projects/misc. Trong trường hợp này, tôi cho rằng rsynckhông đủ thông minh và cũng không cố gắng sửa nội dung của các liên kết tượng trưng cho các thay đổi thư mục tương đối. Điều này có đúng không? Điều này không sao, không vấn đề gì nếu các liên kết bị hỏng trong các thư mục sao lưu miễn là chúng sẽ được sửa chữa và hoạt động nếu thời gian đó đến khi chúng cần được khôi phục.

3
Cờ -L có lẽ là những gì bạn muốn. Từ trang man rsync trên Centos Linux: "-L, --copy-links chuyển đổi liên kết tượng trưng thành tệp / thư mục tham chiếu." Tôi khuyên bạn nên thử nghiệm điều này với một số thư mục và liên kết mẫu để đảm bảo bạn không ghi đè lên bất kỳ dữ liệu nào mà bạn không có ý định. Chỉnh sửa để bao gồm cảnh báo về mất dữ liệu có thể. ;)
Mick T

Câu trả lời:


90
  1. "Sao chép liên kết tượng trưng dưới dạng liên kết tượng trưng" có nghĩa chính xác như những gì nó nói: Nếu rsync thấy một liên kết tượng trưng trong thư mục nguồn, nó sẽ tạo ra một liên kết tượng trưng giống hệt nhau ở đích. Chỉ có bấy nhiêu thôi.

    (Một vài dòng trong trang thủ công, một tùy chọn khác--copy-links , mô tả hành vi ngược lại (luôn sao chép dữ liệu) mà bạn mô tả là không mong muốn.)

    Xem thêm phần "Liên kết tượng trưng":

    Nếu --linksđược chỉ định, thì các liên kết tượng trưng được tạo lại với cùng một mục tiêu trên đích.

  2. Đó không phải là hành vi bạn muốn bởi vì bạn đang hiểu sai những gì --linksvà do đó yêu cầu hành vi sai (xem câu trả lời số 1).

  3. Theo mặc định, nó sao chép đích chính xác.

    Đó là, nếu liên kết trỏ đến một đường dẫn tuyệt đối (ví dụ /home/me/projects), nó sẽ tiếp tục trỏ đến cùng một đường dẫn; nó sẽ không bị hỏng , nó sẽ tiếp tục trỏ đến một tập tin trong thư mục nhà của bạn chứ không phải là tập tin trong bản sao lưu của bạn.

    Trong khi đó, nếu liên kết trỏ đến một đường dẫn tương đối (ví dụ ../../projects), nó cũng sẽ tiếp tục trỏ đến cùng một đường dẫn, nhưng vì nó liên quan đến vị trí của symlink, symlink trong bản sao lưu của bạn cũng sẽ trỏ đến một tệp trong bản sao lưu của bạn.

    Thật không may, dường như không có bất kỳ tùy chọn nào để dịch các liên kết tuyệt đối cho cơ sở mới của họ (chỉ có một tùy chọn để phá vỡ chúng hoàn toàn). Để tránh các vấn đề, bạn nên thay đổi các liên kết tượng trưng hiện tại thành các liên kết tương đối (thường là một ý tưởng tốt cho các liên kết bên trong $ HOME).


2
Ừm, vậy sự khác biệt giữa --copy-links--links?
Alexander Mills

--copy-links= -L, và --links= -l. Xem mô tả từ tài liệu trong câu trả lời của tôi ở đây: superuser.com/a/1388910/425838
Gabriel Staples

12

@grawity có một câu trả lời tuyệt vời, nhưng đây là một ảnh chụp màn hình của một số thông tin có liên quan từ tài liệu. Đây là từ ngữ chính xác của các tùy chọn -l-L, ví dụ, dường như là những từ có liên quan nhất trong câu hỏi:

nhập mô tả hình ảnh ở đây

Nguồn: https://linux.die.net/man/1/rsync hoặc man rsynccác trang hướng dẫn trên Linux.

Cũng lưu ý rằng tùy chọn -a( --archive) cũng bao gồm -ltùy chọn bên trong nó, điều này thật tuyệt vời, vì tôi thực sự thích sử dụng -ltùy chọn để bảo vệ các liên kết tượng trưng của mình khỏi nguồn dưới dạng liên kết tượng trưng ở đích. Từ trang người đàn ông:

-a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)

Lưu ý, đối với rsynccác lệnh và hướng dẫn yêu thích của tôi , bao gồm sao chép, phản chiếu, hiển thị toàn bộ tiến trình ...

... thực hiện các thao tác chạy khô, ghi nhật ký stderr và stdout vào các tệp (riêng biệt), hiển thị số liệu thống kê, sử dụng tệp đường dẫn bao gồmtệp loại trừ , v.v., xem câu trả lời đầy đủ của tôi ở đây trong phần 2, có tiêu đề " 2. rsync Dòng lệnh công cụ (Linux, Windows với Cygwin) ": https://superuser.com/a/1464264/425838

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.