سؤال GIT كأداة النسخ الاحتياطي


على الخادم ، قم بتثبيت git

cd /
git init
git add .
git commit -a -m "Yes, this is server"

و من ثم حصل /.git/ للإشارة إلى محرك أقراص الشبكة (سان ، NFS ، سامبا أيا كان) أو قرص آخر. استخدام وظيفة كرون كل ساعة / يوم وما إلى ذلك لتحديث التغييرات. سيحتوي دليل .git على نسخة مُعدلة من جميع ملفات الخادم (باستثناء الملفات غير المعقدة / غير المعقدة مثل / proc ، / dev إلخ.)

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


88
2017-12-15 12:10


الأصل


لا sparkleshare باستخدام فكرة مماثلة؟ - B14D3
@ B14D3 أعتقد أن sparkleshare أكثر من نوع من نوع dropbox thingy ، لكنني سوف ننظر في ذلك - Smudge
أنت على حق ، ولكن باستخدام بوابة لجعل نوع باك بوك شيء (نسخ إلى العديد من أجهزة الكمبيوتر والتحكم في إصدارات الملفات) ؛) - B14D3
تكمن المشكلة الكبرى في ذلك في عدم وجود تحكم مركزي - يجب أن يكون لديك وصول مباشر (ssh) إلى الماكينة لإجراء أي شكل من أشكال الصيانة أو التحقق من النسخ الاحتياطي. دائمًا ما أجد تثبيتًا لأحد التطبيقات على المربعات ليتم الاحتفاظ بنسخة احتياطية منه ، ومن ثم ، فإن إدارته من موقع مركزي يعد فوزًا أكبر بكثير. - hafichuk
hafichuk مع أدوات مثل Puppet / الشيف انها ليست قضية كبيرة ، ولكن أرى وجهة نظرك. - Smudge


الأجوبة:


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

أكبر مشكلة مع استخدام git للنسخ الاحتياطي هو أنه لا يحافظ على معظم بيانات التعريف نظام الملفات. على وجه التحديد، git لا يسجل:

  • مجموعات الملفات
  • أصحاب الملفات
  • أذونات الملفات (بخلاف "هذا قابل للتنفيذ")
  • السمات الموسعة

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

بحث جوجل ل git بيانات التعريف الاحتياطية ينتج عددًا من النتائج التي يبدو أنها تستحق القراءة (بما في ذلك بعض الأدوات التي تحاول بالفعل التعويض عن المشكلات التي أثرتها هنا).

etckeeper تم تطويرها من أجل النسخ الاحتياطي /etc ويحل العديد من هذه المشاكل.


78
2017-12-15 17:25



+1 للإشارة إلى ACLs / الأذونات - Larry Silverman
لا يقوم Git أيضًا بتخزين الأدلة الفارغة. - Flimm
وتمتص أيضا لتتبع ملف تتحرك / إعادة تسمية ، من خلال التاريخ. - cregox
نظرًا لأن git لا يتعامل مع الملفات الثنائية بشكل جيد جدًا ، فقد تحتاج أيضًا إلى النظر فيها مرفق بوابةمما يساعد على القيام بذلك بشكل أفضل. إنه لا يغير فكرة ما هو git إلى حد ما ، ومع ذلك. - Wouter Verhelst
رأيي هو أنه يمكنك استخدام بوابة لبيانات النسخ الاحتياطي ولكن ليس خوادم بأكملها - EKanadily


أنا لم أستخدمها ، لكن قد تنظر إليها BUP وهي أداة النسخ الاحتياطي على أساس بوابة.


20
2017-12-15 13:27



لم يسبق لي أن رأيت بوبي من قبل ، تبدو مثيرة للاهتمام - Smudge
لقد بدأت باستخدام bup مؤخرًا ، قبل بضعة أيام من تحطّم محرك الأقراص الثابتة ؛) تمت إعادة التشغيل بشكل جيد ، لذا أوصيت بذلك! - André Paramés
@ AndréParamés لذلك ما تقوله هو فقط بعد تثبيت bup الخاص بك تحطمت القرص الصلب ... mmmmhh ... :) مجرد مزاح - hofnarwillie


