مقدمة
RSync، والتي تعني مزامنة عن بعد، هي أداة لمزامنة الملفات عن بعد ومحليًا. تستخدم خوارزمية لتقليل كمية البيانات المنسوخة عن طريق نقل أجزاء الملفات التي تغيرت فقط.
في هذا البرنامج التعليمي، سنقوم بتحديد Rsync، واستعراض الصيغة عند استخدام rsync
، وشرح كيفية استخدام Rsync للمزامنة مع نظام عن بعد، والخيارات الأخرى المتاحة لك.
نشر تطبيقات الواجهة الأمامية الخاصة بك من GitHub باستخدام DigitalOcean App Platform. دع DigitalOcean تركز على توسيع تطبيقك.
المتطلبات المسبقة
من أجل ممارسة استخدام rsync
لمزامنة الملفات بين نظامين محلي وعن بعد، ستحتاج إلى جهازين ليكونا جهازك المحلي وجهازك البعيد على التوالي. يمكن أن تكون هذه الأجهزة جهازي خوادم افتراضية خاصة، أو أجهزة افتراضية، أو حاويات، أو أجهزة كمبيوتر شخصية طالما تم تكوينها بشكل صحيح.
إذا كنت تخطط لاتباع هذا الدليل باستخدام الخوادم، فسيكون من الحكمة إعدادها بمستخدمين إداريين وتكوين جدار ناري على كل منها. لإعداد هذه الخوادم، اتبع دليلنا إعداد الخادم الأولي.
بغض النظر عن أنواع الآلات التي تستخدمها لاتباع هذا البرنامج التعليمي، ستحتاج إلى إنشاء مفاتيح SSH على كل منها. ثم، قم بنسخ المفتاح العام لكل خادم إلى ملف authorized_keys
في الخادم الآخر كما هو موضح في الخطوة 2 من ذلك الدليل.
تم التحقق من صحة هذا الدليل على الآلات التي تعمل بنظام Ubuntu 20.04، على الرغم من أنه يجب أن يعمل بشكل عام مع أي أجهزة تعمل بنظام تشغيل يعتمد على Linux والتي تحتوي على rsync
مثبت.
تعريف Rsync
Rsync هو أداة مزامنة قائمة على الشبكة للغاية ومرنة جدًا. بسبب انتشارها الواسع على أنظمة Linux وأنظمة Unix وشهرتها كأداة لنصوص النظام، فإنها مدرجة في معظم توزيعات 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
من القسم السابق إلى جهاز بعيد باستخدام الصيغة التالية. يرجى ملاحظة في هذه الحالة، أنك ترغب في نقل المجلد الفعلي، لذا ستحذف المسافة الفارغة في النهاية:
تسمى هذه العملية عملية push لأنها “تدفع” دليلًا من النظام المحلي إلى نظام بعيد. العملية العكسية هي pull، وتُستخدم لمزامنة دليل بعيد مع النظام المحلي. إذا كان الدليل 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.