퍼포스 백업에 관해 기술한다.
백업해야 할 내용들의 목록은 다음과 같다.
즉 체크포인트 파일과 저널 파일은 일종의 메타 데이터이며, SqlServer 차등/로그 백업에서의 그것과 같다고 볼 수 있다.
아래와 같은 절차를 거쳐야 한다.
하드가 통채로 날아갔다고 간주한다.
@ECHO OFF @TITLE Backing up perforce repository FOR /F "tokens=1-3 delims=- " %%I IN ('date /t') DO SET DATE=%%I.%%J.%%K SET PERFORCE_ROOT="C:\Program Files\Perforce\Server" SET BACKUP_ROOT="D:\Backup\%DATE%" SET BACKUP_FILE="D:\Backup\%DATE%\files.rar" mkdir %BACKUP_ROOT% p4 verify -q //... > %BACKUP_ROOT%\Backup.log net stop Perforce %PERFORCE_ROOT%\p4d -jc -r %PERFORCE_ROOT% "C:\Program Files\WinRAR\rar" a -r -m5 %BACKUP_FILE% %PERFORCE_ROOT%\depot for /F "delims=" %%I in ('"dir /B /S %PERFORCE_ROOT% | findstr /E "journal\.[0-9]""') do ( echo moving %%I to %BACKUP_ROOT% move /Y "%%I" %BACKUP_ROOT% ) for /F "delims=" %%I in ('"dir /B /S %PERFORCE_ROOT% | findstr /E "checkpoint\..*""') do ( echo moving %%I to %BACKUP_ROOT% move /Y "%%I" %BACKUP_ROOT% ) net start Perforce
실제로 돌려본게 아니라, 걍 타이핑한 거라 오타가 있을 수도? 아래의 파이썬 스크립트는 위에서 생성한 백업 파일들을 최근 일주일치만 보관하기 위한 스크립트이다.
import datetime import os import shutil import errno import stat def handle_remove_read_only(func, path, exc): exc_value = exc[1] if func in (os.rmdir, os.remove) and exc_value.errno == errno.EACCES: os.chmod(path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO) func(path) else: raise def remove_obsolete(root): if root[-1] != os.sep: root += os.sep with open("remove_obsolete.log", "w") as output: preserved = [] today = datetime.date.today() output.write("-- %(y)04d.%(m)02d.%(d)02d" % { 'y': today.year, 'm': today.month, 'd': today.day }) for i in range(0,7): target = today + datetime.timedelta(days=-i) preserved.append("%(y)04d.%(m)02d.%(d)02d" % { 'y': target.year, 'm': target.month, 'd': target.day }) for name in os.listdir(root): full_name = root + name if os.path.isdir(full_name): if not (name in preserved): output.write("deleting " + full_name + "\n") shutil.rmtree(full_name, False, handle_remove_read_only) if __name__ == "__main__": remove_obsolete("D:\Backup")