يمكن أن يكون حل النسخ الاحتياطي صالح ، يستند etckeeper على هذه الفكرة. لكن ابق عينك على .git أذونات الدليل خلاف ذلك دفع /etc/shadow يمكن قراءتها في .git دليل.


12
2017-12-15 12:18





بينما من الناحية الفنية يمكنك القيام بذلك ، أود أن أضع حالتين ضده:

1 ، أنت تستخدم نظام التحكم في إصدار المصدر للبيانات الثنائية. لذلك فأنت تستخدمه لشيء لم يتم تصميمه له.

2 ، أنا قلق بشأن عملية التنمية الخاصة بك إذا لم يكن لديك عملية (وثائق أو مؤتمتة) لبناء جهاز جديد. ماذا لو أصبت بضربة حافلة ، من يعرف ماذا يفعل وما المهم؟

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


11
2017-12-15 13:45



تأتي صناديق التطوير من ملفات KickStart ، وفي الواقع ، يستمر متوسط ​​مربع البيانات لمدة شهرين أو ثلاثة أشهر قبل إعادة الإنشاء. لكن الناس يغيرون التوصيف ويفعلون الأشياء ، ونعيد بناء الصناديق ويقول الناس "مهلا ، أنا أعلم أنني لم أضعها تحت سيطرة المصدر لكن كان لدي بعض القرف على ذلك الصندوق" ، وأنا أضحك عليهم لأنهم أغبياء. في كل مكان ، أوقات جيدة. البيانات الثنائية ستكون كلبة ، إنها شيء أغفلت تماماً أثناء الاستحمام. - Smudge
أنا أحيي موقفك تجاه أولئك الذين يفشلون في اتباع المبادئ الأساسية. أنا شخصياً لدي وضع مماثل لك ، ولكن لدي مستودع git الذي يربط في جميع ملفات التهيئة التي قد تكون مهمة بدلاً من التقاط كل شيء. بالإضافة إلى مستند txt مع خطوات الإعداد. - Phil Hannent
أعتقد أن بوابة تعمل بشكل جيد للملفات الثنائية ، فجزء جوجل جوجل أندرو في الجزء الأكبر من الريبو هي مستودعات git للملفات التنفيذية سابقة الإعداد. - user377178


أستخدم git كنسخة احتياطية لنظام Windows الخاص بي ، وقد كان مفيدًا بشكل لا يصدق. في الجزء السفلي من المشاركة ، أقوم بعرض البرامج النصية التي استخدمها لتكوين نظام Windows. استخدام git كنسخة احتياطية لأي نظام يوفر مزايا كبيرة 2:

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

الخلاصة: تمنحك نسخة احتياطية من git كميات هائلة من الطاقة للتحكم في كيفية حدوث النسخ الاحتياطية.

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

ستحتاج أولاً إلى تثبيت cygwin (مع rsync) ، وكذلك تثبيت git لـ Windows: http://git-scm.com/download/win

بعد ذلك ، قم بإنشاء git المحلي (فقط تشغيل مرة واحدة):

الحرف الأول-repo.bat:

@echo off
REM SCRIPT PURPOSE: CREATE YOUR LOCAL GIT-REPO (RUN ONLY ONCE)

REM Set where the git repository will be stored
SET GBKUP_LOCAL_MIRROR_HOME=E:\backup\mirror


REM Create the backup git repo. 
SET GIT_PARAMS=--git-dir=%GBKUP_LOCAL_MIRROR_HOME%\.git --work-tree=%GBKUP_LOCAL_MIRROR_HOME% 
mkdir %GBKUP_LOCAL_MIRROR_HOME%
git %GIT_PARAMS% init
git %GIT_PARAMS% config core.autocrlf false
git %GIT_PARAMS% config core.ignorecase false 
git %GIT_PARAMS% config core.fileMode false
git %GIT_PARAMS% config user.email backup@yourComputerName
git %GIT_PARAMS% config user.name backup

