أداة rclone برنامج سطر أوامر لنقل الملفات بين الخادم وكل أنواع التخزين السحابي تقريباً، ومنها تخزين الكائنات المتوافق مع S3. وهي ممتازة لرفع ملفات المواقع وملفات التصدير والأرشيفات إلى حاوية، لكن أحد أوامرها، وهو sync، يحذف الملفات من الوجهة بحكم تصميمه. يشرح هذا الدليل إعداد وجهة S3، ومتى تستخدم copy ومتى تستخدم sync، ويضيف وسائل الأمان التي تمنع خطأً مطبعياً من إفراغ الحاوية.
ثبّت إصداراً حديثاً
تحقق من الإصدار الذي تستخدمه قبل الاعتماد على أي خيار. أحدث إصدار من المشروع وقت كتابة هذا المقال هو v1.75.2 (9 أكتوبر 2026)، بينما تحزم Debian 12 (bookworm) وDebian 13 (trixie) الإصدار 1.60.1. وتنبّه صفحة التثبيت الرسمية إلى أن حزم التوزيعات كثيراً ما تكون قديمة، وتوفر سكربت تثبيت وأمر selfupdate للتثبيتات التي لا يديرها مدير حزم:
rclone version
# official install script, as published on rclone.org/install
sudo -v ; curl https://rclone.org/install.sh | sudo bashإن فضّلت البقاء على حزمة Debian فتذكّر أن التوثيق في rclone.org يصف أحدث إصدار، فاختبر كل خيار عبر --help على إصدارك.
إعداد وجهة متوافقة مع S3
شغّل rclone config وأنشئ وجهة جديدة من النوع s3، واختر مزوّدك إن كان مدرجاً أو اختر «أي مزوّد آخر متوافق مع S3» (provider = Other). سيبدو الناتج في ~/.config/rclone/rclone.conf هكذا:
[objstore]
type = s3
provider = Other
env_auth = false
access_key_id = YOUR_ACCESS_KEY
secret_access_key = YOUR_SECRET_KEY
endpoint = https://s3.example.comمع المزوّد العام يستخدم rclone عناوين بأسلوب المسار افتراضياً (القيمة الافتراضية للخيار force_path_style هي true). وإذا لم يكن مفتاحك مخوّلاً بإنشاء الحاويات فأضف no_check_bucket = true (أو الخيار --s3-no-check-bucket) كي لا يحاول rclone ذلك. ثم اختبر الاتصال:
chmod 600 ~/.config/rclone/rclone.conf
rclone lsd objstore:
rclone ls objstore:my-bucket --max-depth 1ملف الإعداد يحوي بيانات اعتماد صالحة، فاجعله مقروءاً للحساب الذي يشغّل rclone فقط، أو فعّل تشفير الإعداد من rclone config بالخيار s (تعيين كلمة مرور للإعداد)، وعندها سيطلب rclone كلمة المرور عند كل تشغيل، ويمكن تمريرها عبر المتغير RCLONE_CONFIG_PASS أو الخيار --password-command.
copy أم sync: القرار الأهم
الأمر rclone copy ينقل الملفات الجديدة والمعدّلة ولا يحذف شيئاً من الوجهة أبداً. أما rclone sync فيجعل الوجهة مطابقة للمصدر، وهذا يشمل حذف ما لم يعد موجوداً في المصدر. ويقول التوثيق صراحة إن sync قد يسبب فقدان البيانات، لذا جرّبه أولاً مع --dry-run أو --interactive.
- استخدم copy حين ينبغي أن تتراكم الملفات في الحاوية: ملفات تصدير وأرشيفات ونسخ قواعد بيانات بأسماء مؤرخة.
- استخدم sync فقط حين تريد مرآة فعلية، وتذكّر أن المرآة ليست نسخة احتياطية؛ فإن حُذف ملف على الخادم أو شفّره برنامج فدية، نقلت المزامنة التالية هذا التغيير إلى الحاوية بأمانة.
وهناك تفصيلتان تفاجئان كثيرين: rclone يزامن محتويات مجلد المصدر لا المجلد نفسه، وإذا وقع أي خطأ أثناء المزامنة فلن يحذف rclone ملفات من الوجهة في ذلك التشغيل.
# see what would happen, change nothing
rclone sync /var/www/site objstore:my-bucket/site --dry-run
# confirm each change interactively
rclone sync /var/www/site objstore:my-bucket/site --interactive
# additive copy with live progress
rclone copy /var/backups/db objstore:my-bucket/db -Pوسائل أمان لأمر sync
الخيار --max-delete N يوقف التشغيل بخطأ إذا كان سيحذف أكثر من N ملف، فيلتقط الخطأ الشائع المتمثل في مزامنة مجلد فارغ أو خاطئ. والخيار --backup-dir ينقل كل ملف كانت المزامنة ستستبدله أو تحذفه إلى مسار آخر على الوجهة نفسها بدلاً من إزالته، ومع التاريخ يمنحك سجلاً بسيطاً للملفات المتغيرة:
rclone sync /var/www/site objstore:my-bucket/current \
--backup-dir objstore:my-bucket/old/$(date +%F) \
--max-delete 200 \
--log-file /var/log/rclone-site.log --log-level INFOيجب أن يكون مجلد النسخ على الوجهة نفسها وألا يتداخل معها، ولهذا يستخدم المثال مسارين متجاورين هما current وold. ستتراكم المجلدات القديمة، فنظّفها بقاعدة دورة حياة على الحاوية أو بمهمة دورية تستخدم rclone delete --min-age بعد اختبارها مع --dry-run.
تقييد عرض النطاق
قد تستهلك عمليات الرفع الكبيرة اتصال الخادم بالكامل. الخيار --bwlimit يقيس بالبايت في الثانية لا بالبت، فالقيمة --bwlimit 10M تعني 10 MiB/s. يمكنك تحديد الرفع والتنزيل كلٌّ على حدة (--bwlimit 10M:off يقيّد الرفع فقط)، أو وضع جدول زمني يبطّئ النقل في ساعات العمل:
rclone copy /srv/archive objstore:my-bucket/archive \
--bwlimit "08:00,2M 18:00,20M 23:00,off"تحقق مما وصل
الأمر rclone check يقارن الأحجام والبصمات بين المصدر والوجهة ويُبلغ عن الفروق دون تغيير أي طرف. ومع --one-way يكتفي بالتأكد من أن كل ما في المصدر موجود ومطابق في الوجهة، وهذا يناسب مهام copy التي تحتفظ وجهتها بملفات أقدم أيضاً.
rclone check /var/backups/db objstore:my-bucket/db --one-wayالتشفير على جهة العميل عبر crypt
الوجهة من النوع crypt تغلّف وجهة أخرى وتشفّر محتوى الملفات، وأسماءها اختيارياً، قبل الرفع. أنشئها عبر rclone config بالنوع crypt موجّهةً إلى مسار مثل objstore:my-bucket/encrypted، ثم استخدم اسمها الجديد في أوامرك. وقبل أن تضع بياناتك فيها افهم ما يلي:
- كلمة مرور crypt محفوظة في
rclone.confبصيغة مموّهة تموياً خفيفاً لا يصمد إلا أمام نظرة عابرة، ولا تكون آمنة ما لم تفعّل تشفير الإعداد. - احفظ كلمة المرور (وكلمة مرور الملح الاختيارية) في مكان آمن خارج الخادم؛ بها تعيد إنشاء الوجهة في أي مكان، ومن دونها لا يمكن فك تشفير البيانات.
- لا يمكن تغيير كلمة مرور بيانات مشفرة سلفاً؛ فتغييرها في الإعداد يجعل الملفات القديمة غير مقروءة، والسبيل الوحيد إعادة رفع كل شيء عبر وجهة crypt جديدة.
- الأمر
rclone checkلا يستطيع مقارنة البصمات عبر crypt، فاستخدمrclone cryptcheckبدلاً منه.
الجدولة
شغّل المهمة من مؤقت systemd أو cron بالحساب الذي يملك ملف الإعداد، مع --log-file ليبقى لديك سجل، وأطلق تنبيهاً حين ينتهي الأمر برمز خروج غير صفري. وابدأ كل مهمة جديدة بتشغيل تجريبي --dry-run واقرأ السجل قبل إزالة الخيار.
ما الذي ينبغي فعله
- تحقق من
rclone versionواستخدم إصداراً حديثاً إن كنت تعتمد على خيارات جديدة. - استخدم مفتاحاً مقصوراً على الحاوية، واحمِ
rclone.conf، وفكّر في تشفير الإعداد. - اجعل
copyخيارك الافتراضي، ولا تستخدمsyncإلا للمرايا الحقيقية، دائماً بعد--dry-runومع--max-deleteويفضّل مع--backup-dir. - أضف
--bwlimitعلى الخوادم التي تخدم المستخدمين في الوقت نفسه. - تحقق عبر
rclone checkأوcryptcheck، واحفظ كلمات مرور crypt في مكان آمن خارج الخادم. - تذكّر أن rclone ينقل الملفات؛ أما النسخ الاحتياطية ذات الإصدارات وإزالة التكرار وسياسات الاحتفاظ فاستخدم لها أداة نسخ مثل restic فوق الحاوية نفسها.
Comments
0 total · 0 threads