استخدام التخريب للنسخ الاحتياطي للأغراض العامة

StackOverflow https://stackoverflow.com/questions/61888

  •  09-06-2019
  •  | 
  •  

سؤال

هل من الممكن استخدامها أباتشي التخريب (SVN) كأداة نسخ احتياطي للأغراض العامة؟(كنوع من rsync بديل.)

هل كانت مفيدة؟

المحلول

لقد وجدت أن هذه المقالة عبارة عن وصف رائع لاستخدام svn لعمل نسخة احتياطية من دليلك الرئيسي، والمزيد:

أستخدم Subversion لإجراء نسخ احتياطي لصناديق Linux الخاصة بي.مع بعض الإبداع البسيط، فإنه يغطي بسهولة:

  • لقطات يومية ونسخ احتياطي خارج الموقع.
  • سهولة إضافة وإزالة الملفات والمجلدات.
  • تتبع مفصل لإصدارات الملف.

كما يسمح ببعض الميزات الإضافية:

  • رسائل بريد إلكتروني منتظمة للسجل لتتبع نشاط نظام الملفات عبر خطافات الأحداث الخاصة بـ Subversion.
  • يمكن للمستخدمين طلب سحب مجلداتهم الرئيسية من أي مراجعة للمستودع.
  • يمكن إعداد خوادم جديدة أو بديلة باستخدام بعض أوامر svn checkout.

مصدر: http://www.mythago.net/svn_for_backup.html

ايضا وجد هذا المقال والذي يعرض مثالاً لإصدار الدليل الرئيسي الخاص بك.يتيح لك هذا إحضار بيئتك معك عن طريق التحقق من الدليل الرئيسي الخاص بك في جهاز جديد.اعتدت أن أفعل شيئًا مشابهًا ووجدته مفيدًا جدًا.

نصائح أخرى

شيء واحد يجب أخذه في الاعتبار عند استخدام SVN كنسخة احتياطية للملفات الثنائية هو أن SVN سيضاعف حجم ملفاتك، لأنه يحتفظ بنسخة محلية من كل ملف (في ملف .svn/text-base).

وبصرف النظر عن ذلك فإنني أستخدم SVN للنسخ الاحتياطي أيضًا.ما عليك سوى إضافة جميع الملفات ثم الالتزام عبر البرنامج النصي.

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

ومع ذلك، في مكتبي، لدينا فريق صغير مكون من 6 أشخاص يعملون مع الملفات المشتركة (على سبيل المثال:أدلة السياسات والإجراءات، نماذج التسجيل، الخ).في كثير من الأحيان، سيعمل أعضاء الفريق عن بعد (من المنزل أو أثناء السفر)، وغالبًا ما يكونون غير متصلين بالإنترنت.بدلاً من استخدام إعداد مجلد مشترك مركزي، نستخدم SVN لمنح كل شخص نسخة عمل كاملة من المجلد الذي يمكنه العمل عليه والرجوع إليه ومزامنته كلما أمكن ذلك.وهذا يضرب عصفورين بحجر واحد:يمكن للجميع الوصول إلى الملفات وتحريرها حتى أثناء عدم الاتصال بالإنترنت، بالإضافة إلى أن ذلك يمنحنا تكرارًا كبيرًا في النسخ الاحتياطية لدينا.إذا كان جهاز الكمبيوتر المحمول الخاص بي يشتعل, ، ليس هناك أي متاعب لأنه يمكنني فقط التحقق من نسخة أخرى (من الواضح على جهاز كمبيوتر آخر).إذا اشتعلت النيران في الخادم، فسنحصل على نسخ احتياطية من المستودع لاستعادتها.إذا اشتعلت النيران في الخادم وجميع نسخ الريبو الاحتياطية، فكل ما فقدته هو الإصدارات القديمة من الملفات.الطريقة الوحيدة التي ستفقد بها أي بيانات حالية هي إذا اشتعلت النيران في الخادم والنسخ الاحتياطية الخاصة بمستودعات الريبو وكل جهاز كمبيوتر يحتوي على نقطة دفع بشكل غامض.

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

الشيء الوحيد الذي قد يزعجني كثيرًا هو مجلدات ".svn"، التي يضعها svn في كل مجلد يتتبعه.

