ฉันใช้คอมไพล์เป็นข้อมูลสำรองสำหรับระบบ Windows ของฉันและมันก็มีประโยชน์อย่างเหลือเชื่อ ที่ด้านล่างของโพสต์ฉันแสดงสคริปต์ที่ฉันใช้เพื่อกำหนดค่าบนระบบ Windows การใช้ git เป็นแบ็คอัพสำหรับระบบใด ๆ ก็มีข้อดีสองอย่างคือ:
- แตกต่างจากโซลูชันเชิงพาณิชย์ที่มักจะใช้รูปแบบที่เป็นกรรมสิทธิ์ของตัวเองการสำรองข้อมูลของคุณอยู่ในรูปแบบโอเพ่นซอร์สที่ได้รับการสนับสนุนอย่างกว้างขวางและจัดทำเป็นเอกสารที่ดีมาก สิ่งนี้ทำให้คุณสามารถควบคุมข้อมูลของคุณได้อย่างเต็มที่ มันง่ายมากที่จะเห็นไฟล์ที่เปลี่ยนแปลงและเมื่อใด หากคุณต้องการตัดทอนประวัติของคุณคุณสามารถทำได้เช่นกัน ต้องการกำจัดบางสิ่งบางอย่างจากประวัติของคุณหรือไม่ ไม่มีปัญหา. การเรียกคืนไฟล์เวอร์ชันของคุณนั้นง่ายพอ ๆ กับคำสั่ง git
- มิรเรอร์มากหรือน้อยตามที่คุณต้องการและทุกคนสามารถกำหนดเวลาสำรองได้เอง คุณจะได้รับมิเรอร์ในเครื่องของคุณซึ่งไม่ได้รับภาระจากการรับส่งข้อมูลทางอินเทอร์เน็ตที่ช้าและทำให้ (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 ของคุณ