שאלה GIT ככלי גיבוי


בשרת, התקן את git

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

לאחר מכן קבל /.git/ כדי להצביע על כונן רשת (SAN, NFS, Samba מה) או דיסק אחר. השתמש עבודה cron כל שעה / יום וכו 'כדי לעדכן את השינויים. הספרייה .git תכיל עותק של כל קבצי השרת (למעט אלה חסרי תועלת / מסובכים כמו / proc, / dev וכו ').

עבור שרת פיתוח לא חשוב שבו אני לא רוצה את הטרחה / עלות של הגדרת אותו על מערכת גיבוי נאותה, שבו גיבויים יהיה רק ​​לנוחות (א E. אנחנו לא צורך כדי גיבוי שרת זה אבל זה יחסוך קצת זמן אם הדברים השתבשו), זה יכול להיות פתרון גיבוי חוקי או שזה פשוט ליפול בערימה גדולה של חרא?


88
2017-12-15 12:10




לא sparkleshare באמצעות רעיון דומה ?? - B14D3
@ B14D3 אני חושב sparkleshare הוא יותר סוג של dropbox סוג dropbox, אבל אני אסתכל על זה - Smudge
אתה צודק, אבל זה באמצעות git לעשות איזשהו דבר buckup (העתקה לגירסאות של כמה PC ושליטה של ​​קבצים);) - B14D3
הבעיה הגדולה עם זה היא כי אין שליטה מרכזית - אתה צריך גישה ישירה (SS) גישה למכונה כדי preform כל צורה של תחזוקה או אימות הגיבוי. אני תמיד למצוא התקנת יישום על תיבות להיות מגובים ואז ניהול אותם ממיקום מרכזי הוא ניצחון הרבה יותר גדול. - hafichuk
@ hafichuk עם כלים כמו בובה / שף זה לא כזה בעיה גדולה, אבל אני רואה את הנקודה. - Smudge


תשובות:


אתה לא טיפש. שימוש git כמו מנגנון גיבוי יכול להיות אטרקטיבי, ולמרות מה אנשים אחרים אמרו, git עובד בסדר גמור עם קבצים בינאריים. לקרוא דף זה מתוך ספר גיט לקבלת מידע נוסף בנושא זה. בעיקרון, מאז git הוא לא משתמש במנגנון אחסון דלתא, זה לא ממש אכפת מה הקבצים שלך נראים כמו (אבל השירות של git diff הוא נמוך למדי עבור קבצים בינאריים עם תצורת המניות).

הבעיה הגדולה ביותר בשימוש git עבור גיבוי זה לא לשמור על רוב המטא נתונים של מערכת הקבצים. במיוחד, git אינו רושם:

  • קבוצות קבצים
  • בעלי קבצים
  • הרשאות קבצים (מלבד "הפעלה זו")
  • תכונות מורחבות

אתה יכול לפתור את זה על ידי כתיבת כלי להקליט מידע זה במפורש לתוך המאגר שלך, אבל זה יכול להיות מסובך כדי לקבל את זה נכון.

חיפוש של Google git metadata גיבוי מניב מספר תוצאות שנראה כי כדאי לקרוא (כולל כמה כלים שכבר מנסים לפצות על הנושאים שהעליתי כאן).

etckeeper פותחה עבור גיבוי /etc ופותר רבות של בעיות אלה.


78
2017-12-15 17:25



+1 להזכרת רשימות בקרת גישה / הרשאות - Larry Silverman
Git גם לא מאחסן ספריות ריקות. - Flimm
וזה גם מבאס למעקב אחר הקובץ / שינוי שם, דרך ההיסטוריה. - cregox
מאז git אינו מתמודד עם קבצים בינאריים טוב מאוד, ייתכן גם רוצה להסתכל Git לספח, אשר מסייע לעשות את זה טוב יותר. זה משנה את הרעיון של מה git הוא קצת, עם זאת. - Wouter Verhelst
הדעה שלי היא שאתה יכול להשתמש git לגיבוי נתונים אבל לא שרתים שלמים - EKanadily


לא השתמשתי בו, אבל אפשר להסתכל bup שהוא כלי גיבוי מבוסס על git.


20
2017-12-15 13:27



