rsync مقابل scp — أي أمر نسخ في لينكس ومتى
rsync يتذكر وscp ينسى: السطر المُعلَّق، الاستئناف عبر --partial --append-verify، نقل الفروقات في الإعادات، وجدول الحكم — كل أمر يعمل كما هو.
Both ship with OpenSSH on virtually every Linux distribution — this is a خيار عادة لا خيار تثبيت، والعادة ينبغي أن تكون rsync افتراضياً. الفرق في الحالة: scp يفتح قناة SSH ويلفق البايتات ويغلق ولا يتذكر شيئاً. أما rsync فيبني قائمة checksums للوجهة قبل الإرسال وينقل ما يختلف فقط. كل ما في هذه الصفحة يسقط من هذه الجملة.
rsync للنسخ الاحتياطية والأشجار الكبيرة وكل ما ستشغّله أكثر من مرة — scp لملف صغير واحد، مرة واحدة.
scp cannot resume : انقطاع عند 900 MB من 1 GB — ينقص 100 MB — يعيد من الصفر. rsync مع --partial --append-verify يحول ذلك الإعادة إلى وقفة.
On re-runs rsync moves الكتل المتغيرة فقط; scp re-sends everything. The one flag to take away: --partial.
السطر الوحيد، مع التعليقات
معظم الناس لا يحتاجون سواه — كل علم مُعنون، بالترتيب:
الشرطة الأخيرة تزحم الجميع مرة واحدة — rsync حتى يحذر بـ"no bytes transferred" حين تقصد الصيغة الأخرى
ما الذي تشتريه فرق الحالة
scp does one thing: open an SSH channel, stream the bytes, close. No state between runs, so a transfer that dies at 90% restarts from zero and re-sends the whole 1,000 MB. rsync أداة مزامنة تستخدم SSH وسيلة نقل بالصدفة: قبل الإرسال يبني قائمة checksums للوجهة (خوارزمية rolling-checksum
- الانقطاعات : rsync يستأنف؛ scp يعيد الملف.
- النسخ الثانية : rsync يرسل التغييرات فقط؛ scp يعيد إرسال كل شيء.
- الحذف : rsync يمكنه عكس الحذف عبر
--delete; scp cannot. - الفلترة : rsync لديه أنماط
--exclude; وscp ينسخ كل ما تشير إليه. - التجريبات الجافة: rsync shows what it would do with
--dry-run; وscp لا يقدم شيئاً.
هل rsync أسرع؟
لنسخة أولى لملف كبير عبر وصلة سريعة هما متقاربان — كلاهما يشبع SSH، ومرور checksums يضيف كلفة يسيرة. الفجوة تفتح في ثلاثة مواضع:
- ملفات صغيرة بالجملة. rsync يخزّن جولات المسح للمجلدات ويمكنه إعادة استخدام اتصال واحد؛ إعدادات scp الأقدم تفتح عملية لكل ملف. آلاف الملفات الصغيرة —
node_modulesأو تثبيت ووردبريس — تكتمل بوضوح أسرع مع rsync. - الإعادات. انسخ ملفاً حجمه 4.0 GB تغيّر منه 50 MB وينقل rsync نحو 50 MB؛ بينما ينقل scp الـ 4 GB مجدداً.
- Compression.
-zيضغط في الطيران، وهو عون على الوصلات WAN البطيئة.
يمكنك توقيت كليهما بنفسك — الأمر متماثل الشكل، والإعادة هي موضع الجواب:
# الملف نفسه، الخادم نفسه، كلاهما عبر SSH
time scp bigfile.tar.gz user@server:/tmp/
time rsync -avh --progress bigfile.tar.gz user@server:/tmp/
# أعِد تشغيل كليهما: scp يعيد النسخ، rsync يتحقق ولا يرسل شيئاً تقريباً
time scp bigfile.tar.gz user@server:/tmp/
time rsync -avh --progress bigfile.tar.gz user@server:/tmp/
تعويذة الاستئناف
لا، scp لا يستطيع استئناف نقل مقطوع — لا علم ولا خدعة. تصميم rsync كله يفترض أن النقل سينقطع أحياناً:
rsync -avh --partial --append-verify --progress bigfile.tar.gz user@server:/srv/backup/
--partialيبقي الملف نصف المكتوب بدل حذفه.--append-verifyيستأنف بالإلحاق ثم يتحقق checksum من المنطقة الملحقة — آمن ضد ملف جزئي تالف، بخلاف--append. القديم البسيط.--progressيريك من أين التقى الموضوع.
ملفوفاً في حلقة إعادة محاولة، تكون نسخة احتياطية "اضبط وانسَ" حتى على اتصال معادٍ:
until rsync -avh --partial --append-verify --progress \\
./bigfile.tar.gz user@server:/srv/backup/; do
sleep 5
done
تحقق: شغّل rsync نفسه مجدداً → يتحقق ولا يرسل شيئاً تقريباً
متى ما زال scp يفوز
- ملف صغير واحد، مرة واحدة. كتابة
scp app.conf user@host:/etc/myapp/أقصر من أي استدعاء rsync، ولا شيء يستأنف أصلاً. - rsync غائب في الطرف الآخر. يحتاج rsync ثنائيّه على الجانبين. كثير من الحاويات الدنيا والأجهزة تأتي بخادم SFTP الخاص بـ scp دون rsync.
- لا تريد تعريض خفي rsync. نادر، لكن بعض البيئات تُقفل الخفي rsync تحديداً.
One subtlety worth knowing: the OpenSSH project deprecated scp's original protocol years ago, and modern scp actually speaks SFTP تحت الغطاء. هذا أصلح عُجلة تهريب المسارات، لكنه لم يغيّر شيئاً في قيدين يهمّان — لا استئناف، ولا نقل فروقات. تغيير البروتوكول لا يحول scp إلى rsync. وإذا كان سؤالك فعلاً "rsync أم cp": cp هو النظير المحلي فقط لـ scp — بلا استئناف ولا فروقات ولا خصائص ما لم تضف أعلاماً — وللمهام المحلية الأحادية هو مناسب.
الخطِر
--delete يعكس الحذف أيضاً — يزيل من الوجهة الملفات التي اختفت من المصدر. قوي للمرايا، خطِر في كل ما سواه. جرّب جافة أولاً:
rsync -avh --delete --dry-run src/ user@server:/srv/dest/ # للمراجعة
rsync -avh --delete src/ user@server:/srv/dest/ # ثم التنفيذ
تحقق: مرور --dry-run يطبع قائمة الحذف ولا يغيّر شيئاً
لمزامنة يومية أو أسبوعية، أدخل rsync في مؤقت systemd ودعه ينقل الفروقات فقط — الصحيفة هي حيث تترك التشغيلات قصتها.
جدول الحكم
| scp | rsync | |
|---|---|---|
| يأتي مع OpenSSH | Yes | نعم |
| استئناف نقل مقطوع | No | نعم (--partial) |
| نقل الفروقات في الإعادات | No | Yes |
| يحفظ الأذونات/الروابط الرمزية | جزئياً | تماماً (-a) |
| أنماط استبعاد | No | --exclude |
| تجربة جافة | No | --dry-run |
| يعكس الحذف | No | --delete |
| الأفضل لـ | نسخ سريعة لمرة واحدة | النسخ الاحتياطية والمزامنات والأشجار الكبيرة |
الافتراضي rsync للنسخ الاحتياطية والأشجار الكبيرة وكل ما يمر عبر وصلة قد تنقطع وكل ما ستشغّله أكثر من مرة. استخدم scp عندما يكون الأمر لمرة واحدة ولن ينقطع شيء — وأضف دائماً --partial — فهو يحول كل انقطاع قادم من إعادة إلى وقفة.
نهاية صفحة النسخ · لم يُجلب شيء · كل شيء محلي