REM add a remote to the git repo.  Make sure you have set myRemoteServer in ~/.ssh/config   
REM The path on the remote server will vary.  Our remote server is a Windows machine running cygwin+ssh.  
REM For better security, you could install gitolite on the remote server, and forbid any non-fast-forward merges, and thus stop a malicious user from overwriting your backups.
git %GIT_PARAMS% remote add origin myRemoteServer:/cygdrive/c/backup/yourComputerName.git

REM treat all files as binary; so you don't have to worry about autocrlf changing your line endings
SET ATTRIBUTES_FILE=%GBKUP_LOCAL_MIRROR_HOME%\.git\info\attributes
echo.>> %ATTRIBUTES_FILE% 
echo *.gbkuptest text>> %ATTRIBUTES_FILE% 
echo * binary>> %ATTRIBUTES_FILE% 
REM compression is often a waste of time with binary files
echo * -delta>> %ATTRIBUTES_FILE% 
REM You may need to get rid of windows new lines. We use cygwin's tool
C:\cygwin64\bin\dos2unix %ATTRIBUTES_FILE%

بعد ذلك ، لدينا غلاف البرنامج النصي الاحتياطية ، والذي سيتم استدعاؤه بشكل منتظم بواسطة Windows Scheduler:

gbackup.vbs:

' A simple vbs wrapper to run your bat file in the background
Set oShell = CreateObject ("Wscript.Shell") 
Dim strArgs
strArgs = "cmd /c C:\opt\gbackup\gbackup.bat"
oShell.Run strArgs, 0, false

بعد ذلك ، لدينا البرنامج النصي النسخ الاحتياطي نفسه الذي يستدعي wrapper:

gbackup.bat:

    @echo off

REM Set where the git repository will be stored
SET GBKUP_LOCAL_MIRROR_HOME=E:\backup\mirror
REM the user which runs the scheduler
SET GBKUP_RUN_AS_USER=yourWindowsUserName
REM exclude file
SET GBKUP_EXCLUDE_FILE=/cygdrive/c/opt/gbackup/exclude-from.txt

SET GBKUP_TMP_GIT_DIR_NAME=git-renamed
for /f "delims=" %%i in ('C:\cygwin64\bin\cygpath %GBKUP_LOCAL_MIRROR_HOME%') do set GBKUP_LOCAL_MIRROR_CYGWIN=%%i

REM rename any .git directories as they were (see below command)
for /r %GBKUP_LOCAL_MIRROR_HOME% %%i in (%GBKUP_TMP_GIT_DIR_NAME%) do ren "%%i" ".git" 2> nul

SET RSYNC_CMD_BASE=C:\cygwin64\bin\rsync -ahv --progress --delete --exclude-from %GBKUP_EXCLUDE_FILE%

REM rsync all needed directories to local mirror
%RSYNC_CMD_BASE% /cygdrive/c/dev %GBKUP_LOCAL_MIRROR_CYGWIN%
%RSYNC_CMD_BASE% /cygdrive/c/Users/asmith %GBKUP_LOCAL_MIRROR_CYGWIN%
%RSYNC_CMD_BASE% /cygdrive/c/Users/bsmith %GBKUP_LOCAL_MIRROR_CYGWIN%

cacls %GBKUP_LOCAL_MIRROR_HOME% /t /e /p  %GBKUP_RUN_AS_USER%:f

REM rename any .git directories as git will ignore the entire directory, except the main one
for /r %GBKUP_LOCAL_MIRROR_HOME% %%i in (.git) do ren "%%i" "%GBKUP_TMP_GIT_DIR_NAME%" 2> nul
ren %GBKUP_LOCAL_MIRROR_HOME%\%GBKUP_TMP_GIT_DIR_NAME% .git