מעולם לא ראיתי bup לפני, נראה מעניין - Smudge
התחלתי להשתמש bup לאחרונה, רק כמה ימים לפני הכונן הקשיח שלי התרסקו;) השחזור הלך בסדר, מומלץ! - André Paramés
@ AndréParamés אז מה שאתה אומר הוא רק לאחר התקנת bup הכונן הקשיח שלך התרסק ... mmmmhh ... :) פשוט צוחק - hofnarwillie


זה יכול להיות פתרון גיבוי חוקי, etckeeper מבוססת על רעיון זה. אבל לפקוח עין על .git הרשאות ספרייה אחרת דוחפים /etc/shadow יכול להיות קריא ב .git ספרייה.


12
2017-12-15 12:18





אמנם מבחינה טכנית אתה יכול לעשות את זה הייתי לשים שני אזהרות נגדה:

1, אתה משתמש במערכת גרסאות המקור עבור נתונים בינאריים. אתה משתמש בו עבור משהו שהוא לא נועד.

2, אני מודאג לגבי תהליך הפיתוח שלך אם אין לך תהליך (תיעוד או אוטומטי) לבניית מכונה חדשה. מה אם יש לך מכה לקנות אוטובוס, מי היה יודע מה לעשות ומה היה חשוב?

התאוששות מאסון היא חשובה, אולם מוטב שלה להפוך (script) את ההתקנה של תיבת פיתוח חדשה יותר מאשר רק גיבוי הכל. בטח להשתמש git עבור התסריט שלך / תיעוד אבל לא עבור כל קובץ במחשב.


11
2017-12-15 13:45



תיבות הפיתוח מגיעות מקבצי KickStart, ולמעשה התיבה הממוצעת נמשכת בערך 2 או 3 חודשים לפני שהוא בנוי מחדש. אבל אנשים משנים קונפיגורציות ועושים דברים, אנחנו בונים מחדש את הקופסאות ואנשים אומרים "היי, אני יודע שאני לא לשים את זה בשליטה במקור אבל היה לי קצת חרא על התיבה" ואני צוחקת עליהם על היותם טיפש. מסביב, בזמנים טובים. נתונים בינאריים יהיה כלבה, זה משהו שאני לגמרי התעלמו בזמן במקלחת. - Smudge
אני applaud הגישה שלך לאלה שלא מצליחים לעקוב אחר עקרונות בסיסיים. אישית יש לי מצב דומה לך, אבל יש לי מאגר git אשר קישורים בכל קבצי התצורה שעשויים להיות חשובים ולא לתפוס את כל. בנוסף dx txt עם צעדים ההתקנה. - Phil Hannent
אני חושב git עובד די טוב עבור קבצים בינאריים, vide חלק הארי של גוגל אנדרואיד של ריפו הם git מאגרים של הרצה מראש. - user377178


אני משתמש git כגיבוי עבור מערכת Windows שלי, וזה היה מאוד שימושי. בחלק התחתון של ההודעה, אני מציג את הסקריפטים שבהם אני משתמש כדי להגדיר במערכת Windows. שימוש ב- git כגיבוי עבור כל מערכת מספק 2 יתרונות גדולים:

  1. שלא כמו פתרונות מסחריים לעתים קרובות להשתמש בפורמט קנייני משלהם, הגיבוי שלך הוא בפורמט קוד פתוח כי הוא נתמך באופן נרחב ומתועד היטב. זה נותן לך שליטה מלאה על הנתונים שלך. זה מאוד קל לראות אילו קבצים השתנו ומתי. אם אתה רוצה לחתוך את ההיסטוריה שלך, אתה יכול לעשות את זה גם כן. רוצה למחוק משהו מההיסטוריה שלך? אין בעיה. קבלת גירסה של הקובץ בחזרה היא פשוטה כמו כל פקודה git.
  2. כמו רבים או כמה מראות כפי שאתה רוצה, וכל יכול להיות מותאם אישית פעמים גיבוי. תוכלו לקבל את המראה המקומי, אשר unburdened על ידי תעבורת האינטרנט איטי, ובכך נותן לך (1) את היכולת לעשות גיבויים תכופים יותר לאורך כל היום (2) זמן שיקום מהיר. (גיבויים תכופים הם פלוס ענק, כי אני מוצא את רוב הזמן אני מאבד את המסמך הוא על ידי שגיאת המשתמש.לדוגמה, הילד שלך מחליף בטעות מסמך שהוא עובד על 5 השעות האחרונות.) אבל תקבל את מראה מרחוק, אשר נותן את היתרון של הגנת נתונים במקרה של אסון מקומי או גניבה. ונניח שאתה רוצה את המראה מרחוק מגבה בזמן מותאם אישית כדי לשמור את רוחב הפס של האינטרנט? אין בעיה.

