업데이트:

Snapshots 기능을 제공하는 modern backup program

restic

- from Linux, BSD, Mac and Windows
- to many different storage types, including self-hosted and online services
- easily, being a single executable that you can run without a server or complex setup
- effectively, only transferring the parts that actually changed in the files you back up
- securely, by careful use of cryptography in every part of the process
- verifiably, enabling you to make sure that your files can be restored when needed
- freely - restic is entirely free to use and completely open source

Install

$ curl -LO https://github.com/restic/restic/releases/download/v0.12.1/restic_0.12.1_linux_amd64.bz2

# install bzip2
$ sudo yum install bzip2 -y

$ bunzip2 restic_0.12.1_linux_amd64.bz2
$ mv restic_0.12.1_linux_amd64 restic
$ sudo mv restic /usr/local/bin
$ restic

restic is a backup program which allows saving multiple revisions of files and
directories in an encrypted repository stored on different backends.

Usage:
  restic [command]

Available Commands:
  backup        Create a new backup of files and/or directories
  cache         Operate on local cache directories
  cat           Print internal objects to stdout
  check         Check the repository for errors
  copy          Copy snapshots from one repository to another
  diff          Show differences between two snapshots
  dump          Print a backed-up file to stdout
  find          Find a file, a directory or restic IDs
  forget        Remove snapshots from the repository
  generate      Generate manual pages and auto-completion files (bash, fish, zsh)
  help          Help about any command
  init          Initialize a new repository
  key           Manage keys (passwords)
  list          List objects in the repository
  ls            List files in a snapshot
  migrate       Apply migrations
  mount         Mount the repository
  prune         Remove unneeded data from the repository
  rebuild-index Build a new index
  recover       Recover data from the repository
  restore       Extract the data from a snapshot
  self-update   Update the restic binary
  snapshots     List all snapshots
  stats         Scan the repository and show basic statistics
  tag           Modify tags on snapshots
  unlock        Remove locks other processes created
  version       Print version information
....

Backup & Restore

Backup Repository 생성
# Repository 접근을 위한 패드워스 필요, 일단 1111
# -r, --repo repository repository to backup to or restore from (default: $RESTIC_REPOSITORY)
$ restic init -r repo
enter password for new repository:
enter password again:
created restic repository 7f3cfb3e9a at repo

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

# password 파일 생성, -p 옵션으로 지정 
$ echo 1111 > passwd
Backup : snapshots 생성
# Backup 
# restic -r <repository> -p <passwd file> backup <Source>
# -p, --password-file file  file to read the repository password from (default: $RESTIC_PASSWORD_FILE)
$ restic -r repo -p passwd backup /home/cdecl/temp/mvcapp
repository e4ccc49d opened successfully, password is correct
no parent snapshot found, will read all files

Files:          79 new,     0 changed,     0 unmodified
Dirs:           40 new,     0 changed,     0 unmodified
Added to the repo: 4.854 MiB

processed 79 files, 4.811 MiB in 0:00
snapshot 9aff8447 saved

# 파일생성 및 다시백업 
$ touch /home/cdecl/temp/mvcapp/test.txt

$ restic -r repo -p passwd backup /home/cdecl/temp/mvcapp
repository e4ccc49d opened successfully, password is correct
using parent snapshot 9aff8447

Files:           1 new,     0 changed,    79 unmodified
Dirs:            0 new,     4 changed,    36 unmodified
Added to the repo: 7.742 KiB

processed 80 files, 4.811 MiB in 0:00
snapshot f4b94d9b saved

Snapshots 확인
# snapshots 2개 화인 확인
$ restic -r repo -p passwd snapshots
repository e4ccc49d opened successfully, password is correct
ID        Time                 Host        Tags        Paths
------------------------------------------------------------------------------
9aff8447  2021-11-25 15:17:52  centos1                 /home/cdecl/temp/mvcapp
f4b94d9b  2021-11-25 15:22:24  centos1                 /home/cdecl/temp/mvcapp
------------------------------------------------------------------------------
2 snapshots
  • Snapshots 비교
