GIT เป็นเครื่องมือสำรอง


101

บนเซิร์ฟเวอร์ติดตั้ง git

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

จากนั้น/.git/ชี้ไปที่ไดรฟ์เครือข่าย (SAN, NFS, Samba) หรือดิสก์อื่น ใช้งาน cron ทุกชั่วโมง / วัน ฯลฯ เพื่ออัพเดตการเปลี่ยนแปลง ไดเรกทอรี. git จะมีสำเนาของไฟล์เซิร์ฟเวอร์ทั้งหมด (ยกเว้นไฟล์ที่ไม่มีประโยชน์ / ซับซ้อนเช่น / proc, / dev ฯลฯ )

สำหรับเซิร์ฟเวอร์การพัฒนาที่ไม่สำคัญที่ฉันไม่ต้องการความยุ่งยาก / ค่าใช้จ่ายในการตั้งค่าในระบบสำรองข้อมูลที่เหมาะสมและการสำรองข้อมูลจะทำเพื่อความสะดวกเท่านั้น (IE เราไม่จำเป็นต้องสำรองข้อมูลเซิร์ฟเวอร์นี้ แต่จะบันทึก บางครั้งหากสิ่งผิดพลาด) นี่อาจเป็นโซลูชันสำรองข้อมูลที่ถูกต้องหรือไม่หรือมันจะตกอยู่ในกองใหญ่ของเซ่อหรือไม่


3
ไม่ได้เป็นประกายโดยใช้ความคิดที่คล้ายกัน?
B14D3

@ B14D3 ฉันคิดว่า sparkleshare เป็นประเภทของ dropbox มากขึ้น แต่ฉันจะตรวจสอบมัน
Smudge

2
คุณขวา แต่มันใช้คอมไพล์ที่จะทำให้การจัดเรียงของสิ่ง buckup บางคน (คัดลอกไปหลายชิ้นและควบคุมรุ่นของแฟ้ม);)
B14D3

ปัญหาใหญ่ของเรื่องนี้คือไม่มีการควบคุมจากศูนย์กลาง - คุณต้องมีการเข้าถึงโดยตรง (ssh) เครื่องเพื่อ preform รูปแบบของการบำรุงรักษาหรือการตรวจสอบการสำรองข้อมูล ฉันมักจะพบว่าการติดตั้งแอพลงในกล่องเพื่อสำรองข้อมูลและการจัดการแอพเหล่านั้นจากตำแหน่งศูนย์กลางนั้นเป็นชัยชนะที่ยิ่งใหญ่กว่ามาก
hafichuk

@hafichuk ด้วยเครื่องมือเช่น Puppet / Chef มันไม่ใช่ปัญหาใหญ่ แต่ฉันเห็นประเด็นของคุณ
เลอะเทอะ

คำตอบ:


88

คุณไม่ใช่คนโง่ การใช้gitเป็นกลไกการสำรองข้อมูลสามารถดึงดูดและแม้จะมีคนอื่นพูดว่าgitทำงานได้ดีกับไฟล์ไบนารี อ่านหน้านี้จาก Git Bookสำหรับข้อมูลเพิ่มเติมในหัวข้อนี้ โดยพื้นฐานแล้วเนื่องจากgitไม่ได้ใช้กลไกการจัดเก็บเดลต้าจึงไม่สนใจว่าไฟล์ของคุณgit diffจะเป็นอย่างไร

ปัญหาที่ใหญ่ที่สุดในการใช้gitสำหรับการสำรองข้อมูลคือมันไม่ได้เก็บข้อมูลเมตาของระบบไฟล์ส่วนใหญ่ โดยเฉพาะgitไม่บันทึก:

  • กลุ่มไฟล์
  • เจ้าของไฟล์
  • การอนุญาตของไฟล์ (นอกเหนือจาก "สามารถเรียกทำงานได้")
  • คุณลักษณะเพิ่มเติม