השורה התחתונה: גיבוי git נותן לך כמויות מדהימות של כוח על השליטה איך הגיבויים שלך לקרות.

אני מוגדר זה על מערכת Windows שלי. הצעד הראשון הוא ליצור את git repo המקומי שבו תוכל לבצע את כל הנתונים המקומיים שלך. אני ממליץ להשתמש בכונן קשיח מקומי שני, אבל באמצעות harddrive אותו יעבוד (אבל זה צפוי לך לדחוף את זה במקום מרוחק, או אחרת שלך דפוק אם harddrive מת).

אתה צריך קודם להתקין cygwin (עם rsync), וכן להתקין git עבור Windows: http://git-scm.com/download/win

לאחר מכן, צור את git repo המקומי (רק פעם אחת):

init-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 מתזמן:

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

לאחר מכן, יש לנו את הסקריפט גיבוי עצמו כי עטיפת שיחות:

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, שבו אנו שמים את כל הקבצים להתעלם:

exclude-from.txt:

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

אתה צריך ללכת כל repos מרחוק ולעשות 'git init --bare' עליהם. אתה יכול לבדוק את התסריט על ידי ביצוע סקריפט גיבוי. בהנחה שכל עובד, ללכת Windows מתזמן ולהצביע על גיבוי לשעה לכיוון קובץ vbs. לאחר מכן, תהיה לך היסטוריה git של המחשב שלך עבור כל שעה. זה מאוד נוח - כל בטעות למחוק קטע של טקסט לפספס את זה? רק לבדוק את המאגר git שלך.


6
2018-03-21 17:10



רק סקרן - האם זה יעבוד גם עבור כונני רשת איטיים או לא סטנדרטיים, כמו אלה שמחקה את NetDrive או את Expandrive? אני מוצא את רוב תוכנת גיבוי נכשל עם כונני רשת אלה. גם דברים מקבלים איטי מכאיב נוטים פסק זמן, אם אני רוצה רשימה של כל הקבצים בגיבוי לחלץ קבצים בודדים. האם Git מסוגל לפתור בעיות אלה? - JustAMartin
@JustAMartin מעולם לא בדקתי אותו על כונני רשת, אז אני לא יכול להגיד. ברגע שאתה מקבל את הקבצים git repo, git הוא מאוד יעיל. - user64141


ובכן זה לא רעיון רע, אבל אני חושב שיש 2 דגלים אדומים להיות הרים:

  • אם harddisk נכשל, תאבד הכל אם אתה לא דוחף את המחויבות שלך לשרת אחר / כונן. (אירוע אם יש לך תוכנית עבור זה, אני מעדיף להזכיר.)

... אבל עדיין, זה יכול להיות גיבוי טוב עבור דברים הקשורים שחיתות. או כמו שאמרת, אם התיקייה / git / נמצאת במקום אחר.

  • גיבוי זה תמיד יגדל בגודל. אין גיזום או סיבוב או כל דבר כברירת מחדל.

... אז אולי אתה צריך להגיד cronjob שלך להוסיף תגים, ולאחר מכן ודא כי להתחייב שאינם מתויגים ינקה.


4
2017-12-15 13:40