إنها تبدو مزعجة، عندما تنسخ مجلدًا، يجب أن تتذكر عدم نسخها (وإلا قد يكون وضع الحماية الخاص بك مزعجًا) ويكون من الصعب جدًا التعامل مع مجموعة من المجلدات، نظرًا لأنه غالبًا ما يكون هناك الكثير من الزيارات في ملف . مجلدات الموارد svn.

تعجبني فكرة استخدام التحكم بالمصدر للتحكم في بيئتك.لكنني شخصياً لن أختار svn لهذه الوظيفة.سأختار شيئًا مثل git.لكن ربما هذا أنا فقط..

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

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

باختصار، لدي مشاعر مختلطة حول استخدام SVN للنسخ الاحتياطي للأغراض العامة.ولكن إذا قمت بذلك، أوصي لا لتخزين المكتبات مثل الأفلام والصور والموسيقى، لأنها تميل إلى أن تكون كبيرة (تعاني بشكل كبير من استخدام المساحة المضاعفة) وغير قابلة للتغيير - لا تحتاج إلى نظام إصدار لذلك، لأنه في المناسبات النادرة عندما تقوم بتغيير الملف، فأنت لا تحتاج عمومًا إلى الإصدارات القديمة (و SVN ليس جيدًا في إنشاء/تخزين اختلافات الملفات الثنائية، فهو يحفظ الإصدار الجديد بالكامل من الملف).لذا، ما لم يكن من الممكن تكييف SVN (هدف مشروعي منذ فترة طويلة) لهذه الحالات، أقترح استخدام طريقة بديلة لعمل نسخة احتياطية من هذه الأنواع من الملفات.

هل يمكن أن تنظر أيضا bup - نظام نسخ احتياطي للملفات عالي الكفاءة يعتمد على تنسيق git packfile. إنه يعتمد على git's في طريقة تخزين البيانات، وهي فعالة جدًا لتخزين الملفات واختلافاتها.

لقد استخدمت CVS كبديل للشبح لذا لا أرى سببًا لذلك.

إنه لطيف حيث يمكنك وضع علامة على خط الأساس:يمكنك تغيير إدارة الأجهزة.

من الواضح أن هذا يعمل بشكل أفضل على نظام التشغيل يونكس مقارنة بنظام التشغيل ويندوز.

الشيء الذي من شأنه أن يبعدني عن هذه الفكرة، هو أنه للاستخدام العام، سيتم نسخ أي بيانات ثنائية في أي وقت تتغير فيه، في حين يمكن تحديث محتوى النص الذي تعتمد عليه أنظمة SCM بسهولة في شكل اختلافات.

لذلك يمكنك القيام بذلك، فقط كن مدركًا أنك قد لا ترغب في استخدامه لإدارة أشياء مثل مستودعات الصور إذا كنت تقوم بالكثير من التحرير.

إن الشيء الجميل في حلول النسخ الاحتياطي للأغراض العامة (على سبيل المثال، Time Machine) هو أنه يمكنها إجراء تغييرات ثنائية متعددة بعد فترة من الوقت لتوفير المساحة.لست متأكدًا من مدى سهولة القيام بذلك في SVN أو git أو Mercurial.

يمكن أن ينجح استخدام SVN للنسخ الاحتياطية.ومع ذلك، مع مرور الوقت قد يكون من الصعب حذف المراجعات القديمة التي لا حاجة إليها.لنفترض أنك تريد الاحتفاظ بنسخ احتياطية لمدة 30 أو 60 يومًا فقط.لا يوفر SVN طريقة سهلة لإزالة أي سجل أقدم من X أيام.إذا لم يكن لديك طريقة لمسح السجل القديم، فسوف تقوم في النهاية بتشغيل محرك النسخ الاحتياطي الخاص بك بعد نفاد المساحة.

وهنا اقتباس من كتاب SVN على svndumpfilter يأمر:

نظرًا لأن Subversion يخزن كل شيء في نظام قاعدة بيانات غير شفاف ، فإن محاولة التعديلات اليدوية غير حكيمة ، إن لم تكن صعبة للغاية.وبمجرد تخزين البيانات في مستودعك ، لا يوفر Subversion بشكل عام طريقة سهلة لإزالة تلك البيانات.[13]

[13] وهذه بالمناسبة ميزة وليست خطأ.

وجدت انسجام ليكون خيارًا أفضل من svn لبديل rsync.