$ restic -r repo -p passwd diff 9aff8447 f4b94d9b
repository e4ccc49d opened successfully, password is correct
comparing snapshot 9aff8447 to f4b94d9b:

+    /home/cdecl/temp/mvcapp/test.txt

Files:           1 new,     0 removed,     0 changed
Dirs:            0 new,     0 removed
Others:          0 new,     0 removed
Data Blobs:      0 new,     0 removed
Tree Blobs:      5 new,     5 removed
  Added:   7.742 KiB
  Removed: 7.456 KiB
Restore : Snapshots 에서 복원
# restic -r <repository> -p <passwd file> restore <snapshots id> -t <Target>
$ restic -r repo -p passwd restore 9aff8447 -t restore-mvcapp
repository e4ccc49d opened successfully, password is correct
restoring <Snapshot 9aff8447 of [/home/cdecl/temp/mvcapp] at 2021-11-25 15:17:52.115925352 
 +0900 KST by cdecl@centos1> to restore-mvcapp

MinIO & RClone Backend 지원

Local, SFTP, REST Server, Amazon S3, Minio Server, Microsoft Azure Blob Storage, 
Google Cloud Storage, Other Services via rclone 등 지원
MinIO Repository 만들기
$ export AWS_ACCESS_KEY_ID=key
$ export AWS_SECRET_ACCESS_KEY=passwd

$  restic init -r s3:http://minio.server:9000/restic
enter password for new repository:
enter password again:
created restic repository 65a27250da at s3:http://minio.server:9000/restic

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.


# Backup
$ restic -r s3:http://minio.server:9000/restic -p passwd backup /home/cdecl/temp/mvcapp

# snapshots
$ restic -r s3:http://minio.server:9000/restic -p passwd snapshots
repository 65a27250 opened successfully, password is correct
ID        Time                 Host        Tags        Paths
------------------------------------------------------------------------------
73d37fbd  2021-11-25 15:37:34  centos1                 /home/cdecl/temp/mvcapp
------------------------------------------------------------------------------
1 snapshots
RClone Backend 로 사용
$ rclone config show
[infradb]
type = s3
env_auth = false
access_key_id = key
secret_access_key = passwd
region = us-east-1
endpoint = http://minio.server:9000

# rclone config 사용 respository 만들기 
$ restic init -r rclone:infradb:restic
enter password for new repository:
enter password again:
created restic repository ce850667c9 at rclone:infradb:restic

Please note that knowledge of your password is required to access
the repository. Losing your password means that your data is
irrecoverably lost.

# Backup
$ restic -r rclone:infradb:restic -p passwd backup /home/cdecl/temp/mvcapp

# snapshots
$ restic -r rclone:infradb:restic -p passwd snapshots

Snapshots 관리

$ restic -r rclone:infradb:restic -p passwd snapshots
repository ce850667 opened successfully, password is correct
ID        Time                 Host        Tags        Paths
------------------------------------------------------------------------------
a3737738  2021-11-25 15:44:05  centos1                 /home/cdecl/temp/mvcapp
00f16d70  2021-11-25 15:44:50  centos1                 /home/cdecl/temp/mvcapp
0e83568a  2021-11-25 15:44:51  centos1                 /home/cdecl/temp/mvcapp
4041e3ca  2021-11-25 15:44:53  centos1                 /home/cdecl/temp/mvcapp
eb1e56c7  2021-11-25 15:44:54  centos1                 /home/cdecl/temp/mvcapp
d81b3d2a  2021-11-25 15:44:55  centos1                 /home/cdecl/temp/mvcapp
------------------------------------------------------------------------------
6 snapshots

# snapshots 1개 지우기
$ restic -r rclone:infradb:restic -p passwd forget d81b3d2a
repository ce850667 opened successfully, password is correct
[0:00] 100.00%  1 / 1 files deleted

