مقدّمة
تُستخدم أداة Rsync
- الّتي يأتي اسمها اختصارًا ل”مزامنة عن بُعد” (Remote synchronization) - لمزامنة ملفّات على الجهاز المحلّي وأخرى على الخادوم. تعتمد أداة rsync
على خوارزميّة Algorithm تُقلِّل من حجم البيانات المُتبادَلة بين الطّرفين بنقل الأجزاء الّتي حَدَث فيها تغيير فقط، دون غيرها.
سنغطّي في هذا الدّليل أساسيّات استخدام هذه الأداة الفعَّالة. اعتمدنا للشّرح على خادوم Ubuntu 14.04؛ ولكن يجدُر بالأمثلة المقدَّمة هنا العمل على أيّ توزيعة لينوكس حديثة.
ماهيّ أداة Rsync؟
أداة Rsync
هيّ وسيلة مرنة للمزامنة عبر الشّبكة. يُمكن أن يُحيل الاسمُ أيضًا إلى البروتوكول المُطوَّر لاستخدام هذه الأداة. نتحدّث في هذا الدّليل عن Rsync
الأداة وليس البروتوكول.
تُضمَّن أداة rsync
افتراضيًّا في أغلب توزيعات لينوكس؛ نظرًا لشعبيّتها وانتشار استخدامها على الأنظمة الشبيهة بيونكس Unix-like.
الصّيغة القاعديّة ﻷمر rsync
من اليسير تنفيذ أمر rsync
فهو يعمل كما تعمل أوامر scp
، ssh
وcp
.
سننشئ، من أجل تجربة عمل rsync
، مجلّديْن وبعض الملفّات؛ عبر الأوامر التّاليّة:
cd ~ mkdir dir1 mkdir dir2 touch dir1/file{1..100}
يُصبِح لدينا بعد تنفيذ هذه الأوامر مجلّدان، dir1
وdir2
؛ الأوّل يحوي 100 ملفّ فارغة:
ls dir1
محتوى المجلّد dir1
:
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
لمزامنة محتوى المجلَّديْن dir1
وdir2
الموجوديْن على نفس النّظام، ننفّذ الأمر:
rsync -r dir1/ dir2
خيّار r-
يعني Recursive، أيّ تكراريّ؛ وهو ضروريّ لمزامنة المجلّدات.
يوجد أيضًا خيّار بديل هو a-
:
rsync -a dir1/ dir2
خيّار a-
، الّذي يعني archive، هو في الواقع تجميع لخيّاريْن؛ إذ يُزامن المجلّدات (عمل r-
) ويُحافِظ على الوصلات الرّمزيّة Symbolic links، ملفّات الأجهزة المُلحَقة Devices والملفّات الخاصّة، تاريخ التّعديل، المجموعة، المالِك والأذون Permissions. يُستخدم خيّار a-
أكثر من خيّار r-
؛ وربّما يكون الأنسب لك.
1- ملحوظة مهمّة للغاية
ربّما لاحظت شَرْطة مائلة Slash زائدة في نهاية المُعطى الأوّل في الأوامر أعلاه، مثلًا بعد dir1
في الأمر التّالي:
rsync -a dir1/ dir2
هذه الشَّرطة ضروريّة عندما نُريد نقل “محتوى المجلّد dir1
“. لو لم نستخدِم الشَّرطة في نهاية اسم المجلَّد فإنّ rsync
ستنقل المجلّد dir1
ومحتواه داخل dir2
. سينتُج إذن مجلّدات تكون بنيتُها على النّحول التّالي:
~/dir2/dir1/[files]
تأكّد دائمًا من معطيات rsync
قبل تنفيذ الأمر.
تُوفّر rsync
طريقة للتحقّق عند تمرير خيّار n-
أو dry-run--
، الّذي يُحاكي عمل الأمر دون إجراء التّغييرات فعليًّا. خيّار v-
(أي Verbose، مُطنِب) ضروريّ أيضًا للحصول على المُخرجات المُناسبة:
rsync -anv dir1/ dir2
مثال على النّتيجة:
sending incremental file list ./ file1 file10 file100 file11 file12 file13 file14 file15 file16 file17 file18 . . .
قارِن مُخرجات الأمر أعلاه، مع مخرجات الأمر عند حذف الشَّرطة المائلة من نهاية اسم المجلّد الأوّل:
rsync -anv dir1 dir2
النّتيجة:
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 . . .
يُمكن ملاحظة أنّه في الحالة الأخيرة يُنقَل المجلَّد dir1
نفسه. انتبه إلى أنّ الأوامر الأخيرة لا تُزامِن المجلّدات إذ أنّ هذه الأوامر محاكاة ولا تُنفَّذ فعليًّا نظرًا لاستخدام خيّار n-
.
كيف تستخدم Rsync للمزامنة عن بعد مع خادوم
يُمكن - بيُسر - مزامنة الملفّات عن بعد مع خادوم إذا كانت لديك إمكانيّة الولوج عبر SSH
مع وجود rsync
على الجهازيْن المحلّي والبعيد. إذا أردت إعداد مفاتيح SSH، فالدّرس التّالي يشرح كيف يكون ذلك.
تستطيع، بعد التّأكّد من إمكانيّة الاتّصال بين الجهازَين عبر SSH
، مزامنةَ المجلَّد dir1
أعلاه بجهاز بعيد عن طريق الأمر التّالي (يُرجى ملاحظة عدم استخدام الشّرطة المائلة في آخر اسم المجلَّد، إذ أنّنا نُريد نقل المجلَّد نفسِه):
rsync -a ~/dir1 username@remote_host:destination_directory
حيثُ username
اسم المستخدِم على الخادوم، remote_host
عنوان الخادوم، وdestination_directory
مسار المجلَّد الوجهة. تُسمَّى هذه العمليّة بالدّفع Push؛ إذ تدفع بالمجلّد من الجهاز المحلّي إلى الجهاز البعيد.
تُسمَّى العمليّة المُعاكسة بالسّحب Pull؛ وتُستخدَم لمزامنة مجلَّد على جهاز بعيد مع النّظام المحلّي. إن كان المجلَّد dir1
موجودًا على الجهاز البعيد فالأمر المُستخدَم لمزامنته مع الجهاز المحلّي هو:
rsync -a username@remote_host:/home/username/dir1 place_to_sync_on_local_machine
حيث place_to_sync_on_local_machine
مكان المزامنة على الجهاز المحلّي، وhome/username/dir1/
مسار المجلَّد dir1
على الجهاز البعيد.
المُعطى الأوّل في أمر rsync
- مثل cp
والأوامر المُشابهة - يُمثّل دائمًا المصدَر (Source)، بينما يُمثِّل المُعطى الثّاني الوجهة (Destination).
خيّارات مفيدة للاستخدام في Rsync
تُتيح Rsync خيّارات عديدة للتّعديل على السّلوك الافتراضيّ للأداة. تطرّقنا في الفقرات السّابقة لأكثرها ضرورة.
1- خيّار z-
إذا كنت تنقل ملفّات لم تُضغَط بعد، مثل ملفّات نصيّة، يُمكنك تقليل تبادل البيانات عبر الشّبكة بتفعيل ضغط الملفّات Compression عن طريق خيّار z-
:
rsync -az source destination
2- خيّار P-
خيّار مهمّ آخر هو P-
. حيثُ يجمع بين عمل خيّاريْن آخريْن هما progress--
وpartial--
. يعرِض الأوّل شريطًا بتقدّم عمليّات النّقل، أمّا الثّاني فيسمح باستكمال نقل الملفّ بعد انقطاعه:
rsync -azP source destination
مثال على النّتيجة:
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) file100 0 100% 0.00kB/s 0:00:00 (xfer#3, to-check=97/101) file11 0 100% 0.00kB/s 0:00:00 (xfer#4, to-check=96/101) …
إذا أعدنا تنفيذ الأمر مرةً أخرى سنلاحِظ مخرجاتٍ أقلّ نتيجةً لعدم وجود تغييرات على الملفّات. يُوضِّح هذا المثال قابليّة rsync
لاستخدام تاريخ التّعديل لتحديد وجود تعديلات من عدمها.
rsync -azP source destination
sending incremental file list sent 818 bytes received 12 bytes 1660.00 bytes/sec total size is 0 speedup is 0.00
نُحدِّث تاريخ تعديل بعض هذه الملفّات ونلاحِظ أنّ rsync
تنقل فقط الملفّات الّتي عُدِّل عليها:
touch dir1/file{1..10} rsync -azP source destination
النّتيجة:
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) . . .
3- خيّار delete–
لا يحذف الإعداد الافتراضيّ لrsync
ملفّات من الوِجهة عند حذفها من المصدَر، إذا أردنا مزامنة مجلَّدين بحيث يتطابق محتواهما فمن الضّروريّ حذف هذه الملفّات. يوجد خيّار delete--
للتّعديل عل هذا السّلوك. من الجيّد - احترازًا - استخدام خيّار dry-run--
لاختبار الأمر والتّأكّد من عدم ضياع ملفّات.
rsync -a --delete source destination
4- خيّارا exclude– وinclude–
يوجد أيضًا خيّار exclude--
لاستبعاد ملفّات أو مجلّدات من المزامنة. يُفرَّق بين الملفّات أو المجلّدات بفاصلة (,):
rsync -a --exclude=pattern_to_exclude source destination
في المثال أعلاه pattern_to_exclude
هو نمط تتبعه الملفّات المُراد استبعادها من المزامنة. مثلًا لاستبعاد صور ذات لاحقة jpg
يكون النّمط jpg.*
.
يوجد كذلك خيّار include
لإدراج بعض الملفّات أو المجلّدات الّتي ينطبق عليها نمط الاستبعاد، لإدراجها في المزامنة:
rsync -a --exclude=pattern_to_exclude --include=pattern_to_include source destination
خاتمة
تُسهِّل أداة Rsync نقل الملفّات عبر الشّبكة وتُحسّن من جودة مزامنة المجلّدات الموجودة على الجهاز المحلّي. تجعل المزامنة من Rsync خيّارًا جدًّا لكثير من العمليّات على مستوى الملفّات.
يسمح لك إتقان التّعامل مع rsync
بتصميم عمليّات نسخ احتيّاطيّ Backup والتحكّم الدّقيق بما يُنقَل وكيف.
ترجمة بتصرّف لمقال How To Use Rsync to Sync Local and Remote Directories on a VPS لصاحبه Justin Ellingwood.
أفضل التعليقات
لا توجد أية تعليقات بعد
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.