Bash + rclone · OneDrive ↔ Google Drive · دليل تشغيل مفتوح المصدر

نقل سحابي للنسخ فقط باستخدام Bash وrclone

يفهم rclone بالفعل تقسيم نتائج الخدمات السحابية إلى صفحات، وإعادة المحاولة، وعمليات النقل القابلة للاستئناف، وقيم التجزئة الخاصة بموفّري الخدمات. وتتمثل المهمة الهندسية في إحاطة هذه العناصر الأساسية بإجراء تشغيلي يتوقف بأمان عند الخطأ ويراعي السعة.

آخر تحديث ; 20 دقيقة للقراءة.

الإجابة المختصرة

يُعد FileArk الخيار المُدار الأبسط لعمليات الترحيل الكبيرة أو غير الخاضعة للمراقبة؛ فهو ينفّذ النقل عبر الإنترنت، وقد اختُبر مع أحمال عمل متعددة التيرابايت، ويتحقق من كل نتيجة قبل الإكمال. أما المشغّلون الذين يريدون مسار بيانات تتحكم فيه الصدفة، فيمكنهم استخدام هذا البرنامج المغلّف المكتوب بلغة Bash والمرخّص بموجب MIT، إذ ينسخ دفعات محدودة عبر تجهيز مرحلي محلي، ويتحقق من مرحلتي النقل بايتًا ببايت، ولا يحذف ملفات المصدر مطلقًا.

لماذا نستخدم برنامجًا مغلّفًا حول rclone بدلًا من إعادة بناء عميل لكل موفّر خدمة؟

يوفّر rclone لسير العمل عبر الصدفة طبقة تجريد ناضجة لموفّري الخدمات، وإعداد OAuth، وتقسيم النتائج إلى صفحات، وآلية لإعادة المحاولة، وعمليات نقل قابلة للاستئناف، وعناصر تحكم في التزامن، وأوامر لجرد المحتويات والتحقق منها. لذلك يمكن للبرنامج المغلّف التركيز على ثوابت الترحيل: أوامر النسخ فقط، والتجهيز المرحلي المحدود، واحتياطيات السعة، وقوائم الملفات الحتمية، والتقدم المحفوظ بصورة دائمة.

لكن ذلك لا يجعل المهمة تلقائية. يظل المشغّل مسؤولًا عن إعداد الوجهات البعيدة، وأمان الرموز، واستمرارية الشبكة، والإشراف على العملية، والقرص المحلي، والسجلات، وحدود موفّري الخدمات، ومراجعة العناصر الفاشلة، وقبول الوجهة. صُمم FileArk للمستخدمين الذين يريدون تنفيذ هذا الإجراء كسير عمل مُدار عبر الإنترنت بدلًا من تشغيله على محطة عملهم أو خادمهم.

لا يستدعي البرنامج النصي صراحةً أوامر rclone move أو sync أو delete أو purge أو rmdirs مطلقًا. ويستخدم lsf وabout للاستكشاف، وcopy لكل مرحلة، وcheck --download للتحقق من جميع البايتات. ولا تُجرى الإزالة إلا لملف جرى التحقق منه من دليل التجهيز المرحلي المحلي.

تنزيل إصدار Bash وترخيص MIT

تنزيل برنامج النقل باستخدام Bash وrclone
برنامج مغلّف للنسخ فقط، يوفّر حدودًا للدفعات، واحتياطيات محلية وفي الوجهة، وتحققًا من جميع البايتات، ونقاط تحقق، وعناصر تحكم في إعادة المحاولة، وعرضًا توضيحيًا لا يتطلب شبكة.
fileark-cloud-transfer.sh · Bash 4+ · rclone · jq · ترخيص MIT

نزّل ترخيص MIT
إشعار الإذن الذي يغطي برنامجي FileArk النصيين للنقل اليدوي.
LICENSE-fileark-cloud-transfer.txt · MIT · نص عادي

شغّل العرض التوضيحي للمشغّل من دون اتصال بالشبكة

طرفية تشغّل برنامج FileArk النصي للنقل السحابي باستخدام Bash وrclone في الوضع التجريبي
يوضح العرض التوضيحي عبور دفعة واحدة محدودة السعة لحدَّي التحقق. ولا يفحص إعدادات rclone أو يتصل بخدمة سحابية أو يكتب بيانات عن بُعد.

