كيفية استخدام Rsync لمزامنة الدلائل المحلية والبعيدة

مقدمة

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.

أولاً، قم بالتغيير إلى دليل المستخدم الخاص بك باستخدام الأمر التالي:

  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

تسمى هذه العملية عملية push لأنها “تدفع” دليلًا من النظام المحلي إلى نظام بعيد. العملية العكسية هي pull، وتُستخدم لمزامنة دليل بعيد مع النظام المحلي. إذا كان الدليل 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