rsyncLệnh: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E là phần riêng của macOS, và bỏ nó đi sẽ âm thầm làm mất thuộc tính mở rộng và resource fork.
-a là chế độ lưu trữ: đệ quy, và giữ quyền, chủ sở hữu, dấu thời gian và liên kết tượng trưng. Đó là tùy chọn ai cũng biết.-E giữ thuộc tính mở rộng và resource fork của macOS. Thẻ Finder, cờ cách ly, biểu tượng tùy chỉnh và khá nhiều siêu dữ liệu ứng dụng nằm ở đó. Thiếu nó thì chúng mất, và không có gì báo cho bạn.--delete xóa tệp khỏi đích khi chúng không còn ở nguồn. Đây là thứ khiến bản sao thành bản sao gương, và là tùy chọn cần cân nhắc kỹ nhất.-v để hiện kết quả, -n để chạy thử. Luôn chạy thử lần đầu với lệnh có --delete.~/Documents sao chép cả thư mục vào trong đích, cho bạn /Volumes/Backup/Documents/Documents. ~/Documents/ sao chép nội dung của nó, gần như luôn là điều bạn muốn. Trong lệnh có thêm --delete, làm sai sẽ xóa mọi thứ khác đang có trong đích.--exclude cho những thứ không đáng sao chép: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'.macOS có sẵn một phiên bản rsync đủ dùng cho việc này. Nếu bạn muốn bản mới hơn từ nguồn gốc, Homebrew có, và cách xử lý ACL trên macOS của nó tốt hơn.
rsync làm cho đích trông giống nguồn. Đó là bản sao, và bản sao không phải lịch sử. Một tài liệu bạn xóa thứ Ba tuần trước sẽ biến khỏi bản sao lưu ở lần chạy tiếp theo. Phiên bản tốt của một tệp bạn đã ghi đè cũng vậy, và mọi thứ mã độc tống tiền chạm tới trước khi tác vụ chạy cũng vậy.
Bỏ --delete không giải quyết được việc này. Nó cho bạn một đích tích tụ mọi tệp bạn từng có, vẫn đúng một phiên bản cho mỗi tệp, và không cách nào biết cái nào là hiện tại.
--link-destMẹo tiêu chuẩn là mỗi lần chạy tạo một thư mục mới có ngày tháng và tạo liên kết cứng cho các tệp không đổi tới thư mục trước, để tệp giống nhau không tốn thêm gì:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
Giờ mỗi thư mục có ngày tháng trông như một bản sao lưu đầy đủ và chỉ các tệp thay đổi mới chiếm dung lượng. Đây gần như là ý tưởng mà Time Machine được xây dựng dựa trên.
Hai lưu ý. Liên kết cứng nghĩa là các bản sao không độc lập: hỏng ở khối dữ liệu bên dưới ảnh hưởng đến mọi ảnh chụp dùng chung nó. Và nó cần hệ thống tệp hỗ trợ liên kết cứng, nên dùng được trên ổ đĩa ngoài và không dùng được trong hầu hết thư mục đám mây.
rsync không mã hóa gì khi lưu trữ. Nếu đích là thư mục đám mây hoặc ổ đĩa mang ra khỏi nhà, hãy mã hóa trước khi ghi:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
Đó là một tệp lưu trữ không nhìn được bên trong: không sao chép tăng dần, không khôi phục được một tệp mà không giải nén toàn bộ, và chỉ một cụm mật khẩu ngăn giữa bạn và mọi thứ. Sự đánh đổi đó quan trọng, và đó là lúc hầu hết mọi người thôi tự làm thủ công.
cron vẫn còn trên macOS nhưng launchd là cách được hỗ trợ. Một tệp plist trong ~/Library/LaunchAgents/ với StartCalendarInterval sẽ chạy script của bạn hằng ngày. macOS sẽ yêu cầu Quyền truy cập toàn bộ ổ đĩa cho thứ chạy nó, vì đọc Tài liệu và Màn hình nền là được bảo vệ.
Dù lên lịch bằng gì, hãy cho nó ghi kết quả ra nơi bạn thực sự sẽ thấy, và kiểm tra rằng bản sao lưu còn mới:
find /Volumes/Backup -type f -newermt '-7 days' | head
Một tác vụ âm thầm dừng chính là kiểu sự cố đáng lo. Nó không dừng với thông báo lỗi trên màn hình, mà dừng trong đêm từ bốn tháng trước.
Các lệnh trên lo phần sao chép. Thứ chúng không lo là điều bạn thực sự muốn vào ngày có sự cố: phiên bản sống sót qua lần chạy bản sao gương, mã hóa mà vẫn cho khôi phục một tệp, bước đọc lại kiểm tra từng phần với mã băm của nó, và thứ gì đó báo cho bạn khi ổ đĩa không xuất hiện suốt một tuần.
Mỗi thứ đó tốn một cuối tuần viết script, rồi bạn phải tự bảo trì. Copy Shelter là cùng ý tưởng với những phần đó có sẵn, và miễn phí cho một vị trí.
rsync của tôi mất thẻ Finder?Vì -a đơn thuần không mang theo thuộc tính mở rộng trên macOS. Hãy thêm -E. Nếu bạn cũng cần ACL, dùng -A, và cân nhắc bản build từ Homebrew, vốn xử lý chúng ổn định hơn bản của hệ thống.
Có, vào thư mục chia sẻ đã gắn trong /Volumes hoặc qua SSH tới chính NAS. Qua SSH nhanh hơn và không phụ thuộc vào việc thư mục chia sẻ có được gắn hay không, và nhiều NAS có sẵn rsync.
sudo không?Không với thư mục home của chính bạn. Bạn cần cấp Quyền truy cập toàn bộ ổ đĩa cho Terminal, hoặc cho thứ mà launchd chạy, trước khi macOS cho phép nó đọc Tài liệu, Màn hình nền và Tải về.
--delete có nguy hiểm không?Nó đang làm đúng những gì bạn yêu cầu, và đó là phần nguy hiểm. Chạy thử với -n lần đầu, và kiểm tra đường dẫn đích cho đúng: gõ nhầm khi dùng --delete trỏ vào sai thư mục sẽ xóa tệp ở đó.
Có, đó là việc rsync sinh ra để làm. Chạy lại và nó chỉ truyền những gì còn thiếu hoặc đã thay đổi. Thêm --partial để tệp lớn truyền dở được giữ lại và tiếp tục.
Tiếp theo: cách kiểm tra bản sao thực sự đọc được.