كيف صرت أعتمد على rsync لنقل الملفات بدون وجع رأس
في البداية كنت أستخدم أوامر بسيطة لنقل الملفات:
cp، scp، وأحيانًا sftp.
وكانت تمشي… إلى أن كبر الشغل.
مع الوقت صرت أتعامل مع:
- مجلدات كبيرة
- ملفات تتحدث باستمرار
- نسخ احتياطية
- نقل ملفات بين جهاز محلي وسيرفر
هنا بدأت تظهر المشاكل الحقيقية:
نقل بطيء، إعادة نسخ ملفات ما تغيرت، وانقطاع الاتصال يضيع كل شيء.
وقتها تعرفت فعليًا على rsync.
وش يميز rsync عن أي طريقة نقل ثانية؟
rsync ما ينقل كل شيء كل مرة،
هو ذكي ويقارن بين المصدر والوجهة.
يعني:
- ينقل فقط الملفات الجديدة أو اللي تغيرت
- إذا انقطع النقل يقدر يكمله
- سريع جدًا مع المجلدات الكبيرة
- ممتاز للباك أب
بعد ما استخدمته، صرت أعتبره الأداة الأساسية لأي نقل ملفات.
أبسط استخدام لـ rsync
نقل مجلد محلي لمجلد ثاني:
rsync -av source/ destination/
وش تعني الخيارات:
- -a وضع الأرشفة (يحافظ على الصلاحيات والتواريخ)
- -v عرض التفاصيل أثناء النقل
مهم جدًا تلاحظ علامة
/ بعد اسم المجلد،
فرقها يغير سلوك النقل بالكامل.
نقل ملفات بين جهازي والسيرفر
هنا بدأ استخدامي الحقيقي لـ rsync.
نقل مجلد من جهازي للسيرفر:
rsync -av project/ user@server:/var/www/project/
نقل من السيرفر لجهازي:
rsync -av user@server:/var/www/project/ ./project/
الميزة هنا:
- أسرع من scp
- لو قطعت الاتصال ما يعيد من الصفر
استخدام rsync عبر SSH (الطريقة اللي أستخدمها دايم)
rsync يشتغل تلقائيًا عبر SSH،
وإذا كنت مرتب اتصالك بمفاتيح SSH، يصير الموضوع أسهل.
مثال:
rsync -av -e ssh backups/ server:/home/backups/
وبما إني أستخدم أسماء مختصرة للسيرفرات في ملف ssh config،
أقدر أكتب:
rsync -av backups/ vps:/home/backups/
بدون IP ولا بورت ولا يوزر.
شرح إعداد مفاتيح SSH وتنظيم الاتصال موجود في مقال منفصل .
مقال مفاتيح SSH
تجاهل ملفات ما أحتاجها
من أكثر الأشياء اللي أستخدمها:
rsync -av --exclude="node_modules" --exclude=".git" project/ server:/var/www/project/
هذا يوفر:
- وقت
- مساحة
- نقل أشياء ما لها داعي
حذف الملفات اللي انحذفت من المصدر
للباك أب الحقيقي، لازم الوجهة تعكس المصدر.
rsync -av --delete source/ destination/
تنبيه مهم:
هذا الخيار قوي، وإذا استخدمته غلط ممكن يحذف ملفات مهمة،
دايم أراجعه قبل التشغيل.
التجربة قبل التنفيذ (Dry Run)
قبل أي نقل حساس، أستخدم:
rsync -av --dry-run source/ destination/
هذا يعرض لك:
بدون ما يسوي أي تغيير فعلي.
دمج rsync داخل Bash Script
هنا بدأ rsync يصير جزء من النظام عندي.
مثال سكربت باك أب بسيط:
#!/bin/bash
SOURCE="/var/www/project"
BACKUP="/home/backups/project"
if [ ! -d "$SOURCE" ]; then
echo "Source not found"
exit 1
fi
rsync -av --delete "$SOURCE/" "$BACKUP/"
echo "Backup completed at $(date)"
السكربت هذا:
- يتأكد إن المصدر موجود
- يسوي مزامنة ذكية
- يحدث الباك أب بدون تكرار
تشغيل السكربت على أكثر من سيرفر
بما إني منظم اتصال SSH، أقدر أسوي سكربت ينقل لعدة سيرفرات:
#!/bin/bash
SERVERS=("vps" "homeserver")
for server in "${SERVERS[@]}"; do
rsync -av project/ "$server:/var/www/project/"
done
بدون تكرار أو أوامر طويلة.
تسجيل النقل (Logging)
دايم أحب أعرف وش صار:
rsync -av project/ server:/var/www/project/ >> rsync.log 2>&1
أو داخل السكربت:
echo "Sync started at $(date)" >> rsync.log
إذا صار خطأ، أرجع للملف وأفهم وش اللي حصل.
ليش rsync صار أداة أساسية عندي
rsync علمني فكرة مهمة:
النقل الذكي أهم من النقل السريع فقط.
اليوم أستخدمه في:
- نسخ احتياطية
- نقل مشاريع
- مزامنة ملفات بين أجهزة
- تشغيله داخل سكربتات