REM finally commit to git
SET GIT_PARAMS=--git-dir=%GBKUP_LOCAL_MIRROR_HOME%\.git --work-tree=%GBKUP_LOCAL_MIRROR_HOME% 
SET BKUP_LOG_FILE=%TMP%\git-backup.log
SET TO_LOG=1^>^> %BKUP_LOG_FILE% 2^>^&1
echo ===========================BACKUP START=========================== %TO_LOG%
For /f "tokens=2-4 delims=/ " %%a in ('date /t') do (set mydate=%%c-%%a-%%b)
For /f "tokens=1-2 delims=/:" %%a in ('time /t') do (set mytime=%%a%%b)
echo %mydate%_%mytime% %TO_LOG%
echo updating git index, committing, and then pushing to remote %TO_LOG%
REM Caution: The --ignore-errors directive tells git to continue even if it can't access a file.
git %GIT_PARAMS% add -Av --ignore-errors %TO_LOG%
git %GIT_PARAMS% commit -m "backup" %TO_LOG%
git %GIT_PARAMS% push -vv --progress origin master %TO_LOG%
echo ===========================BACKUP END=========================== %TO_LOG%

لدينا ملف exclude-from.txt ، حيث نضع جميع الملفات في التجاهل:

استبعاد-from.txt:

target/
logs/
AppData/
Downloads/
trash/
temp/
.idea/
.m2/
.IntelliJIdea14/
OLD/
Searches/
Videos/
NTUSER.DAT*
ntuser.dat*

سوف تحتاج إلى الذهاب إلى أي repos عن بعد والقيام 'git init --bare' عليها. يمكنك اختبار البرنامج النصي عن طريق تنفيذ البرنامج النصي النسخ الاحتياطي. بافتراض عمل كل شيء ، انتقل إلى Windows Scheduler وقم بتوجيه نسخة احتياطية لكل ساعة باتجاه ملف vbs. بعد ذلك ، سيكون لديك سجل git للكمبيوتر الخاص بك لكل ساعة. انها مريحة للغاية - كل حذف بطريق الخطأ جزء من النص وتفوت عليه؟ فقط تحقق من مستودع git الخاص بك.


6
2018-03-21 17:10



مجرد فضول - هل سيعمل أيضًا مع محركات أقراص الشبكة البطيئة أو غير القياسية ، مثل تلك التي يحاكيها NetDrive أو Progressrive؟ أجد أن معظم برامج النسخ الاحتياطي فشل مع محركات أقراص الشبكة هذه. كما أن الأمور تصبح بطيئة بشكل مؤلم وتميل إلى انقضاء الوقت ، إذا أردت سرد جميع الملفات في النسخة الاحتياطية واستخراج الملفات الفردية. هل قادرة على حل هذه القضايا؟ - JustAMartin
JustAMartin لم أختبره أبدًا على محركات أقراص الشبكة ، لذلك لا أستطيع أن أقول. بمجرد الحصول على الملفات في git repo ، بوابة فعالة للغاية. - user64141


حسناً ، إنها ليست فكرة سيئة ، لكن أعتقد أن هناك رايات حمراء يجب رفعها:

  • إذا فشلت القرص الصلب ، فسوف تفقد كل شيء إذا كنت لا تدفع التزامك إلى خادم / محرك آخر. (حدث إذا كنت تخطط لذلك ، أفضل أن أذكر.)

... لكن لا يزال ، يمكن أن يكون نسخة احتياطية جيدة للأشياء ذات الصلة بالفساد. أو كما قلت ، إذا كان .git / المجلد في مكان آخر.

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

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


4
2017-12-15 13:40



ربما نقوم بتركيب الدليل .git على خادم بعيد ، على الرغم من أن clasic rm -Rf / من شأنه أن يسبب لنا بعض القضايا. يحتفظ نظام النسخ الاحتياطي الحالي لدينا بالأشياء لمدة عامين أو 50 إصدارًا (أيهما يأتي لاحقًا) ، لذا فإن النسخ الاحتياطي لدينا يتزايد باستمرار على أي حال. لكني أحب فكرة إضافة علامات ، يمكن أن نحصل على علامات "يومية" ، "أسبوعية" إلخ - Smudge
+1 لمتطلبات المساحة المتزايدة - hafichuk
sam git ينمو. يمكنك تقليم التاريخ الأقدم من N سنوات. أفترض أن النظام الحالي الخاص بك يفعل. - rds
فيما يتعلق بالزيادة في الحجم ، يرجى "git gc" بانتظام أو قبل الضغط على خادم آخر (مركزي). بدون هذا قد تنمو الريبو جيت (أكبر) أكبر مما ينبغي. كان لي مرة واحدة على 346 ميغابايت git repo التي يمكن أن تنكمش إلى 16 ميغابايت. - Hendy Irawan


