مزامنة الدلائل الرئيسية من عملاء متعددة إلى خادم

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

  •  23-08-2019
  •  | 
  •  

سؤال

أنا أستخدم أجهزة كمبيوتر محمول Linux متعددة وتريدها "مشاركة" الأدلة المنزلية.

NFS لسوء الحظ ليست خيارا. لذلك كنت أحاول إنشاء برنامج نصي باش باستخدام rsync ولكن لا يمكنني معرفة كيفية القيام بذلك.

هذا هو مثالي الآن

`#`!/bin/bash

sync() {
  rsync -azvR --exclude-from=/home/ME/.rsync_excludes --delete -e 'ssh -ax' $1 $2
}

sync /home/ME server.domain:/home/ME
`#`sync server.domain:/home/ME /home/ME

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

ماذا لو قمت بحذف ملف في عميل واحد؟ يتم حذف هذا الملف حذفه على العميل الآخر (بعد المزامنة من السبب)؟

هل يمكنني استخدام RSYNC لهذا الغرض؟ يجب أن أبحث عن برنامج آخر؟ نأمل أن ليس ...

تحرير: نظرا لأن هذا الحل لا ينبغي أن يكون فقط بالنسبة لي، سأكون ممتنا لو كان الحل هو نوع من تلقائيا.

Edit2: ربما يجب أن يكون هناك حل بما في ذلك ريبو بطريقة أو بأخرى. التخريب، جيت، mercurial أو سوميتينغ آخر.

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

المحلول

rsync من الجيد الاحتفاظ بموقع واحد في المزامنة مع سيد. أو بعبارات أخرى، مرآة A إلى B. هذا ليس ما تفعله، رغم ذلك. يجب عليك ذلك rsync A إلى B و B إلى A. الذي يجلب مجموعة جديدة كاملة من المشاكل. إذا اختفى ملف، هل تحتاج إلى حذف في الجانب الآخر أو rsync مرة أخرى؟ ربما تم تعديله على الجانب الآخر؛ لا يمكنك التحقق.

على أي حال؛ الحل لهذه المشكلة يأتي في شكل انسجام. وبعد هذه أداة (تعمل على نظام Linux، OS X، Windows، BSD، ...) (يحتوي على أدوات CLI، أدوات GUI، ويمكن جدولة بشكل جيد cron) الذي سيبقي الدليل المنزلي الخاص بك أو أي دليل آخر بشكل جيد في المزامنة، ويصبح قادرا على التعامل مع أي نوع من الصراع أو المشكلة تقريبا. اعتقد هؤلاء الناس كل شيء أفضل مما نستطيع هنا.

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

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

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

لتلخيص، أنا أوصي أنك تتحد انسجام و rdiff-backup. للحصول على حل شامل لإبقاء بياناتك آمنة ومزامنة بشكل موثوق.

نصائح أخرى

لماذا لا تفعل هذا باستخدام التخريب ب تفاصيل المقالة المرتبطة كيف يقوم المؤلف بمزامنة وتتاجر التاريخ باستخدام عنصر تحكم المصدر (ليس لديك لاستخدام التخريب، من الواضح - هناك بدائل)

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

function syncDown() {
    f=${1/\\/$/}/;
    rsync -acuvz --exclude 'CVS' --exclude '*.class' --exclude '.classpath' server:projects/$f $f;
    }

function syncUp() {
    f=${1/\\/$/}/;
    rsync -acuvz --exclude 'CVS' --exclude '*.class' $f server:projects/$f;
    }

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

يبدو أنك ربما تعرف هذا بالفعل، ولكن، فقط للتأكيد على النقطة بالنسبة لأولئك الذين قد يرون هذا السؤال في المستقبل:

rsync فقط هو المزامنة في اتجاه واحد. إذا كنت تريد مزامنة ثنائية الاتجاه، فأنت بحاجة إلى استخدام شيء آخر. فيcvs/svn/git/إلخ. سيكون من المناسب "شيء آخر"، ولكن قد لا يكون نظام التحكم في المراجعة هو الاختيار الأمثل إذا لم تكن بحاجة إلى سجل تحديث.)

من الناحية العملية، هذا يعني إذا كنت rsyncجي من A إلى B، ثم ستجعل كل مزامنة دليلا على B تماما مثل الدليل على أ - سيتم فقد أي تغييرات مصنوعة في B منذ آخر المزامنة الأخيرة (باستثناء المحاول ومع التحذير rsync سوف حذف الملفات فقط إذا --delete محدد). هذا النوع من الترتيب مع نسخة رئيسية موثوقة يتم دفعها بعد ذلك إلى مواقع أخرى مناسبة في كثير من الحالات، ولكن أي نوع من العمل التعاوني ليس من بينها.

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