כיצד להשתמש ב־Rsync כדי לסנכרן ספריות מקומיות ומרוחקות

הקדמה

Rsync, שמשמעו סנכרון רחוק, הוא כלי סנכרון קבצים מרוחק ומקומי. הוא משתמש באלגוריתם כדי למזער את כמות הנתונים שמועתקים על ידי העברת רק את חלקי הקבצים שהשתנו.

במדריך זה, נגדיר את Rsync, נבחן את התחביר בעת שימוש ב־rsync, נסביר איך להשתמש ב־Rsync כדי לסנכרן עם מערכת רחוקה ואפשרויות אחרות הזמינות לך.

הפעל את אפליקציות הפרונט-אנד שלך מ-GitHub באמצעות פלטפורמת DigitalOcean App. תן ל-DigitalOcean להתמקד בהרחבת האפליקציה שלך.

דרישות מוקדמות

כדי לתרגל את שימוש ב־rsync כדי לסנכרן קבצים בין מערכת מקומית ומערכת רחוקה, יהיה עליך להשתמש בשתי מכונות לפעול כמחשב המקומי שלך ומחשב הרחוק שלך, בהתאם. שתי המכונות אלו יכולות להיות שרתים פרטיים וירטואליים, מכונות וירטואליות, תופסים או מחשבים אישיים כל עוד הן הוגדרו באופן תקין.

אם אתה מתכנן לעקוב אחרי המדריך הזה באמצעות שרתים, כדאי להגדיר אותם עם משתמשים מנהלים ולהגדיר חומת אש על כל אחד מהם. כדי להגדיר את השרתים הללו, עקוב אחרי המדריך הגדרת השרת הראשונית.

בלי קשר לאילו סוגי מכונות אתה משתמש לעקוב אחרי המדריך הזה, יהיה עליך ליצור מפתחות SSH בשניהם. לאחר מכן, העתק את המפתח הציבורי של כל שרת לקובץ authorized_keys של השרת השני כפי שמפורט ב- שלב 2 של המדריך ההתחלתי הזה.

מדריך זה עבר אימות על מכונות הרצות Ubuntu 20.04, אף על פי שהוא כמעט תמיד יעבוד גם עם מחשבים שרצים מערכת הפעלה מבוססת Linux ובהם מותקן rsync.

הגדרת Rsync

Rsync הוא כלי לסנכרון מאוד גמיש המאפשר תקשורת דרך הרשת. בשל הרציפות שלו במערכות Linux ודומותיהן ובשל פופולריותו ככלי לתסריטי מערכת, הוא כלול ברוב ההפצות של Linux כברירת מחדל.

הבנת תחביר Rsync

התחביר עבור rsync פועל דומה לכלים אחרים, כמו ssh, scp, ו־cp.

ראשית, החלף אל תיקיית הבית שלך על ידי הרצת הפקודה הבאה:

  1. cd ~

אז צור תיקיית בדיקה:

  1. mkdir dir1

צור תיקיית בדיקה נוספת:

  1. mkdir dir2

עכשיו הוסף כמה קבצי בדיקה:

  1. touch dir1/file{1..100}

יש כעת תיקייה בשם dir1 עם 100 קבצים ריקים בתוכה. אשר זאת על ידי רשימת הקבצים:

  1. ls dir1
Output
file1 file18 file27 file36 file45 file54 file63 file72 file81 file90 file10 file19 file28 file37 file46 file55 file64 file73 file82 file91 file100 file2 file29 file38 file47 file56 file65 file74 file83 file92 file11 file20 file3 file39 file48 file57 file66 file75 file84 file93 file12 file21 file30 file4 file49 file58 file67 file76 file85 file94 file13 file22 file31 file40 file5 file59 file68 file77 file86 file95 file14 file23 file32 file41 file50 file6 file69 file78 file87 file96 file15 file24 file33 file42 file51 file60 file7 file79 file88 file97 file16 file25 file34 file43 file52 file61 file70 file8 file89 file98 file17 file26 file35 file44 file53 file62 file71 file80 file9 file99

