كيف تستخدِم Rsync لمزامنة مجلّدات بين الجهاز المحلّي والخادوم


محمد أحمد العيل

مقدّمة

تُستخدم أداة 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.





تفاعل الأعضاء


لا توجد أيّة تعليقات بعد



يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن