이전에는 Restic-Systemd-Automatic-Backup으로 지명되었습니다
이 최고의 기여자들을 포함하여 :
Restic은 백업을위한 명령 줄 도구입니다. 공식 웹 사이트에서 기능 설명을 확인하십시오. 스토리지 백엔드로서 Restic이 잘 작동하기 때문에 Backblaze B2를 권장합니다. (글을 쓰는 시점에) 취미 해커에게 매우 저렴합니다! (일화 : 나는 매달 전체 시스템 백업 비용을 지불합니다. 일반적으로 <1 USD).
불행히도 RESTIC은 자동 백업을 실행하는 방법으로 사전 구성되지 않습니다. 그러나 OS 및 일부 포장지에서 내장 도구를 사용하여 직접 설정할 수 있습니다. SystemD가있는 Linux의 경우 SystemD 타이머를 사용하는 것이 편리합니다. MACOS 시스템의 경우 내장 실행 에이전트를 사용할 수 있습니다. Windows의 경우 ScheduledTasks를 사용할 수 있습니다. cron과 같은 것을 갖는 모든 OS도 효과가 있습니다!
다음은 샘플 스크립트와 귀하의 요구에 맞게 수정할 수있는 구성을 통해 설정 방법에 대한 단계별 튜토리얼을 따릅니다.
RESTIC의 지원 스토리지 백엔드를 사용할 수 있습니다. 설정은 비슷해야하지만 선택한 백엔드와 일치하기 위해 다른 구성 변수를 사용해야합니다.
업데이트 : 이 프로젝트는 기능이 완료되었습니다 (아래 추론 참조). 버그 수정 만 허용됩니다. 더 많은 기능을 추가하려면 자유롭게 포크하십시오. 포킹베이스가되는 것은이 프로젝트의 초기 범위였습니다!
이를위한 범위는 모든 문제와 가능한 모든 설정을 해결하는 본격적인 슈퍼 솔루션이되어서는 안됩니다. 목표는 요구 사항에 맞는 완벽한 백업 솔루션을 재봉 할 수있는 해킹 가능한 코드 기반이되는 것입니다!
그럼에도 불구하고, 프로젝트는 상자에서 벗어나 최소화되어 있지만 여전히 사용자의 구성 및 확장을 위해 도어를 열어야합니다.
B2와 다른 스토리지 백엔드를 사용하려면 백업 프로파일의 몇 가지 설정 변수와 restic_backup.sh 내부의 RESTIC 인수 만 조정하면됩니다.
☝ 여기서 Linux 설정은 / 에 대한 설치를 가정 합니다.
오늘날 많은 Linux 배포판은 SystemD를 사용하여 서비스 실행 및 예정된 작업을 잘 지원합니다. 분포가 SystemD에 없으면 대신 CRON 설정을 확인하십시오.
TL; DR 설정
make : $ sudo make install-systemd$ yay -S restic-automatic-backup-scheduler/etc/restic 의 구성 값을 채우십시오.restic(1) 에 필요한 모든 구성을 사용할 수 있도록하십시오. 이후의 모든 명령은 프로파일이 현재 쉘에 공급된다고 가정합니다. # source /etc/restic/default.env.sh
# restic init/usr/lib/systemd/system/[email protected] 에서 OnCalendar 편집하십시오.# systemctl enable --now [email protected]# journalctl -f --lines=50 -u restic-backup@default# restic snapshots# systemctl enable --now [email protected]default.env.sh 의 사본을 만들고 default 대신에 정의 된 프로파일 이름을 사용하여 백업을 실행하거나 타이머를 활성화하십시오. @ 이후의 값은 매개 변수로 작동합니다. # systemctl enable restic-backup@other_profile.timer macOS 설정은 여기에서 권장되는 기본 위치에 홈 브루 설치를 가정 합니다. 이것은 $HOMEBREW_PREFIX ( brew --prefix )이며, Intel Mac의 /usr/local 및 Apple Silicon의 /opt/homebrew 입니다.
Launchd는 MacOS의 최신 내장 서비스 스케줄러입니다. 루트 (데몬) 또는 일반 사용자 (에이전트)로서 서비스를 실행하는 것을 지원합니다. 여기서 우리는 정기적 인 백업을 시작하기위한 일반 사용자로 실행할 런치 아 펜트를 설정했습니다.
TL; DR 설정
$ brew install erikw/tap/restic-automatic-backup-schedulermake 사용 : $ make PREFIX=$(brew --prefix) install-launchagent$(brew --prefix)/etc/restic 로 작성하십시오.restic(1) 에 필요한 모든 구성을 사용할 수 있도록하십시오. 이후의 모든 명령은 프로파일이 현재 쉘에 공급된다고 가정합니다. $ source $(brew --prefix)/etc/restic/default.env.sh
$ restic initOnCalendar 편집하십시오~/Library/LaunchAgents/homebrew.mxcl.restic-automatic-backup-scheduler.plist .make : ~/Library/LaunchAgents/com.github.erikw.restic-backup.plist .$ brew services start restic-automatic-backup-schedulermake : $ launchctl bootstrap gui/ $UID ~ /Library/LaunchAgents/com.github.erikw.restic-backup.plist
$ launchctl enable gui/ $UID /com.github.erikw.restic-backup
$ launchctl kickstart -p gui/ $UID /com.github.erikw.restic-backup$ make activate-launchagent-backup 입니다.$ tail -f ~ /Library/Logs/restic/backup *$ restic snapshots$ brew services start restic-automatic-backup-scheduler-checkmake : $ launchctl bootstrap gui/ $UID ~ /Library/LaunchAgents/com.github.erikw.restic-check.plist
$ launchctl enable gui/ $UID /com.github.erikw.restic-check
$ launchctl kickstart -p gui/ $UID /com.github.erikw.restic-check$ make activate-launchagent-check 입니다.그런 다음 Homebrew로 서비스를 제어하십시오.
$ brew services start restic-automatic-backup-scheduler
$ brew services restart restic-automatic-backup-scheduler
$ brew services stop restic-automatic-backup-scheduler services start 되면 이전 버전이 설치되어 발생할 수 있습니다. 이 경우 기존 버전을 제거하고 다시 시도하십시오.
$ launchctl bootout gui/ $UID /com.github.erikw.restic-backup
$ brew services start restic-automatic-backup-scheduler disable 명령을 사용하여 에이전트를 일시적으로 일시 중지하거나 bootout 제거하십시오.
$ launchctl disable gui/$UID/com.github.erikw.restic-backup
$ launchctl bootout gui/$UID/com.github.erikw.restic-backup
.plist 파일을 업데이트 한 경우 bootout 과 bootrstrap 발행하고 launchctl 의 하위 명령을 enable 해야합니다. 이렇게하면 파일이 올바르게 다시로드되도록 보장됩니다.
Windows에는 ScheduledTask라는 내장 작업 스케줄러가 제공됩니다. Frontend 앱은 "작업 스케줄러"( taskschd.msc )이며 PowerShell 명령을 사용하여 새 예정된 작업을 설치할 수 있습니다.
여기서는 당신이 RESTIC을 얻을 수있는 5 월 중 하나 와이 백업 스크립트가 Windows에서 작동합니다. 여기서 나는 scoop 및 git-bash 와 함께 일하기로 결정했습니다.
TL; DR 설정
pwsh 설치해야합니다. powershell> scoop install restic make git pwsh powershell> git-bash
git-bash$ mkdir ~/src && cd ~/src/
git-bash$ git clone https://github.com/erikw/restic-automatic-backup-scheduler.git && cd $(basename "$_" .git) git-bash$ make install-schedtask/etc/restic 의 구성 값을 채우십시오. git-bash$ vim /etc/restic/*default.env.sh 으로 가질 수 있습니다 export RESTIC_BACKUP_PATHS= ' /c/Users/<username>/My Documents 'restic(1) 에 필요한 모든 구성을 사용할 수 있도록하십시오. 이후의 모든 명령은 프로파일이 현재 쉘에 공급된다고 가정합니다. git-bash$ source /etc/restic/default.env.sh
git-bash$ restic init git-bash$ restic_backup.sh git-bash$ restic snapshotstaskschd.msc )restic_backup 을 클릭하십시오.make install-schedtask 전에 닫았을 수도 있습니다. 다시 닫고 다시 시작하여 새로 고침하십시오.restic_backup.sh 열어야하며 다음에 구성된 일정이 맞을 때! taskschd.msc 사용하면 원하는대로 예정된 작업을 쉽게 시작, 중지, 삭제 및 구성 할 수 있습니다.
☝ 많은 다른 CRON 구현이 있으며 모두 약간 다르게 작동합니다.
Cron과 같은 시스템이있는 모든 시스템은 RESTIC 백업도 쉽게 설정할 수 있습니다. 그러나 시스템이 이전 설정을 지원하는 경우 백업에 더 많은 기능과 안정성을 제공하므로 CRON보다 권장됩니다.
TL; DR 설정
$ sudo make install-cron/etc/cron.d/ 에 삭제하는 것을 지원한다고 가정합니다. 그렇지 않은 경우 설치된 /etc/cron.d/restic 의 관련 내용을 /etc/crontab 에 복사하십시오. # grep " ^@.*restic_ " /etc/cron.d/restic >> /etc/crontab/etc/restic 의 구성 값을 채우십시오.restic(1) 에 필요한 모든 구성을 사용할 수 있도록하십시오. 이후의 모든 명령은 프로파일이 현재 쉘에 공급된다고 가정합니다. # source /etc/restic/default.env.sh
# restic init # restic_backup.sh# restic snapshots/etc/cron.d/restic (또는 /etc/crontab )을 직접 편집하여 백업을 얼마나 자주 수행 해야하는지 구성하십시오.
이것은 위의 TL; DR 섹션보다 더 자세한 설명으로 설정에서 더 많은 이해를 제공합니다. 이 섹션은보다 일반적이지만 Linux + SystemD를 예제 설정으로 사용합니다.
$ git clone https://github.com/erikw/restic-automatic-backup-scheduler.git && cd $( basename " $_ " .git )소스 파일에서 빠른 검색 및 재구성을 작성하십시오.
$ find bin etc usr Library ScheduledTask -type f -exec sed -i.bak -e ' s|{{ INSTALL_PREFIX }}||g ' {} ; -exec rm {}.bak ;그리고 이제 모든 파일이 예를 들어 변경되었음을 알 수 있어야합니다.
- export RESTIC_PASSWORD_FILE="{{ INSTALL_PREFIX }}/etc/restic/pw.txt"
+ export RESTIC_PASSWORD_FILE="/etc/restic/pw.txt" 왜? OS 특정 TL; DR 설정은 무엇보다도 MakeFile 또는 패키지 관리자를 사용하여 이러한 파일을 설치합니다. 자리 표시기 문자열 {{ INSTALL_PREFIX }} 는 이식성 이유 때문에 소스 파일에 있으므로 MakeFile이 모든 다른 운영 체제를 지원할 수 있습니다. PREFIX=/usr/local make install-systemd 와 같은 설치할 때 make 가 다른 $PREFIX 설정할 수 있습니다.
이 자세한 수동 설정에서 모든 파일을 수동으로 /etc 및 /bin 에 복사합니다. 따라서 소스 파일에서 자리 표시 자 문자열 {{ INSTALL_PREFIX }} 첫 번째 단계로 제거해야합니다.
요컨대 :
먼저, RESTIC에 대한이 공식 백 블레이즈 튜토리얼을 참조하고 새로운 B2 버킷을 만드는 방법에 대한 지침 ( "B2 활성화 된 계정 만들기")을 따르십시오. 일반적으로 B2 암호화가없는 개인 버킷 (Restic은 암호화 클라이언트 측면)과 객체 잠금 기능이없는 경우를 원합니다.
RESTIC이 버킷에 연결할 수 있으려면 B2 설정에서 한 쌍의 keyid와 application 키를 만들려면 원합니다. 해당 버킷에만 읽기 및 쓰기 액세스를 통해 사용할 각 버킷에 대해 별도의 ID와 키를 만드는 것이 좋습니다.
이 파일을 /etc/restic/ 에 넣습니다.
_global.env.sh :이 파일을 B2 keyid & Application Key를 포함한 전역 설정으로 채우십시오.default.env.sh : 이것은 기본 프로필입니다. 버킷 이름, 백업 경로 및 유지 정책으로 작성하십시오. 이 파일 소스 _global.env.sh 는 자체 포함되며 수동 저장 명령을 발행 할 때 쉘에 공급할 수 있습니다. 예를 들어: $ source /etc/restic/default.env.sh
$ restic snapshots # You don't have to supply all parameters like --repo, as they are now in your environment!pw.txt :이 파일에는 저장소를 암호화하는 데 사용되는 Restic 암호 (단일 줄)가 포함되어야합니다. 이것은 새 저장소를 초기화 할 때 곧 사용될 새로운 암호입니다. 이 RESTIC 백업 저장소에 고유해야하며 복원에 필요합니다. B2 로그인 비밀번호를 재사용하지 마십시오. 이것은 달라야합니다. 예를 들어, 128 문자 암호 (모두 한 줄에 있어야 함)를 생성 할 수 있습니다. $ openssl rand -base64 128 | tr -d ' n ' > /etc/restic/pw.txtbackup_exclude.txt : 무시할 파일 패턴 목록. 이렇게하면 백업 크기와 백업 속도가 제대로 수행되면 제대로 처리됩니다! 이제 원격 끝에서 저장소를 초기화해야합니다.
$ sudo -i
# source /etc/restic/default.env.sh
# restic init 이 파일을 /bin 에 넣으십시오.
restic_backup.sh : 백업을 실행하는 방법을 정의하는 스크립트. 의도는이 스크립트를 직접 편집 할 필요가 없지만 *.env.sh 프로파일에서 모든 것을 제어 할 수 있다는 것입니다. RESTIC 지원 파일 제외. 백업에서 제외 할 파일 패턴 경로, 저장 공간, 백업 시간, 네트워크 및 돈을 차지하는 파일을 제외합니다. restic_backup.sh 몇 가지 다른 제외 파일을 허용합니다.
/etc/restic/backup_exclude.txt 글로벌 제외 목록. 설정이 쉬운 경우에만 사용할 수 있습니다. 이것은 _global.env.sh 로 설정됩니다. 다른 프로필에 대해 다른 파일이 필요한 경우이 프로필에서 Envvar RESTIC_BACKUP_EXCLUDE_FILE 무시할 수 있습니다..backup_exclude.txt 백업 경로 당. 예를 들어/mnt/media에 장착 된 USB 디스크가 있는데이 경로가 $RESTIC_BACKUP_PATHS 에 포함되어 있다면 /mnt/media/.backup_exclude.txt 파일을 배치 할 수 있으며 자동으로 선택됩니다. 이것에 대한 좋은 점은 백업 경로가 그들이 배제하는 것에 대해 독립적이라는 것입니다! 이제 루트로 실행하여 백업 자체가 작동하는지 확인하십시오.
# source /etc/restic/default.env.sh
# /bin/restic_backup.sh default.env.sh 는 이미 루트 쉘에 공급되어 있으므로 이제 Snapshost를 나열 할 수 있습니다.
# restic snapshots 또는 Restic Snapshots를 디렉토리 세트 /mnt/restic 에 장착 할 수 있습니다.
# restic mount /mnt/restic
# ls /mnt/restic 모든 OS 설정은 사용하는 작업 스케줄러가 다릅니다. 시연으로서 Linux에서 SystemD로 어떻게이를 수행 할 수 있는지 살펴 보겠습니다.
이 파일을 /etc/systemd/system 에 넣습니다 (makefile은 /usr/lib/systemd/system 에 패키지로 설치됩니다).
[email protected] : 지정된 프로필로 백업 스크립트를 호출하는 서비스. 프로파일은 실행시 @ 이후 값으로 지정됩니다 (아래 참조).[email protected] : 매일 이전 백업을 시작하는 타이머 (여기서 프로필에 대해 동일).OnCalendar 키를 참조하십시오.이제 다음과 같이 타이머를 활성화합니다.
# systemctl enable --now [email protected]다음 백업이
# systemctl list-timers | grep restic그리고 현재 실행중인 백업의 상태를 확인하십시오.
# systemctl status restic-backup또는 수동으로 백업을 시작하십시오.
$ systemctl start restic-backup@default백업이 실행될 때 백업 STDOUT 출력을 따라갈 수 있습니다.
$ journalctl -f -u [email protected] (실행중인 모든 백업을보기 위해 -f 건너 뛰기)
가끔 원격 저장소의 건강 검진을 수행하여 부패하지 않도록하는 것이 좋습니다. 이것은 $ restic check 로 수행 할 수 있습니다.
RESTIC Backup을 오류에 대해 확인하는 RESTIC-Backup.sh에 동반자 스크립트, 서비스 및 타이머 ( *check* )가 있습니다. usr/lib/systemd/system/ and bin/ in repo를보고 해당 위치에 필요한 것을 복사하십시오.
# systemctl enable --now [email protected] 
다른 버킷, 스케줄의 백업 경로를 갖는 다른 백업 작업을하려면 default.env.sh 의 사본을 작성하고 이전 단계에서 default 대신에 정의 된 프로파일 이름을 사용하십시오.
다른 백업을 만들고 사용하려면 다음을 수행 할 수 있습니다.
# cp /etc/restic/default.env.sh /etc/restic/other.env.sh
# vim /etc/restic/other.env.sh # Set backup path, bucket etc.
# source /etc/restic/other.env.sh
# restic_backup.sh 활성화되면 각 백업 후 통계를 CSV 로그 파일에 쓸 것입니다. Global Environment 파일에서 ENV 변수 ( RESTIC_BACKUP_STATS_DIR )를 사용하지 않거나 특정 프로필에서 정의하여 활성화 할 수 있습니다.
스탯 로그 (뿐만 아니라) 데스크탑 알림은 추가적인 restic snapshots 및 restic diff 에서 발생합니다. 이 실행은 알림과 공유됩니다 (추가 실행 없음).

크기가 많이 증가하지 않고 비용이 많이 들지 않도록 백업 위에 올라가는 것이 좋습니다. 그러나 비 사용자 프로세스 (예 : 루트)에서 GUI 알림을 올바르게 만드는 것은 까다로울 수 있습니다.
따라서이 프로젝트는 다음과 같이 작동하는 데스크탑 알림을위한 가벼운 솔루션을 제공합니다. 기본적으로 restic_backup.sh 마지막 백업의 요약 라인을 사용자 소유 파일 (OS의 데스크톱 환경을 실행하는 사용자)에 화재 및 포 게트 방식으로 추가됩니다. 그런 다음 사용자는이 글을 읽고 각 라인을 사용중인 데스크탑 환경으로 새로운 메시지로 전달하는 프로세스가 있습니다.
데스크탑 알림을 설정하려면 :
$ mkfifo /home/user/.cache/notification-queue/etc/restic/default.sh , set : RESTIC_BACKUP_NOTIFICATION_FILE=/home/user/.cache/notification-queue자동 백업이 실패한시기를 알고 싶어서 수정할 수 있습니다. 내 노트북이 메일 서버를 실행하지 않기 때문에 Gmail을 통해 PostFix로 이메일을 보낼 수 있도록 랩톱을 설정하는 솔루션을 사용했습니다. 저기 지침을 따르십시오.
이 파일을 /bin 에 넣으십시오.
systemd-email : SendMail (1)을 사용하여 이메일을 보냅니다. 이 스크립트에는 Gmail 서버를 스팸으로 만들지 않고 내 계정을 차단하기위한 타임 아웃도 있습니다. 이 파일을 /etc/systemd/system/ 에 넣습니다.
[email protected] : SystemD 서비스가 실패 할 때 이메일을 통해 알려주는 서비스. 이 파일의 대상 이메일 주소를 편집하고 설치에 따라 {{ INSTALL_PREFIX }} 교체하거나 제거하십시오. 이제 /usr/lib/systemd/system/[email protected] lib/systemd/system/restic-backup /usr/lib/systemd/system/[email protected] .
OnFailure=status-email-user@%n.service
bin/cron_mail : CRON 작업 실행을위한 래퍼를 사용하여 우편 (1) 명령을 사용하여 작업의 출력을 이메일로 보냅니다. 이는 mail 프로그램이 시스템에서 올바르게 설정되어 이메일을 보내기 위해 올바르게 설정되었다고 가정합니다.
이것을 사용하려면 RESTIC 스크립트 명령을 다음과 같은 CRON 파일로 마무리하십시오.
- @midnight root . /etc/restic/default.sh && restic_backup.sh
+ @midnight root . /etc/restic/default.sh && cron_mail restic_backup.sh노트북의 경우, 휴대 전화의 공유 연결과 같이 계량 된 연결에있을 때 무거운 백업을하지 않는 것이 합리적 일 수 있습니다. 이를 해결하기 위해 연결이 미지급 된 경우에만 성공 상태 인 SystemD 서비스를 설정할 수 있습니다. 그런 다음 백업 서비스 에이 서비스에 간단하게 의존하도록 지시 할 수 있습니다! 미지의 서비스가 미지의 연결을 감지하면 실패한 상태로 이동합니다. 그러면 우리의 백업 서비스는 다른 서비스가 성공 상태에 있어야하므로 실행되지 않습니다.
[email protected] 및 [email protected] 편집하려면 새로운 서비스가 성공 상태에 있도록 요구합니다. Requires=nm-unmetered-connection.service
After=nm-unmetered-connection.service
/etc/systemd/system/ 에 넣습니다.nm-unmetered-connection.service : 연결이 미지급 된 경우에만 성공 상태에있는 서비스./bin 에이 파일을 설치하십시오.nm-unmetered-connection.sh : 계량 된 연결을 감지하고 하나를 감지하면 오류 코드를 반환합니다. 이 스크립트는 Gnome NetworkManager를 설치해야합니다 (시스템에 다른 네트워크 관리자가있는 경우이 스크립트를 수정).# systemctl daemon-reload 팁 : 팁 : MakeFile을 사용하면 첫 번째 단계를 한 번에 수행 할 수 있습니다. 필요에 따라 $PREFIX 설정하거나 / 로 설치하려면 비워 두십시오.
sudo bash -c ' export PREFIX=
make build/usr/lib/systemd/system/nm-unmetered-connection.service
install -m 0644 build/usr/lib/systemd/system/nm-unmetered-connection.service $PREFIX/etc/systemd/system
install -m 0555 bin/nm-unmetered-connection.sh /bin
systemctl daemon-reload
' 편의를 위해로드 프로파일과 RESTIC을 간단하게 실행 하는 restic WHRAPPE 스크립트가 있습니다 (Sudo와 함께 실행하여 환경을 읽어야합니다). 그냥 실행 :
sudo resticw WHATEVER (예 : sudo resticw snapshots ).resticw -p anotherprofile snapshots .--diff-latest 옵션과 같은 restic 위에 엑스트라가 있습니다.유용한 명령 :
| 명령 | 설명 |
|---|---|
resticw snapshots | 백업 스냅 샷을 나열합니다 |
resticw diff <snapshotId-1> <snapshotId-2> | 백업 스냅 샷 사이의 변경 사항을 표시하십시오 |
resticw stats / resticw stats snapshotId ... | 전체 리포 또는 지정된 스냅 샷에 대한 통계 표시 |
resticw mount /mnt/restic | 원격 저장소를 장착하십시오 |
resticw --diff-latest | 최신 스냅 샷 변경 : 최신 2 개의 스냅 샷을 찾은 후 restic diff 실행합니다. |
sudo make install-* 가 설치 한 모든 파일 (스크립트 및 구성) 을 제거 할 수있는 대상이 있습니다. 그냥 실행 :
$ sudo make uninstall 무슨 일이 일어나고 있는지 디버깅하는 가장 좋은 방법은 Bash의 추적 기능으로 restic_backup.sh 스크립트를 실행하는 것입니다. bash -x 로 스크립트를 실행하여 활성화 할 수 있습니다.
$ source /etc/restic/default.env.sh
$ bash -x /bin/restic_backup.sh
백업 스크립트의 작은 부분을 디버깅하려면 관련 코드 부분의 상단과 하단 에이 줄을 삽입하십시오.
set -x
exec 2> /tmp/restic-automatic-backup-scheduler.log
< code to debug >
set +x그런 다음 출력을 검사하십시오
$ less /tmp/restic-automatic-backup-scheduler.log
$ tail -f /tmp/restic-automatic-backup-scheduler.log # or follow output like this.Makefile 변경할 때 실제 설치를 엉망으로 만들지 않으려면 단순히 $PREFIX 로 설치하십시오. $ PREFIX=/tmp/restic-test make install-systemdresticw PARSER 업데이트 : 사용 DOC 업데이트 한 경우 자동 생성 된 파서를 새로 고쳐야합니다. $ pip install doctopt.sh
$ doctopt.sh usr/local/bin/resticw새로운 릴리스를 만들려면 :
$ vi CHANGELOG.md && git commit -am " Update CHANGELOG.md "
$ git tag vX.Y.Z
$ git push && git push --tags