هذا البيان الصادر عن JoaoPSF غير صحيح:

(و SVN ليس جيدًا في إنشاء/تخزين اختلافات الملفات الثنائية، فهو يحفظ الإصدار الجديد بالكامل من الملف)

انظر هذا الاقتباس من كيف يتعامل Subversion مع الملفات الثنائية:

لاحظ أن ما إذا كان الملف ثنائيًا أم لا لا يؤثر على مقدار مساحة المستودع المستخدمة لتخزين التغييرات على هذا الملف، ولا يؤثر على مقدار حركة المرور بين العميل والخادم.لأغراض التخزين والنقل، يستخدم Subversion أسلوبًا مختلفًا يعمل بشكل جيد على الملفات الثنائية والنصية؛هذا لا علاقة له على الإطلاق بأسلوب diffing الذي يستخدمه أمر svn diff.

يمكن أن يكون النسخ الاحتياطي لـ /etc باستخدام التحكم في التعليمات البرمجية المصدر بمثابة مساعدة كبيرة عندما تريد التراجع عن تغيير أدخل على نظامك، أو تجربة التغييرات، أو نقل التغييرات من خادم إلى آخر.

لكن يمكن أن تعترض أدلة Subversion المتعددة .svn الطريق لذلك، ليس فقط عند البحث ولكن في بعض الحالات، مثل مجلدات *.d، قد تفسر الأنظمة سيئة التصميم مجلدات .svn نفسها على أنها تحتوي على بيانات التكوين.

أفضل الآن استخدام Mercurial للنسخ الاحتياطي /etc لأنه يضع مجلد .hg واحد ضمن /etc.للحصول على نسخة احتياطية حقيقية وليس فقط التحكم في الإصدار، تحتاج إلى نسخ مجلد .hg هذا في مكان آخر.

لاستخدام SVN كنسخة احتياطية على Linux، قم بما يلي:

  1. إنشاء الريبو فارغة.
  2. قم بتسجيل الدخول إلى المستودع الفارغ في شجرة المجلدات التي تريد عمل نسخة احتياطية لها.
  3. استخدم مقتطف التعليمات البرمجية التالي (svnauto).يجب عليك استبدال "myuser" و"mypassword" ببيانات اعتماد صالحة لمستودعك:
    #!/bin/sh
    svn status --depth=infinity --username=myuser --password=mypassword > /tmp/svnauto_tmp.list
    cat /tmp/svnauto_tmp.list | grep '^?' | sed -e 's/^?       /svn add --depth=infinity --force --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    cat /tmp/svnauto_tmp.list | grep '^!' | sed -e 's/^!       /svn delete --username=myuser --password=mypassword "/g' -e 's/$/@"/g' | sh
    rm -f /tmp/svnauto_tmp.list
    svn update . --username=myuser --password=mypassword
    svn commit --username=myuser --password=mypassword --message "Automatic backup"

سيقوم البرنامج النصي أعلاه بإضافة/إزالة وتحديث أي ملفات وأدلة فرعية داخل الدليل الحالي.لاستخدامها ببساطة cd إلى المجلد الذي تريد النسخ الاحتياطي (والذي يجب أن يكون نسخة عمل بالطبع)، وتشغيله svnauto.لاحظ أنك بحاجة إلى تثبيت grep وsed على نظامك، وسيقوم بإنشاء ملف مؤقت في /tmp.يمكن استخدامه من مهمة cron للالتزام الليلي، باستخدام سكربت cron التالي:

#!/bin/sh
export LANG=en_US.UTF-8 && cd /my/directory && echo Starting backup $(date) > /root/backup_log.txt && /root/svnauto >> /root/backup_log.txt 2>&1 && echo Finished backup. >> /root/backup_log.txt && cat /root/backup_log.txt

يفترض هذا البرنامج النصي cron ذلك /my/directory هو المجلد الذي تريد نسخه احتياطيًا (استبدله حسب الحاجة).ويفترض أيضًا أنك وضعت svnauto البرنامج النصي في /root.يقوم بإنشاء سجل ويعرضه في النهاية.مزيد من التفاصيل:الأول export مطلوب لـ svn للعثور على اللغة المناسبة.قد يتعين عليك ضبط هذا السطر ليناسب لغتك المحلية حتى يعمل.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top