יש לך גם תיקייה ריקה בשם dir2. כדי לסנכרן את תוכן dir1 ל־dir2 באותו מערכת, תריץ את rsync ותשתמש בדגל -r, שמתאר "רקורסיה" והוא נחוץ לסנכרון תיקיות:

  1. rsync -r dir1/ dir2

אפשרות נוספת היא להשתמש בדגל -a, שהוא דגל שילוב ומתאר "ארכיון". הדגל הזה מסנכרן באופן רקורסיבי ושומר קישורים סמליים, קבצים מיוחדים והתקנים, זמני שינוי, קבוצות, בעלים והרשאות. זהו דגל השימוש הקרוב יותר מ־-r והוא הדגל המומלץ לשימוש. הרץ את אותה הפקודה כמו בדוגמה הקודמת, הפעם בשימוש בדגל -a:

  1. rsync -a dir1/ dir2

יש לשים לב כי ישנו סלאש מאחורי (/) בסוף הארגומנט הראשון בתחביר של שתי הפקודות הקודמות והמודגש כאן:

  1. rsync -a dir1/ dir2

סלאש האחריון מציין את תוכן dir1. בלעדיו, dir1, כולל התיקייה, הוא היה מוצב בתוך dir2. התוצאה היא יצירת היררכיה כמו שלמטה:

~/dir2/dir1/[files]

עוד טיפ הוא לבדוק את הארגומנטים שלך לפני ביצוע פקודת rsync. Rsync מספק שיטה לעשות זאת על ידי מעבר עם אפשרויות -n או --dry-run. דגל ה־-v, שמשמעו "רב-פרטיות", נחוץ גם כדי לקבל את הפלט המתאים. תשלבו את הדגלים a, n, ו־v בפקודה הבאה:

  1. rsync -anv dir1/ dir2
Output
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .

עכשיו השוו את הפלט לפלט שאתם מקבלים כאשר מסירים את הסיומת האחרונה, כמו בדוגמה הבאה:

  1. rsync -anv dir1 dir2
Output
sending incremental file list dir1/ dir1/file1 dir1/file10 dir1/file100 dir1/file11 dir1/file12 dir1/file13 dir1/file14 dir1/file15 dir1/file16 dir1/file17 dir1/file18 . . .

הפלט הזה מציג כי התיקייה עצמה הועברה, ולא רק הקבצים בתוך התיקייה.

שימוש ב־Rsync לסנכרון עם מערכת מרוחקת

כדי להשתמש ב־rsync לסנכרון עם מערכת מרוחקת, אתם צריכים רק גישה SSH מוגדרת בין המחשב המקומי והמרוחק, וגם rsync מותקן בשני המערכות. לאחר שאימתם את הגישה SSH בין שתי המכונות, אתם יכולים לסנכרן את התיקייה dir1 מהקטע הקודם למחשב מרוחק באמצעות התחברות הבאה. יש לשים לב שבמקרה זה, ברצונכם להעביר את התיקייה עצמה, ולכן תשלילו את הסיומת האחרונה:

  1. rsync -a ~/dir1 username@remote_host:destination_directory

התהליך הזה נקרא פעולת דחיפה מכיוון שהוא "דוחף" תיקייה מהמערכת המקומית למערכת רחוקה. הפעולה ההפוכה היא משיכה, ונעשה בכדי לסנכרן תיקייה רחוקה למערכת המקומית. אם התיקייה dir1 הייתה במערכת הרחוקה במקום במערכת המקומית שלך, התחביר היה כזה:

  1. rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine

כמו cp וכלים דומים, המקור תמיד הוא הארגומנט הראשון, והיעד תמיד הוא הארגומנט השני.

שימוש באפשרויות Rsync אחרות

Rsync מספקת הרבה אפשרויות לשינוי ההתנהגות ברירת המחדל של הכלי, כגון אפשרויות הדגל שלמדת עליהן בסעיף הקודם.