يمكن تشغيل العرض التوضيحي بأمان قبل تثبيت rclone أو jq، لأن تحليل الوسيطات ينتهي قبل التحقق من التبعيات. وتُسمّي المخرجات العمليات الإتلافية المحظورة، وتعرض احتياطيي السعة، وتنتهي بعدد عمليات حذف الملفات من المصدر.

افحص التنزيل وأجرِ له اختبارًا أوليًا سريعًا
chmod +x fileark-cloud-transfer.sh
bash -n fileark-cloud-transfer.sh
./fileark-cloud-transfer.sh --demo
./fileark-cloud-transfer.sh --help

ثبّت تبعيات المشغّل واضبط إعداداتها

ثبّت إصدارًا حديثًا من rclone باتباع تعليماته الرسمية، وثبّت jq من خلال مدير حزم نظام التشغيل. يلزم Bash 4 أو إصدار أحدث لأن البرنامج المغلّف يستخدم معالجة صارمة للأخطاء وتعبيرات شرطية حديثة.

شغّل rclone config وأنشئ وجهتين بعيدتين باسمين مستقلين، مثل onedrive: وgdrive:. أدخل معرّف العميل والسر الخاصين بك لدى موفّر الخدمة عندما تتطلب السياسة أو حدود المعدل تطبيقات OAuth مخصصة. يخزّن rclone رموز OAuth في ملف الإعداد الخاص به؛ احمِ هذا الملف بأذونات مقيّدة ولا ترفقه مطلقًا مع البرنامج النصي.

تحقق من كل وجهة بعيدة باستخدام أمر لسرد المحتويات للقراءة فقط وأمر للحصة قبل تشغيل البرنامج المغلّف. استخدم مسارات مثل onedrive:Department/Archive عندما يقتصر النطاق على شجرة فرعية.

إعداد الوجهتين البعيدتين وفحصهما
rclone version
rclone config
rclone lsd onedrive:
rclone lsd gdrive:
rclone about onedrive: --json | jq
rclone about gdrive: --json | jq

ثبّت قائمة محتويات حتمية قبل نقل البايتات

يستخدم البرنامج المغلّف الأمر rclone lsf بشكل تكراري مع تحديد علامة التبويب فاصلًا وتنسيق sp، ما ينتج الحجم متبوعًا بالمسار. ويتحقق من أن كل حجم رقمي وأن كل مسار نسبي، ثم يستبعد المسارات الموجودة بالفعل في نقطة التحقق المعتمدة.

يرفض إصدار Bash أسماء الملفات التي تحتوي على علامات تبويب أو أحرف إرجاع أو أسطر جديدة، لأن قوائم --files-from-raw المحددة بأسطر جديدة لا تستطيع تمثيلها دون التباس. استخدم إصدار Python أو تنسيقًا مخصصًا لجرد المحتويات عند وجود مثل هذه الأسماء.

تتميز نقطة التحقق المستندة إلى المسار بالبساطة وسهولة الفحص عن قصد. وهي تفترض بقاء مسارات المصدر ثابتة أثناء التشغيل. أوقف الكتابة إلى المصدر إن أمكن، أو أعد إنشاء قائمة المحتويات ووفّق بينها عند توقع تغييرات متزامنة.

الأداة الأساسية لجرد المحتويات التي يستخدمها البرنامج المغلّف
rclone lsf "$SOURCE" \
  --recursive \
  --files-only \
  --format "sp" \
  --separator 
    
  

\t' > "$inventory"

أوقف التنفيذ قبل أن تستهلك الدفعة المساحة الاحتياطية

تأتي البايتات المحلية الخالية من df على نظام ملفات التجهيز المرحلي. وتأتي البايتات الخالية في الوجهة من rclone about --json؛ إذ يستخدم البرنامج النصي قيمة free عند توفّرها، وإلا فيطرح used من total. ويتحقق من إجمالي البايتات المعلّقة قبل بدء العمل، ثم يعيد التحقق من السعة المحلية وسعة الوجهة قبل كل دفعة.