היינו כנראה לעלות על ספריית .git בשרת מרוחק, למרות clasic rm -Rf / יגרום לנו כמה בעיות. מערכת הגיבוי הנוכחית שלנו שומרת דברים עבור 2 שנים או 50 גרסאות (המוקדם מביניהם) כך הגיבוי שלנו הוא הולך וגדל בכל מקרה. אבל אני אוהב את הרעיון של הוספת תגים, יכולנו להיות "יומי", "שבועי" וכו 'תגים - Smudge
+1 לדרישות שטח גדלות והולכות - hafichuk
@ @ gam הולך ומתרחב. אתה canot לגזום את ההיסטוריה יותר מ N שנים. אני מניח שהמערכת הנוכחית שלך עושה. - rds
לגבי הגדלת גודל, בבקשה לעשות 'git gc' באופן קבוע או לפני שאתה דוחף לשרת אחר (מרכזי). ללא זה את git repo עשוי לגדול (הרבה) גדול יותר ממה שהוא צריך. פעם היה לי 346 MB git repo שיכול לכווץ עד 16 MB. - Hendy Irawan


אני לא ניסיתי את זה עם מערכת מלאה אבל אני משתמש בו עבור MySQL גיבויים (עם - הרחבת המורחבת-להוסיף אפשרות) וזה באמת עובד טוב בשבילי.

אתה הולך להיתקל בבעיה עם קבצי נתונים בינאריים (התוכן כולו שלהם יכול להשתנות) ואתה עלול להיות בעיות עם .git התיקייה מקבל ממש גדול. אני ממליץ על הגדרת a .gitignore קובץ רק גיבוי קבצי טקסט שאתה באמת יודע שאתה צריך.


3
2017-12-15 13:23



אני משתמש בו עבור גיבויים MySQL מדי, עם --extended-insert = false. הקפד "git gc" באופן קבוע או מיד לאחר להתחייב. - Hendy Irawan
ראה האם גיבוי מסד נתונים MySQL ב Git רעיון טוב? - Michael Hampton♦


פעם פיתחתי פתרון גיבוי המבוסס על חתרנות. למרות שזה עבד די טוב (ו git צריך לעבוד אפילו טוב יותר), אני חושב שיש פתרונות טובים יותר כאן.

אני מחשיב rsnapshot להיות אחד הטובים - אם לא ה טוב יותר. עם שימוש טוב של קישור קשה, יש לי 300 GB fileserver (עם חצי מיליון קבצים) עם גיבוי יומי, שבועי מונטלי חוזר עד שנה. סה"כ שטח דיסק משומש הוא רק עותק מלא אחד + את החלק התוספת של כל גיבוי, אבל בזכות hardlinks יש לי להשלים "לחיות" מבנה הספריות בכל אחד הגיבויים. במילים אחרות, הקבצים נגישים ישירות לא רק תחת day.0 (הגיבוי האחרון), אבל גם day.1 (yestarday) או week.2 (לפני שבועיים), וכן הלאה.

שיתוף מחדש של תיקיית גיבוי עם Samba, המשתמשים שלי יכולים למשוך את הקובץ מ גיבויים פשוט על ידי הצבעה המחשב האישי שלהם לשרת הגיבוי.

עוד אפשרויות טובות מאוד Rdiff גיבוי, אבל כמו שאני אוהב קבצים תמיד נגיש פשוט על ידי כותרת Explorer \\ servername, rsnapshot היה פתרון טוב יותר בשבילי.


3
2018-03-21 20:01



המהדורה האחרונה של גיבוי Rdiff הוא משנת 2009. האם זה מתוכנן היטב ודורש שום עדכון בכלל או שזה פשוט פרויקט נטוש? - Mateusz Konieczny
אני לא יודע אם זה maitained, אבל זה בעצם "לעשות". - shodanshok
מלהסתכל savannah.nongnu.org/bugs/... נראה כי הייתה פעילות כלשהי מאוחר ככל 2015 אבל דיווחים באגים רבים מתעלמים. אני חושב שאני יסווג את זה בתור נטוש. - Mateusz Konieczny


היה לי את אותו רעיון כדי לגבות עם git, בעצם כי זה מאפשר גיבויים versioned. ואז ראיתי Rdiff גיבוי, אשר מספק את הפונקציונליות (ועוד הרבה יותר). יש לו ממשק משתמש ממש נחמד (להסתכל על אפשרויות CLI). אני די מרוצה מזה. ה --remove-older-than 2W הוא די מגניב. זה מאפשר לך פשוט למחוק גירסאות ישנות מ 2 שבועות. rdiff-backup חנויות רק הבדל של קבצים.


2
2017-12-15 18:07