คุณสามารถแก้ปัญหานี้ได้โดยการเขียนเครื่องมือเพื่อบันทึกข้อมูลนี้ลงในที่เก็บของคุณอย่างชัดเจน แต่อาจเป็นการยากที่จะทำให้ถูกต้อง

การค้นหาข้อมูลเมตาสำรองข้อมูล gitของ Google นั้นให้ผลลัพธ์จำนวนหนึ่งซึ่งดูเหมือนว่าจะคุ้มค่ากับการอ่าน (รวมถึงเครื่องมือบางอย่างที่พยายามชดเชยปัญหาที่ฉันยกมาแล้ว)

etckeeperได้รับการพัฒนาเพื่อสำรอง/etcและแก้ไขปัญหาเหล่านี้


15
+1 สำหรับการกล่าวถึง ACLs / การอนุญาต
Larry Silverman

22
Git ยังไม่ได้จัดเก็บไดเรกทอรีว่าง
Flimm

และมันยัง sucks สำหรับการติดตามการย้าย / เปลี่ยนชื่อไฟล์ผ่านประวัติ
cregox

1
เนื่องจาก git ไม่สามารถจัดการกับไฟล์ไบนารีได้เป็นอย่างดีคุณอาจต้องการดูภาคผนวก gitซึ่งช่วยให้ทำได้ดีขึ้น มันเปลี่ยนความคิดของสิ่งที่คอมไพล์ค่อนข้างอย่างไร
Wouter Verhelst

1
ความคิดเห็นของฉันคือคุณสามารถใช้ git เพื่อสำรองข้อมูล แต่ไม่ใช่เซิร์ฟเวอร์ทั้งหมด
EKanadily

21

ฉันไม่ได้ใช้มัน แต่คุณอาจดูbupซึ่งเป็นเครื่องมือสำรองตาม git


ไม่เคยเห็น bup มาก่อนดูน่าสนใจ
Smudge

1
ฉันเพิ่งเริ่มใช้ bup เมื่อเร็ว ๆ นี้เพียงไม่กี่วันก่อนที่ฮาร์ดไดรฟ์ของฉันจะล่ม;) การคืนค่าเป็นไปด้วยดีแนะนำเลย!
AndréParamés

1
@ AndréParamésดังนั้นสิ่งที่คุณกำลังพูดคือหลังจากที่คุณติดตั้ง bup ฮาร์ดไดรฟ์ของคุณล้มเหลว ... mmmmhh ... :) เพิ่งล้อเล่น
hofnarwillie

12

มันอาจเป็นวิธีการสำรองข้อมูลที่ถูกต้อง etckeeper ขึ้นอยู่กับความคิดนี้ แต่คอยดู.gitไดเรกทอรีสิทธิ์มิฉะนั้นการกด/etc/shadowสามารถอ่านได้ใน.gitไดเรกทอรี


11

ในขณะที่ในทางเทคนิคคุณสามารถทำสิ่งนี้ได้ฉันจะใส่คำเตือนสองข้อไว้

1, คุณกำลังใช้ระบบควบคุมเวอร์ชันต้นทางสำหรับข้อมูลไบนารี คุณจึงใช้มันเพื่อสิ่งที่ไม่ได้ออกแบบมา

2, ฉันกังวลเกี่ยวกับกระบวนการพัฒนาของคุณหากคุณไม่มีกระบวนการ (เอกสารหรืออัตโนมัติ) สำหรับการสร้างเครื่องใหม่ ถ้าคุณโดนซื้อรถบัสใครจะรู้ว่าต้องทำอะไรและอะไรสำคัญ

การกู้คืนความเสียหายเป็นสิ่งสำคัญอย่างไรก็ตามการตั้งค่ากล่องพัฒนาใหม่โดยอัตโนมัติจะดีกว่าการสำรองข้อมูลทุกอย่าง แน่นอนว่าใช้คอมไพล์สำหรับสคริปต์ / เอกสารของคุณ แต่ไม่ใช่สำหรับทุกไฟล์ในคอมพิวเตอร์


