rsyncהפקודה: rsync -aE --delete ~/Documents/ /Volumes/Backup/Documents/
-E הוא החצי הייחודי ל-macOS, והשמטתו מאבדת בשקט מאפיינים מורחבים ו-resource forks.
-a הוא מצב ארכיון: רקורסיה, ושמירה על הרשאות, בעלות, חותמות זמן וקישורים סמליים. זה הדגל שכולם מכירים.-E שומר מאפיינים מורחבים ו-resource forks של 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
משימה שקטה היא אופן הכשל. היא לא נעצרת עם שגיאה על המסך, היא נעצרת בלילה לפני ארבעה חודשים.
הפקודות למעלה מכסות העתקה. מה שהן לא מכסות הוא מה שבאמת רוצים ביום שמשהו משתבש: גרסאות ששורדות הרצת מראה, הצפנה שעדיין מאפשרת לשחזר קובץ אחד, קריאה חוזרת שבודקת כל חלק מול ה-hash שלו, ומשהו שאומר לכם כשהכונן לא נראה שבוע.
כל אחד מאלה הוא סוף שבוע של כתיבת סקריפטים, ואז התחזוקה עליכם. 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 כדי שקובץ גדול שהועבר חלקית יישמר וימשיך.
הבא: איך לבדוק שהעותק באמת קריא.