لم أجربه مع نظام كامل لكنني أستخدمه لنسخ MySQL الخاصة بي (مع خيار insert -skip-extended-insert) وقد نجحت بالفعل بالنسبة لي.

أنت ستواجه مشكلة في ملفات البيانات الثنائية (يمكن أن تتغير محتوياتها بالكامل) وقد تواجه مشاكل مع .git مجلد الحصول على كبيرة حقا. أوصي بإعداد .gitignore ملف والاحتفاظ بنسخ احتياطية فقط من الملفات النصية التي تعرف حقًا أنك تحتاج إليها.


3
2017-12-15 13:23



أنا أستخدمها لنسخ MySQL أيضًا ، مع --extended-insert = false. تأكد من "git gc" بانتظام أو مباشرة بعد الالتزام. - Hendy Irawan
نرى هل النسخ الاحتياطي لقاعدة بيانات MySQL في Git فكرة جيدة؟ - Michael Hampton♦


أنا وضعت مرة واحدة على حل النسخ الاحتياطي على أساس التخريب. في حين أنها تعمل بشكل جيد (ويجب أن تعمل git بشكل أفضل) ، أعتقد أن هناك حلول أفضل هنا.

أنا أعتبر rsnapshot ليكون واحدا من أفضل - إن لم يكن ال أفضل. مع استخدام جيد للارتباطات الثابتة ، لديّ 300 ملقم ملفات (مع نصف مليون ملف) مع النسخ الاحتياطي اليومي والأسبوعي والمالي يعود إلى سنة واحدة. إجمالي مساحة القرص المستخدمة هي نسخة كاملة واحدة فقط + الجزء التزايدي لكل نسخة احتياطية ، ولكن بفضل الروابط الثابتة لدي اكتمال بنية الدليل "مباشرة" في كل من النسخ الاحتياطية. في كلمة أخرى ، يمكن الوصول إلى الملفات مباشرة ليس فقط ضمن اليوم 0 (آخر نسخة احتياطية) ، ولكن حتى في daily.1 (yestarday) أو أسبوعيا .2 (قبل أسبوعين) ، وهكذا.

إعادة مشاركة مجلد النسخ الاحتياطي مع Samba ، يستطيع المستخدمون سحب الملف من النسخ الاحتياطية ببساطة عن طريق توجيه جهاز الكمبيوتر الخاص بهم إلى خادم النسخ الاحتياطي.

خيار آخر جيد جدا هو rdiff النسخ الاحتياطي، ولكن كما أحب أن يكون الوصول إلى الملفات دائما ببساطة عن طريق عنوان Explorer إلى \\ servername ، كان rsnapshot حلا أفضل بالنسبة لي.


3
2018-03-21 20:01



الإصدار الأخير من النسخة الاحتياطية من rdiff هو من عام 2009. هل هو مصمم بشكل جيد للغاية ولا يتطلب أي تحديث على الإطلاق أم أنه مجرد مشروع مهجور؟ - Mateusz Konieczny
لا أعلم ما إذا كان الأمر قد تم إجراؤه ، ولكن "تم" في الأساس. - shodanshok
من النظر في savannah.nongnu.org/bugs/... يبدو أن هناك بعض النشاط في وقت متأخر من عام 2015 ولكن يتم تجاهل العديد من تقارير الأخطاء. أعتقد أنني سأصنفها على أنها مهجورة. - Mateusz Konieczny


كان لدي نفس الفكرة للنسخ الاحتياطي باستخدام git ، لأنه يسمح بالنسخ الاحتياطية. ثم رأيت rdiff النسخ الاحتياطي، والتي توفر تلك الوظيفة (وأكثر من ذلك بكثير). لديه واجهة مستخدم جميلة (انظر إلى خيارات CLI). أنا سعيد جدا بذلك. ال --remove-older-than 2W رائع. يسمح لك بحذف الإصدارات الأقدم من أسبوعين فقط. rdiff-backup يخزن فقط من الملفات.


2
2017-12-15 18:07