אם אתה מעביר קבצים שלא כבר נכנסו לדחיסה, כמו קבצי טקסט, אתה יכול להפחית את ההעברה ברשת על ידי הוספת דחיסה עם האפשרות -z:

  1. rsync -az source destination

הדגל -P גם מועיל. הוא משלב את הדגלים --progress ו־--partial. הדגל הראשון מציע בר להעברות, והדגל השני מאפשר לך להמשיך העברות שנפסקו:

  1. rsync -azP source destination
Output
sending incremental file list created directory destination source/ source/file1 0 100% 0.00kB/s 0:00:00 (xfr#1, to-chk=99/101) sourcefile10 0 100% 0.00kB/s 0:00:00 (xfr#2, to-chk=98/101) source/file100 0 100% 0.00kB/s 0:00:00 (xfr#3, to-chk=97/101) source/file11 0 100% 0.00kB/s 0:00:00 (xfr#4, to-chk=96/101) source/file12 0 100% 0.00kB/s 0:00:00 (xfr#5, to-chk=95/101) . . .

אם תריץ שוב את הפקודה, תקבל פלט קצר יותר מאחר שלא התבצעו שינויים. זה ממחיש את יכולתו של Rsync להשתמש בזמני שינוי כדי לקבוע אם ישנם שינויים:

  1. rsync -azP source destination
Output
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00

נניח שהיית מעדכן את זמן השינוי על חלק מהקבצים בעזרת פקודה כמו הבאה:

  1. touch dir1/file{1..10}

אז, אם תריץ את rsync שוב עם -azP, תשים לב בפלט כיצד Rsync מעתיקה מחדש בחכמה רק את הקבצים ששונו:

  1. rsync -azP source destination
Output
sending incremental file list file1 0 100% 0.00kB/s 0:00:00 (xfer#1, to-check=99/101) file10 0 100% 0.00kB/s 0:00:00 (xfer#2, to-check=98/101) file2 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=87/101) file3 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=76/101) . . .

כדי לשמור על שני ספריות בסינכרון אמיתי, עליך למחוק קבצים מהספרייה היעד אם הם נמחקים מהמקור. כברירת מחדל, rsync אינה מוחקת דבר מהספרייה היעד.

אתה יכול לשנות את ההתנהגות הזו עם האפשרות --delete. לפני שתשתמש באפשרות זו, תוכל להשתמש ב- -n, האפשרות --dry-run, כדי לבצע בדיקה כדי למנוע אובדן נתונים לא רצוי:

  1. rsync -an --delete source destination

אם בחרת לא לכלול קבצים או ספריות מסוימות הנמצאים בתוך ספרייה שאתה מסנכרן, אתה יכול לעשות זאת על ידי ציון אותם ברשימה מופרדת בפסיקים לאחר האפשרות --exclude=:

  1. rsync -a --exclude=pattern_to_exclude source destination

אם יש לך דפוס מסוים לאילוצים, תוכל לדרוס את האילוץ הזה לקבצים שתואמים דפוס שונה באמצעות האפשרות --include=:

  1. rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination

לבסוף, אפשרות --backup של Rsync ניתן להשתמש בה כדי לשמור גיבויים של קבצים חשובים. זה משמש בשילוב עם האפשרות --backup-dir, שמציינת את הספרייה שבה יש לאחסן את קבצי הגיבוי:

  1. rsync -a --delete --backup --backup-dir=/path/to/backups /path/to/source destination

מסקנה

Rsync יכולה לפתור כתיבת קבצים על ידי חיבורי רשת ולהוסיף אופטימליות לסנכרון ספריית מקומית. הגמישות של Rsync הופכת אותה לאפשרות טובה להרבה פעולות שונות ברמת הקובץ.

A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.

Source:
https://www.digitalocean.com/community/tutorials/how-to-use-rsync-to-sync-local-and-remote-directories