4
กล่องพัฒนาทั้งหมดมาจากไฟล์ KickStart และจริง ๆ แล้วกล่องเฉลี่ยใช้เวลาประมาณ 2 หรือ 3 เดือนก่อนที่จะสร้างใหม่ แต่ผู้คนเปลี่ยนการตั้งค่าและทำสิ่งต่าง ๆ เราสร้างกล่องขึ้นมาใหม่และผู้คนพูดว่า "เฮ้ฉันรู้ว่าฉันไม่ได้ใส่มันไว้ในแหล่งควบคุม แต่ฉันมีกล่องเล็ก ๆ " และฉันหัวเราะพวกเขาเพราะโง่ ทุกรอบเวลาที่ดี ข้อมูลไบนารีจะเป็นตัวเมียมันเป็นสิ่งที่ฉันมองข้ามโดยสิ้นเชิงขณะอาบน้ำ
Smudge

ฉันขอยกย่องทัศนคติของคุณต่อผู้ที่ไม่ปฏิบัติตามหลักการพื้นฐาน โดยส่วนตัวฉันมีสถานการณ์ที่คล้ายกับคุณ แต่ฉันมีที่เก็บ git ซึ่งเชื่อมโยงในไฟล์ config ทั้งหมดที่อาจมีความสำคัญมากกว่าที่จะจับทั้งหมด บวกกับเอกสาร txt พร้อมขั้นตอนการตั้งค่า
Phil Hannent

1
ฉันคิดว่า git ใช้งานได้ดีสำหรับไฟล์ไบนารีส่วนวิดีโอขนาดใหญ่ของ Google Android ของ repo นั้นเป็นที่เก็บคอมไพล์ของไฟล์ปฏิบัติการที่สร้างไว้ล่วงหน้า
user377178

6

ฉันใช้คอมไพล์เป็นข้อมูลสำรองสำหรับระบบ Windows ของฉันและมันก็มีประโยชน์อย่างเหลือเชื่อ ที่ด้านล่างของโพสต์ฉันแสดงสคริปต์ที่ฉันใช้เพื่อกำหนดค่าบนระบบ Windows การใช้ git เป็นแบ็คอัพสำหรับระบบใด ๆ ก็มีข้อดีสองอย่างคือ:

  1. แตกต่างจากโซลูชันเชิงพาณิชย์ที่มักจะใช้รูปแบบที่เป็นกรรมสิทธิ์ของตัวเองการสำรองข้อมูลของคุณอยู่ในรูปแบบโอเพ่นซอร์สที่ได้รับการสนับสนุนอย่างกว้างขวางและจัดทำเป็นเอกสารที่ดีมาก สิ่งนี้ทำให้คุณสามารถควบคุมข้อมูลของคุณได้อย่างเต็มที่ มันง่ายมากที่จะเห็นไฟล์ที่เปลี่ยนแปลงและเมื่อใด หากคุณต้องการตัดทอนประวัติของคุณคุณสามารถทำได้เช่นกัน ต้องการกำจัดบางสิ่งบางอย่างจากประวัติของคุณหรือไม่ ไม่มีปัญหา. การเรียกคืนไฟล์เวอร์ชันของคุณนั้นง่ายพอ ๆ กับคำสั่ง git
  2. มิรเรอร์มากหรือน้อยตามที่คุณต้องการและทุกคนสามารถกำหนดเวลาสำรองได้เอง คุณจะได้รับมิเรอร์ในเครื่องของคุณซึ่งไม่ได้รับภาระจากการรับส่งข้อมูลทางอินเทอร์เน็ตที่ช้าและทำให้ (1) ความสามารถในการสำรองข้อมูลบ่อยขึ้นตลอดทั้งวันและ (2) เวลาการฟื้นฟูอย่างรวดเร็ว (การสำรองข้อมูลบ่อยครั้งเป็นข้อดีอย่างมากเพราะฉันพบว่าเวลาส่วนใหญ่ที่ฉันทำเอกสารหายนั้นเกิดจากข้อผิดพลาดของผู้ใช้ตัวอย่างเช่นลูกของคุณเขียนทับเอกสารที่เขาทำงานอยู่ในช่วง 5 ชั่วโมงที่ผ่านมาโดยบังเอิญ) แต่คุณจะได้รับ รีโมตมิเรอร์ซึ่งให้ประโยชน์จากการปกป้องข้อมูลในกรณีที่เกิดภัยพิบัติในพื้นที่หรือการโจรกรรม และสมมติว่าคุณต้องการให้รีโมตมิเรอร์สำรองข้อมูลตามเวลาที่กำหนดเพื่อประหยัดแบนด์วิดท์อินเทอร์เน็ตของคุณ ไม่มีปัญหา.