# 스냅샷의 파일에서 참조한 데이터는 여전히 저장소에 저장
# 참조되지 않은 데이터를 정리하려면 prune 명령 실행
$ restic -r rclone:infradb:restic -p passwd prune
repository ce850667 opened successfully, password is correct
loading indexes...
loading all snapshots...
finding data that is still in use for 5 snapshots
[0:00] 100.00%  5 / 5 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00%  9 / 9 packs processed

to repack:            0 blobs / 0 B
this removes          0 blobs / 0 B
to delete:            2 blobs / 1004 B
total prune:          2 blobs / 1004 B
remaining:          125 blobs / 4.862 MiB
unused size after prune: 0 B (0.00% of remaining size)

rebuilding index
[0:00] 100.00%  8 / 8 packs processed
deleting obsolete index files
[0:00] 100.00%  6 / 6 files deleted
removing 1 old packs
[0:00] 100.00%  1 / 1 files deleted
done

# 최근 1개만 놔두고 snapshots 삭제 및 prune
$ restic -r rclone:infradb:restic -p passwd forget --keep-last 1 --prune
repository ce850667 opened successfully, password is correct
Applying Policy: keep 1 latest snapshots
keep 1 snapshots:
ID        Time                 Host        Tags        Reasons        Paths
---------------------------------------------------------------------------------------------
eb1e56c7  2021-11-25 15:44:54  centos1                 last snapshot  /home/cdecl/temp/mvcapp
---------------------------------------------------------------------------------------------
1 snapshots

remove 4 snapshots:
ID        Time                 Host        Tags        Paths
------------------------------------------------------------------------------
a3737738  2021-11-25 15:44:05  centos1                 /home/cdecl/temp/mvcapp
00f16d70  2021-11-25 15:44:50  centos1                 /home/cdecl/temp/mvcapp
0e83568a  2021-11-25 15:44:51  centos1                 /home/cdecl/temp/mvcapp
4041e3ca  2021-11-25 15:44:53  centos1                 /home/cdecl/temp/mvcapp
------------------------------------------------------------------------------
4 snapshots

[0:00] 100.00%  4 / 4 files deleted
4 snapshots have been removed, running prune
loading indexes...
loading all snapshots...
finding data that is still in use for 1 snapshots
[0:00] 100.00%  1 / 1 snapshots
searching used packs...
collecting packs for deletion and repacking
[0:00] 100.00%  8 / 8 packs processed

to repack:           39 blobs / 47.305 KiB
this removes          2 blobs / 1007 B
to delete:            6 blobs / 2.950 KiB
total prune:          8 blobs / 3.934 KiB
remaining:          117 blobs / 4.858 MiB
unused size after prune: 0 B (0.00% of remaining size)

repacking packs
[0:00] 100.00%  2 / 2 packs repacked
rebuilding index
[0:00] 100.00%  5 / 5 packs processed
deleting obsolete index files
[0:00] 100.00%  1 / 1 files deleted
removing 5 old packs
[0:00] 100.00%  5 / 5 files deleted
done

# snapshots 확인
$ restic -r rclone:infradb:restic -p passwd snapshots
repository ce850667 opened successfully, password is correct
ID        Time                 Host        Tags        Paths
------------------------------------------------------------------------------
eb1e56c7  2021-11-25 15:44:54  centos1                 /home/cdecl/temp/mvcapp
------------------------------------------------------------------------------
1 snapshots
  • forget 주요 인수
--keep-last n never delete the n last (most recent) snapshots
--keep-hourly n for the last n hours in which a snapshot was made, keep only the last snapshot for each hour.
--keep-daily n for the last n days which have one or more snapshots, only keep the last one for that day.
--keep-weekly n for the last n weeks which have one or more snapshots, only keep the last one for that week.
--keep-monthly n for the last n months which have one or more snapshots, only keep the last one for that month.
--keep-yearly n for the last n years which have one or more snapshots, only keep the last one for that year.
--keep-tag keep all snapshots which have all tags specified by this option (can be specified multiple times).

댓글남기기