لا تنشر بعض الجهات المزوّدة أو أنواع الحسابات حصة محدودة عبر rclone. يعرض البرنامج المغلّف هذا القيد ويواصل العمل وفق الحدود التي يفرضها المزوّد. تعامل مع ذلك باعتباره متطلبًا للمراقبة، وليس دليلًا على توفر مساحة كافية.

حد الدفعة ليس حدًا أقصى صارمًا لعنصر واحد. يمكن لملف واحد أكبر من حجم الدفعة المضبوط أن يشكّل دفعة مستقلة، لذا يجب أن تكفي المساحة المحلية الخالية لأكبر ملف بالإضافة إلى الاحتياطي. يقرأ التحقق الكامل من الوجهة البايتات منها، لكنه لا يحتفظ بنسخة محلية ثانية في إصدار rclone.

تحقّق من جانبي حدود التجهيز المرحلي المحلي

تمر كل دفعة بمرحلتين مستقلتين. أولًا، ينسخ rclone مسارات المصدر المحددة إلى منطقة التجهيز المرحلي المحلية باستخدام --ignore-existing، ثم يقرأ check --download المحتوى من الجانبين ويقارن المحتوى الفعلي. ثانيًا، ينسخ rclone هذه المسارات المجهّزة إلى الوجهة ويكرر التحقق نفسه من جميع البايتات.

يجعل --ignore-existing عمليات التشغيل المنقطعة غير إتلافية، إذ لا يُستبدل أي عنصر موجود. ومع ذلك، يجب أن ينجح التحقق قبل إضافة المسار إلى نقطة التحقق. وإذا اختلفت الوجهة الموجودة، يفشل rclone check وتؤدي معالجة الأخطاء الصارمة في Bash إلى إيقاف التشغيل.

يؤدي استخدام --download إلى إبطاء العملية واستهلاك عمليات إخراج البيانات والقراءة لدى المزوّد، لكنه يجنبك الاعتماد فقط على ما إذا كان المزوّدان يتيحان خوارزمية تجزئة مشتركة. لا يعدّل الأمر أيًا من الجانبين.

مرحلتَا النسخ والتحقق
rclone copy "$SOURCE" "$STAGING_DIR" \
  --files-from-raw "$batch_list" \
  --ignore-existing --retries 6 --low-level-retries 20

rclone check "$SOURCE" "$STAGING_DIR" \
  --files-from-raw "$batch_list" --one-way --download

rclone copy "$STAGING_DIR" "$DESTINATION_ROOT" \
  --files-from-raw "$batch_list" \
  --ignore-existing --retries 6 --low-level-retries 20

rclone check "$STAGING_DIR" "$DESTINATION_ROOT" \
  --files-from-raw "$batch_list" --one-way --download

شغّل النقل من OneDrive إلى Google Drive بتجهيز مرحلي محدود السعة

يترك المثال 15 GiB من القرص المحلي دون استخدام، ويحافظ على 10 GiB خالية في Google Drive، ويقصر الدفعة العادية على 8 GiB أو 200 ملف، ويستخدم أربع عمليات نقل متزامنة. ويُكتب محتوى الوجهة داخل مجلد جديد يحمل تاريخًا.

استخدم --dry-run أولًا. فهو يحصر محتويات المصدر ويفحص حصة الوجهة مسبقًا من دون تنزيل أو رفع أي بيانات. يعرض البرنامج المغلّف إجمالي البايتات المعلّقة، ويجب مطابقته مع نطاق عملية النقل قبل تشغيل أول دفعة فعلية.

أجرِ الفحص المسبق، ثم نفّذ النطاق نفسه
./fileark-cloud-transfer.sh \
  --source onedrive: \
  --destination gdrive: \
  --destination-folder "OneDrive archive 2026-07-25" \
  --staging-dir /srv/fileark-staging \
  --state-file ./onedrive-to-google-verified.txt \
  --batch-gib 8 \
  --batch-files 200 \
  --local-reserve-gib 15 \
  --destination-reserve-gib 10 \
  --transfers 4 \
  --checkers 8 \
  --dry-run

# Remove only --dry-run after reviewing the preflight.

اعكس اتجاه النقل من دون إعادة استخدام الحالة

البرنامج المغلّف محايد تجاه موفّر الخدمة لأن rclone يتولى محوّلات الوجهات البعيدة. بدّل وسيطات الوجهات البعيدة لنسخ Google Drive إلى OneDrive، وحدد لذلك التشغيل مجلد وجهة ومسار تجهيز مرحلي وملف نقطة تحقق جديدة.

