הקדמה
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
.
ראשית, החלף אל תיקיית הבית שלך על ידי הרצת הפקודה הבאה:
אז צור תיקיית בדיקה:
צור תיקיית בדיקה נוספת:
עכשיו הוסף כמה קבצי בדיקה:
יש כעת תיקייה בשם dir1
עם 100 קבצים ריקים בתוכה. אשר זאת על ידי רשימת הקבצים:
Outputfile1 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
, שמתאר "רקורסיה" והוא נחוץ לסנכרון תיקיות:
אפשרות נוספת היא להשתמש בדגל -a
, שהוא דגל שילוב ומתאר "ארכיון". הדגל הזה מסנכרן באופן רקורסיבי ושומר קישורים סמליים, קבצים מיוחדים והתקנים, זמני שינוי, קבוצות, בעלים והרשאות. זהו דגל השימוש הקרוב יותר מ־-r
והוא הדגל המומלץ לשימוש. הרץ את אותה הפקודה כמו בדוגמה הקודמת, הפעם בשימוש בדגל -a
:
יש לשים לב כי ישנו סלאש מאחורי (/
) בסוף הארגומנט הראשון בתחביר של שתי הפקודות הקודמות והמודגש כאן:
סלאש האחריון מציין את תוכן dir1
. בלעדיו, dir1
, כולל התיקייה, הוא היה מוצב בתוך dir2
. התוצאה היא יצירת היררכיה כמו שלמטה:
~/dir2/dir1/[files]
עוד טיפ הוא לבדוק את הארגומנטים שלך לפני ביצוע פקודת rsync
. Rsync מספק שיטה לעשות זאת על ידי מעבר עם אפשרויות -n
או --dry-run
. דגל ה־-v
, שמשמעו "רב-פרטיות", נחוץ גם כדי לקבל את הפלט המתאים. תשלבו את הדגלים a
, n
, ו־v
בפקודה הבאה:
Outputsending incremental file list
./
file1
file10
file100
file11
file12
file13
file14
file15
file16
file17
file18
. . .
עכשיו השוו את הפלט לפלט שאתם מקבלים כאשר מסירים את הסיומת האחרונה, כמו בדוגמה הבאה:
Outputsending 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
מהקטע הקודם למחשב מרוחק באמצעות התחברות הבאה. יש לשים לב שבמקרה זה, ברצונכם להעביר את התיקייה עצמה, ולכן תשלילו את הסיומת האחרונה:
התהליך הזה נקרא פעולת דחיפה מכיוון שהוא "דוחף" תיקייה מהמערכת המקומית למערכת רחוקה. הפעולה ההפוכה היא משיכה, ונעשה בכדי לסנכרן תיקייה רחוקה למערכת המקומית. אם התיקייה dir1
הייתה במערכת הרחוקה במקום במערכת המקומית שלך, התחביר היה כזה:
כמו cp
וכלים דומים, המקור תמיד הוא הארגומנט הראשון, והיעד תמיד הוא הארגומנט השני.
שימוש באפשרויות Rsync אחרות
Rsync מספקת הרבה אפשרויות לשינוי ההתנהגות ברירת המחדל של הכלי, כגון אפשרויות הדגל שלמדת עליהן בסעיף הקודם.
אם אתה מעביר קבצים שלא כבר נכנסו לדחיסה, כמו קבצי טקסט, אתה יכול להפחית את ההעברה ברשת על ידי הוספת דחיסה עם האפשרות -z
:
הדגל -P
גם מועיל. הוא משלב את הדגלים --progress
ו־--partial
. הדגל הראשון מציע בר להעברות, והדגל השני מאפשר לך להמשיך העברות שנפסקו:
Outputsending 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 להשתמש בזמני שינוי כדי לקבוע אם ישנם שינויים:
Outputsending incremental file list
sent 818 bytes received 12 bytes 1660.00 bytes/sec
total size is 0 speedup is 0.00
נניח שהיית מעדכן את זמן השינוי על חלק מהקבצים בעזרת פקודה כמו הבאה:
אז, אם תריץ את rsync
שוב עם -azP
, תשים לב בפלט כיצד Rsync מעתיקה מחדש בחכמה רק את הקבצים ששונו:
Outputsending 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
, כדי לבצע בדיקה כדי למנוע אובדן נתונים לא רצוי:
אם בחרת לא לכלול קבצים או ספריות מסוימות הנמצאים בתוך ספרייה שאתה מסנכרן, אתה יכול לעשות זאת על ידי ציון אותם ברשימה מופרדת בפסיקים לאחר האפשרות --exclude=
:
אם יש לך דפוס מסוים לאילוצים, תוכל לדרוס את האילוץ הזה לקבצים שתואמים דפוס שונה באמצעות האפשרות --include=
:
לבסוף, אפשרות --backup
של Rsync ניתן להשתמש בה כדי לשמור גיבויים של קבצים חשובים. זה משמש בשילוב עם האפשרות --backup-dir
, שמציינת את הספרייה שבה יש לאחסן את קבצי הגיבוי:
מסקנה
Rsync יכולה לפתור כתיבת קבצים על ידי חיבורי רשת ולהוסיף אופטימליות לסנכרון ספריית מקומית. הגמישות של Rsync הופכת אותה לאפשרות טובה להרבה פעולות שונות ברמת הקובץ.
A mastery of Rsync allows you to design complex backup operations and obtain fine-grained control over how and what is transferred.