rsyncคำสั่ง: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E คือครึ่งที่เฉพาะของ macOS และการไม่ใส่จะทำให้แอตทริบิวต์เพิ่มเติมและ resource fork หายไปอย่างเงียบๆ
-a คือโหมดเก็บถาวร: ทำซ้ำลงไปในโฟลเดอร์ย่อย และเก็บสิทธิ์ ความเป็นเจ้าของ เวลา และ symlink ไว้ เป็นแฟล็กที่ทุกคนรู้จัก-E เก็บแอตทริบิวต์เพิ่มเติมและ resource fork ของ macOS ไว้ แท็กของ Finder แฟล็กการกักกัน ไอคอนที่กำหนดเอง และเมทาดาทาของแอปพลิเคชันจำนวนมากอยู่ที่นั่น หากไม่มีมันจะหายไป และไม่มีอะไรบอกคุณ--delete ลบไฟล์ออกจากปลายทางเมื่อไฟล์หายไปจากต้นทาง นี่คือสิ่งที่ทำให้สำเนาเป็นมิเรอร์ และเป็นแฟล็กที่ควรคิดให้หนักที่สุด-v สำหรับแสดงผล -n สำหรับทดลองรัน ทดลองรันคำสั่งที่มี --delete ทุกครั้งในครั้งแรก~/Documents คัดลอกโฟลเดอร์เข้าไปในปลายทาง ทำให้ได้ /Volumes/Backup/Documents/Documents ส่วน ~/Documents/ คัดลอกเนื้อหาของมัน ซึ่งแทบทุกครั้งคือสิ่งที่คุณต้องการ ในคำสั่งที่มี --delete ด้วย การใส่ผิดจะลบทุกอย่างอื่นที่อยู่ในปลายทาง--exclude สำหรับสิ่งที่ไม่คุ้มจะคัดลอก: --exclude '.DS_Store', --exclude 'node_modules', --exclude 'Library/Caches'macOS มาพร้อม rsync เวอร์ชันที่เพียงพอสำหรับงานนี้ หากต้องการเวอร์ชันต้นทางที่ใหม่กว่า Homebrew มีให้ และจัดการ ACL บน macOS ได้ดีกว่า
rsync ทำให้ปลายทางเหมือนต้นทาง นั่นคือสำเนา และสำเนาไม่ใช่ประวัติ เอกสารที่คุณลบเมื่อวันอังคารที่แล้วจะหายจากข้อมูลสำรองในครั้งถัดไปที่ทำงาน เวอร์ชันที่ดีของไฟล์ที่คุณเขียนทับไปแล้วก็เช่นกัน และทุกอย่างที่แรนซัมแวร์เข้าถึงก่อนงานจะเริ่มก็เช่นกัน
การเอา --delete ออกไม่ได้แก้ปัญหานี้ มันให้ปลายทางที่สะสมทุกไฟล์ที่คุณเคยมี โดยยังมีเพียงเวอร์ชันเดียวของแต่ละไฟล์ และไม่มีทางบอกได้ว่าอะไรเป็นปัจจุบัน
--link-destเทคนิคมาตรฐานคือสร้างไดเรกทอรีใหม่ที่มีวันที่ทุกครั้งที่รัน และฮาร์ดลิงก์ไฟล์ที่ไม่เปลี่ยนไปยังไดเรกทอรีก่อนหน้า ไฟล์ที่เหมือนกันจึงไม่กินพื้นที่:
DEST=/Volumes/Backup
TODAY=$(date +%F)
rsync -aE --delete \
--link-dest="$DEST/latest" \
~/Documents "$DEST/$TODAY"
ln -snf "$DEST/$TODAY" "$DEST/latest"
ตอนนี้แต่ละโฟลเดอร์ที่มีวันที่ดูเหมือนข้อมูลสำรองเต็มรูปแบบ และมีเพียงไฟล์ที่เปลี่ยนเท่านั้นที่กินพื้นที่ นี่คือแนวคิดคร่าวๆ ที่ Time Machine สร้างขึ้นมา
ข้อควรระวังสองข้อ ฮาร์ดลิงก์หมายความว่าสำเนาไม่เป็นอิสระต่อกัน: ความเสียหายในบล็อกข้างใต้ส่งผลต่อทุกสแนปช็อตที่ใช้ร่วมกัน และต้องใช้ระบบไฟล์ที่รองรับฮาร์ดลิงก์ จึงใช้ได้กับไดรฟ์ภายนอก แต่ใช้ไม่ได้ในโฟลเดอร์คลาวด์ส่วนใหญ่
rsync ไม่เข้ารหัสอะไรขณะจัดเก็บ หากปลายทางเป็นโฟลเดอร์คลาวด์หรือไดรฟ์ที่ออกนอกอาคาร ให้เข้ารหัสก่อนเขียน:
tar -cJf - ~/Documents | openssl enc -aes-256-cbc -pbkdf2 -out /Volumes/Backup/documents.tar.xz.enc
นั่นคือไฟล์เก็บถาวรก้อนเดียวที่มองข้างในไม่ได้: ไม่มีการคัดลอกเฉพาะส่วนที่เปลี่ยน กู้คืนไฟล์เดียวไม่ได้หากไม่แตกทั้งหมด และมีรหัสผ่านเพียงชุดเดียวกั้นระหว่างคุณกับทุกอย่าง ข้อแลกเปลี่ยนนี้สำคัญ และเป็นจุดที่คนส่วนใหญ่เลิกทำเอง
cron ยังมีอยู่บน macOS แต่ launchd คือวิธีที่รองรับ ไฟล์ plist ใน ~/Library/LaunchAgents/ ที่มี StartCalendarInterval จะรันสคริปต์ของคุณทุกวัน macOS จะขอสิทธิ์การเข้าถึงดิสก์เต็มรูปแบบสำหรับสิ่งที่รันมัน เพราะการอ่านเอกสารและเดสก์ท็อปได้รับการป้องกัน
ไม่ว่าคุณจะตั้งเวลาอะไร ให้มันเขียนผลลัพธ์ไว้ในที่ที่คุณจะเห็นจริง และตรวจสอบว่าข้อมูลสำรองเป็นปัจจุบัน:
find /Volumes/Backup -type f -newermt '-7 days' | head
งานที่เงียบหายคือรูปแบบของความล้มเหลว มันไม่ได้หยุดพร้อมข้อผิดพลาดบนหน้าจอ แต่หยุดไปในคืนหนึ่งเมื่อสี่เดือนก่อน
คำสั่งข้างต้นครอบคลุมการคัดลอก สิ่งที่ไม่ครอบคลุมคือสิ่งที่คุณต้องการจริงๆ ในวันที่มีปัญหา: เวอร์ชันที่รอดจากการรันมิเรอร์ การเข้ารหัสที่ยังให้กู้คืนไฟล์เดียวได้ การอ่านกลับที่ตรวจทุกชิ้นกับแฮช และสิ่งที่บอกคุณเมื่อไม่พบไดรฟ์มาหนึ่งสัปดาห์
แต่ละอย่างคืองานเขียนสคริปต์หนึ่งสุดสัปดาห์ แล้วคุณก็ต้องดูแลเอง Copy Shelter คือแนวคิดเดียวกันที่มีส่วนเหล่านั้นในตัว และใช้ได้ฟรีสำหรับที่เก็บข้อมูลหนึ่งแห่ง
rsync ของฉันจึงทำแท็ก Finder หายเพราะ -a อย่างเดียวไม่นำแอตทริบิวต์เพิ่มเติมไปด้วยบน macOS ให้เพิ่ม -E หากต้องการ ACL ด้วย ให้ใช้ -A และพิจารณาเวอร์ชันจาก Homebrew ซึ่งจัดการได้น่าเชื่อถือกว่าเวอร์ชันของระบบ
ได้ ทั้งไปยังแชร์ที่เมานต์ไว้ใต้ /Volumes หรือผ่าน SSH ไปยัง NAS โดยตรง ผ่าน SSH เร็วกว่าและไม่ขึ้นกับว่าเมานต์อยู่หรือไม่ และ NAS หลายรุ่นมี rsync ในตัว
sudo หรือไม่ไม่ต้องสำหรับโฟลเดอร์โฮมของคุณเอง แต่คุณต้องให้สิทธิ์การเข้าถึงดิสก์เต็มรูปแบบแก่ Terminal หรือสิ่งที่ launchd รัน ก่อนที่ macOS จะยอมให้อ่านเอกสาร เดสก์ท็อป และดาวน์โหลด
--delete อันตรายหรือไม่มันทำตามที่คุณสั่งทุกอย่าง ซึ่งนั่นคือส่วนที่อันตราย ทดลองรันด้วย -n ในครั้งแรก และตรวจสอบให้แน่ใจว่าพาธปลายทางถูกต้อง: การพิมพ์ผิดกับ --delete ที่ชี้ไปยังไดเรกทอรีผิดจะลบไฟล์ที่นั่น
ได้ นั่นคือสิ่งที่ rsync มีไว้ รันอีกครั้งแล้วมันจะส่งเฉพาะสิ่งที่ขาดหรือเปลี่ยน เพิ่ม --partial เพื่อให้ไฟล์ขนาดใหญ่ที่ส่งไปครึ่งทางถูกเก็บไว้และส่งต่อ
ถัดไป: วิธีตรวจสอบว่าสำเนาอ่านได้จริง