บรรทัดล่างสุด: การสำรองข้อมูล git ให้พลังในการควบคุมการสำรองข้อมูลของคุณอย่างไม่น่าเชื่อ

ฉันกำหนดค่าสิ่งนี้ในระบบ Windows ของฉัน ขั้นตอนแรกคือการสร้าง repo คอมไพล์ท้องถิ่นที่คุณจะยอมรับข้อมูลท้องถิ่นทั้งหมดของคุณ ฉันขอแนะนำให้ใช้ฮาร์ดไดรฟ์ตัวที่สองในพื้นที่ แต่การใช้ฮาร์ดไดรฟ์แบบเดียวกันนั้นจะทำงานได้ (แต่คาดว่าคุณจะต้องกดที่นี่จากระยะไกล

ก่อนอื่นคุณจะต้องติดตั้ง cygwin (พร้อม rsync) และติดตั้ง git สำหรับ Windows: http://git-scm.com/download/win

ถัดไปสร้าง repo git ในพื้นที่ของคุณ (ทำงานเพียงครั้งเดียว):

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%

ต่อไปเรามี wrapper สคริปต์สำรองของเราซึ่งจะถูกเรียกเป็นประจำโดย 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

ต่อไปเรามีสคริปต์สำรองที่ตัวเรียกใช้งาน:

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%

เรามีไฟล์ที่แยกจาก -txt ซึ่งเราให้ไฟล์ทั้งหมดที่จะไม่สนใจ:

ยกเว้น-from.txt:

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

คุณจะต้องไปที่รีโมตรีโมตและทำ 'git init --bare' คุณสามารถทดสอบสคริปต์ได้โดยเรียกใช้สคริปต์สำรอง สมมติว่าทุกอย่างใช้งานได้ไปที่ Windows Scheduler และทำการสำรองข้อมูลรายชั่วโมงไปยังไฟล์ vbs หลังจากนั้นคุณจะมีประวัติคอมไพล์ของคอมพิวเตอร์ของคุณทุกชั่วโมง มันสะดวกอย่างยิ่ง - ลบข้อความโดยไม่ได้ตั้งใจทุกส่วนหรือไม่ เพียงตรวจสอบที่เก็บ git ของคุณ


แค่อยากรู้อยากเห็น - มันจะใช้งานได้กับไดรฟ์เครือข่ายที่ช้าหรือไม่ได้มาตรฐานเช่นเดียวกับที่จำลองโดย NetDrive หรือ Expandrive ฉันพบว่าซอฟต์แวร์สำรองข้อมูลส่วนใหญ่ล้มเหลวกับไดรฟ์เครือข่ายเหล่านี้ นอกจากนี้ยังมีสิ่งต่าง ๆ ที่ทำให้ช้าลงอย่างเจ็บปวดและมีแนวโน้มที่จะหมดเวลาถ้าฉันต้องการแสดงรายการไฟล์ทั้งหมดในการสำรองข้อมูลและแยกไฟล์แต่ละไฟล์ git สามารถแก้ไขปัญหาเหล่านี้ได้หรือไม่?
JustAMartin

@ จัสตินมาร์ตินฉันไม่เคยทดสอบกับไดรฟ์เครือข่ายดังนั้นฉันไม่สามารถพูดได้ เมื่อคุณได้รับไฟล์ใน repo คอมไพล์ git นั้นมีประสิทธิภาพมาก
user64141

4

ไม่ใช่ความคิดที่ไม่ดี แต่ฉันคิดว่าจะมีการยกธงสีแดง 2 อัน:

  • หากฮาร์ดดิสก์ล้มเหลวคุณจะสูญเสียทุกอย่างหากคุณไม่ได้ส่งการกระทำไปยังเซิร์ฟเวอร์ / ไดรฟ์อื่น (กิจกรรมหากคุณมีแผนฉันต้องการพูดถึง)

... แต่ถึงกระนั้นก็สามารถสำรองที่ดีสำหรับสิ่งที่เกี่ยวข้องกับความเสียหาย หรืออย่างที่คุณพูดถ้า. git / folder อยู่ที่อื่น

  • การสำรองข้อมูลนี้จะเพิ่มขนาดเสมอ ไม่มีการตัดหรือหมุนหรืออะไรก็ได้ตามค่าเริ่มต้น

... ดังนั้นคุณอาจต้องบอก cronjob ของคุณเพื่อเพิ่มแท็กจากนั้นตรวจสอบให้แน่ใจว่าการกระทำที่ไม่ได้ติดแท็กจะถูกล้างออก


เราอาจจะเมานต์ไดเรกทอรี. git บนเซิร์ฟเวอร์ระยะไกลแม้ว่า clasic rm -Rf /จะทำให้เรามีปัญหาบางอย่าง ระบบสำรองข้อมูลปัจจุบันของเราเก็บข้อมูลเป็นเวลา 2 ปีหรือ 50 เวอร์ชัน (แล้วแต่ระยะเวลาใดจะนาน) ดังนั้นการสำรองข้อมูลของเราจึงเพิ่มขึ้นอย่างต่อเนื่อง แต่ฉันชอบความคิดของการเพิ่มแท็กเราอาจมี "รายวัน", "รายสัปดาห์" ฯลฯ แท็ก
Smudge

+1 สำหรับความต้องการพื้นที่ที่เพิ่มขึ้นเรื่อย ๆ
hafichuk

@ sam git เติบโตขึ้นเรื่อย ๆ คุณสามารถตัดประวัติที่มีอายุมากกว่า N ปีได้ ฉันคิดว่าระบบปัจจุบันของคุณทำ
rds

1
เกี่ยวกับการเพิ่มขนาดโปรดทำ 'git gc' เป็นประจำหรือก่อนที่คุณจะไปยังเซิร์ฟเวอร์อื่น (ส่วนกลาง) หากปราศจากสิ่งนี้ repo คอมไพล์อาจโตได้มากกว่าที่ควร ฉันเคยมี repo คอมไพล์ 346 MB ที่สามารถลดขนาดลงเหลือ 16 MB
Hendy Irawan

3

ฉันไม่ได้ลองกับระบบเต็มรูปแบบ แต่ฉันใช้มันสำหรับการสำรองข้อมูล MySQL ของฉัน (ด้วยตัวเลือก --skip-Extended-insert) และมันก็ใช้ได้ดีสำหรับฉัน

คุณกำลังจะพบปัญหากับไฟล์ข้อมูลไบนารี (เนื้อหาทั้งหมดของพวกเขาสามารถและจะเปลี่ยนแปลง) และคุณอาจมีปัญหากับ.gitโฟลเดอร์ที่มีขนาดใหญ่มาก ฉันขอแนะนำให้ตั้งค่า.gitignoreไฟล์และสำรองไฟล์ข้อความที่คุณรู้ว่าคุณต้องการจริงๆเท่านั้น


ฉันใช้มันสำหรับการสำรองข้อมูล MySQL ด้วย --extended-insert = false อย่าลืม "git gc" เป็นประจำหรือทันทีหลังจากส่ง
Hendy Irawan


3

ฉันเคยพัฒนาโซลูชันสำรองตามการโค่นล้ม ในขณะที่มันทำงานได้ค่อนข้างดี (และคอมไพล์ควรทำงานได้ดีขึ้น) ฉันคิดว่ามีวิธีแก้ปัญหาที่ดีกว่าที่นี่

ฉันถือว่าrsnapshotเป็นหนึ่งในคนที่ดีกว่า - ถ้าไม่ใช่คนที่ดีกว่า ด้วยการใช้งานฮาร์ดลิงก์ที่ดีฉันมีไฟล์เซิร์ฟเวอร์ 300 GB (ครึ่งล้านไฟล์) ที่มีการสำรองข้อมูลรายวันรายสัปดาห์และรายเดือนย้อนกลับไปได้ถึงหนึ่งปี พื้นที่ดิสก์ที่ใช้ทั้งหมดเป็นเพียงสำเนาเต็มรูปแบบ + ส่วนที่เพิ่มขึ้นของการสำรองข้อมูลแต่ละครั้ง แต่ต้องขอบคุณฮาร์ดลิงก์ที่ฉันมีโครงสร้างไดเรกทอรี "สด" ที่สมบูรณ์ในการสำรองข้อมูลแต่ละครั้ง ในคำอื่น ๆ ไฟล์สามารถเข้าถึงได้โดยตรงไม่เพียง แต่ภายใต้ daily.0 (การสำรองข้อมูลล่าสุด) แต่ยังอยู่ใน Daily.1 (yestarday) หรือ Week.2 (สองสัปดาห์ที่ผ่านมา) และอื่น ๆ

การแชร์โฟลเดอร์สำรองกับแซมบ้าอีกครั้งผู้ใช้ของฉันสามารถดึงไฟล์จากข้อมูลสำรองได้โดยเพียงชี้พีซีของพวกเขาไปยังเซิร์ฟเวอร์สำรอง

ตัวเลือกที่ดีอีกอย่างคือการสำรองข้อมูล rdiffแต่เนื่องจากฉันต้องการให้มีไฟล์ที่เข้าถึงได้ง่ายเพียงแค่มุ่งหน้าไปยัง \\ ชื่อเซิร์ฟเวอร์, rsnapshot เป็นทางออกที่ดีกว่าสำหรับฉัน


การสำรองข้อมูล rdiff ครั้งล่าสุดมาจากปี 2009 มันออกแบบมาอย่างดีมากและไม่ต้องการการอัพเดทเลยหรือเป็นเพียงแค่โครงการที่ถูกทอดทิ้งหรือไม่?
Mateusz Konieczny

ฉันไม่รู้ว่ามันถูกควบคุมหรือไม่
shodanshok

จากการดูที่savannah.nongnu.org/bugs/ ......ดูเหมือนว่าจะมีกิจกรรมบางอย่างในช่วงปลายปี 2015 แต่รายงานข้อผิดพลาดจำนวนมากจะถูกเพิกเฉย ฉันคิดว่าฉันจะจัดว่ามันถูกทิ้งร้าง
Mateusz Konieczny

2

ฉันมีความคิดเดียวกันกับการสำรองข้อมูลด้วย git เพราะโดยทั่วไปจะอนุญาตให้มีการสำรองข้อมูลที่เป็นเวอร์ชัน จากนั้นฉันเห็นการสำรองข้อมูล rdiffซึ่งให้การทำงานนั้น (และอีกมากมาย) มันมีส่วนต่อประสานผู้ใช้ที่ดีมาก ๆ (ดูที่ตัวเลือก CLI) ฉันมีความสุขมาก --remove-older-than 2Wเป็นเย็นสวย จะช่วยให้คุณเพียงแค่ลบรุ่นเก่ากว่า 2 สัปดาห์ rdiff-backupร้านค้าแตกต่างกันเฉพาะไฟล์


2

ฉันใหม่มากสำหรับ git แต่ไม่ใช่สาขาในท้องถิ่นโดยค่าเริ่มต้นและต้องผลักไปยังที่เก็บข้อมูลระยะไกลอย่างชัดเจน นี่เป็นเซอร์ไพรสที่ไม่พึงประสงค์และไม่คาดคิด ท้ายที่สุดฉันไม่ต้องการให้repo ในพื้นที่ทั้งหมดของฉัน 'สำรองข้อมูล' ไปยังเซิร์ฟเวอร์หรือไม่ อ่านหนังสือคอมไพล์ :

สาขาท้องถิ่นของคุณจะไม่ถูกซิงโครไนซ์กับรีโมทที่คุณเขียนโดยอัตโนมัติ - คุณต้องผลักดันสาขาที่คุณต้องการแชร์อย่างชัดเจน ด้วยวิธีนี้คุณสามารถใช้สาขาส่วนตัวสำหรับงานที่คุณไม่ต้องการแบ่งปันและผลักดันเฉพาะสาขาหัวข้อที่คุณต้องการทำงานร่วมกัน

สำหรับฉันนี่หมายความว่าสาขาในท้องที่เหล่านั้นเช่นไฟล์ที่ไม่ใช่ git อื่น ๆ ในเครื่องของฉันมีความเสี่ยงที่จะสูญหายเว้นแต่จะสำรองข้อมูลเป็นประจำด้วยวิธีที่ไม่ใช่ git ฉันทำสิ่งนี้ต่อไป แต่มันทำให้สมมติฐานของฉันเกี่ยวกับการ 'สำรองข้อมูลทุกอย่าง' ในคอมไพล์ของฉัน ฉันชอบชี้แจงเพิ่มเติมเกี่ยวกับสิ่งนี้!


1
ค่อนข้างทุกอย่างเกี่ยวกับคอมไพล์ยกเว้นรีโมตคือโลคัล นั่นคือจากการออกแบบ คุณสามารถผลักสิ่งต่าง ๆ เพื่อรีโมทและควรโดยเฉพาะอย่างยิ่งถ้าใช้สำหรับการสำรองข้อมูลในสถานการณ์นี้ สำหรับสาขาอีกครั้งใช่คุณจะต้องผลักดันพวกเขาอย่างชัดเจนหากคุณต้องการเพิ่มพวกเขาในระยะไกล สำหรับการพัฒนาสิ่งนี้เป็นสิ่งที่ดีมากเพราะบ่อยครั้งที่คุณต้องการทดสอบบางสิ่งบางอย่าง แต่ไม่จำเป็นที่จะต้องทำการทดสอบสาขานั้น ๆ อย่างไม่มีกำหนด เมื่อคุณมีสิ่งที่คุณต้องการจากมันคุณก็น่าจะรวมมันเข้ากับสาขา dev และลบสาขาทดสอบ
LocalPCGuy

1

ฉันพบว่านี่เป็นวิธีการที่ดีสำหรับกล่อง dev ของฉัน มันเปลี่ยนพวกเขาจากการเป็นสิ่งที่ต้องสำรองเป็นเพียงจุดปลายการปรับใช้

รายการติดตั้งการกำหนดค่าและแพคเกจทั้งหมดจะถูกเก็บไว้ใน Puppet เพื่อให้สามารถนำไปใช้งานซ้ำได้ง่ายและอัปเดตการกำหนดค่า ไดเรกทอรี Puppet ได้รับการสำรองด้วย git Kickstart ใช้เพื่อทำการปรับใช้ครั้งแรก

ฉันยังเก็บที่เก็บ YUM แบบกำหนดเองสำหรับแพ็คเกจที่กำลังพัฒนาอยู่ในขณะนั้น สิ่งนี้มีประโยชน์เพิ่มเติมที่แพคเกจใดก็ตามที่เรากำลังทำงานด้วยไม่เพียง แต่ถูกทิ้งให้อยู่ในสถานะเดียวกับระบบโลคัล - ถ้าเกิดขึ้นและไฟล์ต่าง ๆ ก็ไม่ได้ดีเหมือนกัน มีคนไม่ปฏิบัติตามขั้นตอนที่เหมาะสม


1

คุณอาจต้องการตรวจสอบbup บน githubซึ่งออกแบบมาเพื่อใช้ในวัตถุประสงค์ของการใช้ git สำหรับการสำรองข้อมูล


คำตอบก่อนหน้านี้ชี้ไปที่เครื่องมือเดียวกันนั้นแล้ว (bup) serverfault.com/a/341213/303467 มีไฮไลท์ใดบ้าง
Javier

1

มันเป็นวิธีการที่ใช้มันทำให้รู้สึก

Keepconfใช้ rsync และ git สำหรับงานนี้มันเป็นเสื้อคลุมทับเครื่องมือนี้เพื่อให้ง่ายขึ้น

คุณต้องการเซิร์ฟเวอร์กลางที่มี ssh-keys ที่กำหนดค่าไว้สำหรับการเข้าถึงเซิร์ฟเวอร์สำรองและไม่กี่บรรทัดในไฟล์กำหนดค่า ตัวอย่างเช่นนี่เป็นไฟล์ของฉันสำหรับเก็บ / etc / ทั้งหมดและติดตั้งแพ็คเกจ debian:

[hosts]
192.168.1.10
192.168.1.11
192.168.1.12

[files]
/etc/*
/var/lib/dpkg/status

ด้วยการที่ฉันมีการสำรองข้อมูล rsync และคอมไพล์กระทำ


0

ความคิดเห็นส่วนตัวของฉันคือสิ่งนี้ย้อนหลังทั้งหมด คุณกำลังส่งไฟล์ไปยังโซลูชันสำรองแทนที่จะดึงออกมา

จะดีกว่ามากที่จะรวมศูนย์การกำหนดค่าเซิร์ฟเวอร์ตั้งแต่แรกแล้วดึงลงมาโดยใช้หุ่นเชิด

ที่กล่าวว่ามันอาจใช้งานได้ฉันไม่คิดว่ามันจะดีขนาดนั้น

ลองมองเข้าไปใน backuppc - มันค่อนข้างง่ายที่จะตั้งค่าและมันก็ยอดเยี่ยมตรงไปตรงมา


0

มันจะใช้งานได้ดี แต่มีสองประการ

  1. การเพิ่มไฟล์จะไม่ถูกหยิบขึ้นมาโดยอัตโนมัติเมื่อคุณทำการคอมมิท ใช้สถานะ --porcelean om git เพื่อค้นหาสิ่งใหม่ที่จะเพิ่มก่อนที่จะทำการคอมมิท

  2. ทำไมความยุ่งยากในการติดตั้งระยะไกลสำหรับ. ssh มันจะเปราะบางถ้าคุณไม่รู้ว่ามันล้มเหลว ใช้พื้นที่เก็บข้อมูลเปล่าสำหรับส่วนท้ายสุดด้วยการเข้าสู่ระบบคีย์ ssh ปกติ ตราบใดที่พื้นที่เก็บข้อมูลว่างเปล่าและคุณผลักดันจากแหล่งเดียวเท่านั้นก็รับประกันว่าจะทำงานได้โดยไม่ต้องรวม

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.