تتطلب مستندات Google وجداول بيانات Google وعروض Google التقديمية وغيرها من التنسيقات الافتراضية الأصلية من Google إعداد تصدير rclone ومراجعة دقيقة. تحقّق من امتدادات الملفات المصدَّرة وسلوك التحويل باستخدام مجموعة اختبار. لا تحتفظ عملية النسخ عبر الصدفة بسجل التعاون في Google أو الاختصارات أو الأذونات أو بيانات التعريف الخاصة بـ Microsoft.

من Google Drive إلى OneDrive
./fileark-cloud-transfer.sh \
  --source gdrive: \
  --destination onedrive: \
  --destination-folder "Google archive 2026-07-25" \
  --staging-dir /srv/google-staging \
  --state-file ./google-to-onedrive-verified.txt \
  --batch-gib 8 \
  --local-reserve-gib 15

لا تُضف إلى نقطة التحقق إلا بعد التحقق من الوجهة

بعد انتهاء فحص الوجهة بنجاح، يضيف البرنامج المغلّف كل مسار نسبي إلى نقطة تحقق بنص عادي. ثم يحذف ذلك الملف من منطقة التجهيز المرحلي المحلية ويزيل الأدلة المحلية الفارغة. وتظل الوجهة البعيدة المصدر من دون تغيير.

تُضاف البيانات إلى نقطة التحقق فقط أثناء التشغيل، ويسهل تدقيقها بالأدوات القياسية. احتفظ بها إلى جانب سطر الأوامر، وإصدار rclone، وبصمة الإعداد، وقائمة المحتويات، والسجلات، والطوابع الزمنية، وملاحظات القبول. لا تعدّلها لتجاوز فشل ما إلا إذا جرى التحقق من ملف الوجهة بصورة مستقلة.

لا تستطيع نقطة تحقق تعتمد على المسار وحده اكتشاف عنصر في المصدر تغيّر محتواه من دون أن يتغيّر مساره. بالنسبة إلى مجموعات البيانات القابلة للتغيير، أوقف عمليات الكتابة مؤقتًا، وسجّل معرّفات المزوّد وبيانات تعريف التعديل بصورة منفصلة، أو استخدم نقطة التحقق الأكثر صرامة في إصدار Python، التي تعتمد على المعرّف والحجم. ولعمليات النقل الخاضعة للوائح أو التعاونية، استخدم سير عمل مُدارًا مع تحكم صريح في التغييرات.

اعتبر كل خروج برمز غير صفري دفعة لم تُحسم

  • يُنهي الوضع الصارم التشغيل عند فشل أمر أو سلسلة أوامر أو متغير غير معيّن، ويُحذف الدليل المؤقت لقائمة المحتويات تلقائيًا.
  • يعيد rclone محاولة عمليات النقل ذات الأعطال المؤقتة، لكن أخطاء الأذونات أو الحصة أو الشبكة أو التعارض أو السلامة المستمرة توقف الدفعة.
  • تظل الملفات المجهّزة التي لم تُضف إلى نقطة التحقق متاحة للفحص، ويستخدم التشغيل المطابق المعاد --ignore-existing قبل التحقق من بايتاتها.
  • لا تتم الكتابة مطلقًا فوق ملف مختلف في الوجهة. عالج التعارض أو اختر جذر وجهة فارغًا.
  • لا تحوّل عملية نسخ فاشلة إلى rclone sync أو move، إذ تختلف دلالات الحذف في هذين الأمرين.
  • احتفظ بالسجلات ونقطة التحقق حتى يكتمل القبول اليدوي للوجهة.

أمّن المضيف الذي يصبح مستوى نقل البيانات

يحتوي مضيف التجهيز المرحلي مؤقتًا على نُسخ قابلة للقراءة من بيانات المصدر ورموز تحديث OAuth. استخدم تشفيرًا كاملًا للقرص وأذونات ملفات مقيّدة وحسابًا مخصصًا في نظام التشغيل وتبعيات محدَّثة ووصولًا مضبوطًا للمسؤولين وسياسة نسخ احتياطي مشفّرة لا تحتفظ بمحتوى التجهيز المرحلي على نحو غير متوقع.

تجنّب وضع الأسرار في سطر الأوامر، لأن قوائم العمليات وسجل الصدفة قد يكشفانها. يمكن لإعداد rclone المحمي إخفاء الرموز المخزنة، لكنه ليس بديلًا لأمان المضيف. أزل بيانات الرموز وبقايا التجهيز المرحلي بعد قبول الترحيل، وفقًا لسياسة الاحتفاظ لديك.

راقب سجلات تدقيق موفّر الخدمة، وحركة البيانات الصادرة عبر الشبكة، وحالة القرص، وتوفّر عُقد inode، وحالة العملية، ومخرجات rclone. لا تُعد نافذة طرفية متروكة مفتوحة إشرافًا على العملية؛ استخدم مدير خدمات أو معدّد طرفيات معتمدًا، واحفظ السجلات بصورة دائمة.

اختتم الترحيل بالأدلة، لا بمجرد أمر ناجح

  • أرشف قائمة المحتويات المثبّتة، والأمر الدقيق، والمجموع الاختباري للبرنامج النصي، وإصدار rclone، وبصمة إعداد الوجهة البعيدة، ونقطة التحقق المعتمدة.
  • طابق أعداد الملفات وأحجام البيانات المعروفة بالبايت لكل مجلد، وليس على مستوى إجمالي محرك الأقراص فقط.
  • افتح عينة مستندة إلى المخاطر من المستندات الكبيرة والصغيرة والقديمة والجديدة، وتلك التي تستخدم Unicode أو المتداخلة بعمق أو المؤرشفة أو المحوّلة.
  • اختبر الوصول إلى الوجهة من حسابات مستخدمين ممثّلة، وأعد إنشاء إعدادات المشاركة المطلوبة بصورة منفصلة.
  • راجع الحزم والاختصارات والروابط والمستندات الأصلية التي جرى تخطيها، بالإضافة إلى التعارضات وتحذيرات موفّر الخدمة.
  • أبقِ المصدر متاحًا خلال فترة تداخل، واحصل على موافقة صريحة من المالك قبل اتخاذ أي قرار لاحق بشأن الاحتفاظ أو الحذف.

الأسئلة الشائعة

لماذا يستخدم برنامج Bash النصي الأمر rclone copy بدلًا من sync؟

لا يحذف النسخ العناصر من المصدر، ولا يزيل من الوجهة العناصر غير الموجودة في المصدر. أما المزامنة فلها دلالات مختلفة للتوفيق والحذف، لذا استُبعدت عمدًا من سير العمل هذا.

هل يغيّر rclone check --download أيًا من الخدمتين السحابيتين؟

لا. فهو يقرأ محتوى الملفات ويقارنه. يستخدمه البرنامج النصي بعد كل مرحلة من مراحل النسخ، بحيث لا يُسجَّل المسار في نقطة التحقق إلا بعد تطابق بايتات الوجهة مع بايتات التجهيز المرحلي.

ماذا يحدث عندما تحتوي الوجهة على ملف بالفعل؟

تستخدم عملية النسخ --ignore-existing، ثم تجري تحققًا من جميع البايتات. يمكن لعنصر مطابق أن يجتاز التحقق، أما العنصر المختلف فيؤدي إلى فشله. ولا يستبدل البرنامج النصي الملف المتعارض مطلقًا.

هل يستطيع البرنامج النصي معالجة ملفات أكبر من دفعة واحدة؟

نعم. يصبح الملف الواحد الذي يتجاوز الحجم المحدد دفعة مستقلة. يجب أن تتوفر في نظام ملفات التجهيز المرحلي مساحة تكفي لذلك الملف، بالإضافة إلى الاحتياطي المحلي المضبوط.

هل تنقل هذه العملية الأذونات أو الإصدارات أو بيانات التعاون الأصلية للسحابة؟

لا. فهي تنسخ محتوى الملفات ومساراتها عبر rclone. أما التحكم في الوصول والإصدارات والتصنيفات والتعليقات والاختصارات والروابط وقواعد الاحتفاظ والسلوك الأصلي للمزوّد، فتتطلب تخطيطًا وتحققًا منفصلين.

المصادر الرسمية المستخدمة في هذا الدليل

اقرأ الدليل