Borg 的优势是
来自:https://blog.csdn.net/allway2/article/details/107449842
wget https://github.com/borgbackup/borg/releases/download/1.2.4/borg-linux64
mv ./borg-linux64 /usr/bin/borg
ln -s /usr/bin/borg /usr/bin/borgfs
现在有 2 个目录,要把source
里面的数据备份到backup
里面,原始数据如下:
ls -ltr source/ backup/
backup/:
总用量 0
source/:
总用量 573056
-rw-rwxr-- 1 admin admin 545468729 5月 8 16:13 Smi1.fa
-rw-rwxr-- 1 admin admin 41336490 5月 8 16:14 Smi1.gff
borg init --encryption=none backup
# borg init --encryption=repokey /home/karthick/borg/backup
# 初始化后目录结果如下,这里应该是索引文件和效验文件
ls -ltra backup/
# 总用量 60
# drwxrwxr-x 4 admin admin 34 5月 8 16:14 ..
# -rw------- 1 admin admin 73 5月 8 16:26 README
# -rw------- 1 admin admin 209 5月 8 16:26 config
# drwx------ 3 admin admin 15 5月 8 16:26 data
# -rw------- 1 admin admin 70 5月 8 16:26 hints.1
# -rw------- 1 admin admin 190 5月 8 16:26 integrity.1
# -rw------- 1 admin admin 41258 5月 8 16:26 index.1
当前备份的存档命令为2023-05-08-1。每天备份时,可以以日期为存档命令,方便回溯。
# 默认情况下,borg 使用lz4压缩算法,lz4压缩算法速度非常快,压缩比低
# --compression zstd,N N 为 1-22,数值越大,压缩比越大
# 软链接会被作为软链接存储,不会存储其链接的源文件
# 这里遇到一个很有意思的事情:我的一个备份里面存在软连接,mount备份的存档后,发现
# 我在源文件里面怎么改,这里就怎么改,实时更新,还以为是 borg 出了 bug。后来才发现
# 备份的是软连接。
# 删除掉的文件在后面的存档里也会被删除
borg create --stats --progress backup::2023-05-08-1 source/
# borg create --stats --compression zstd,10 --progress backup::2023-05-08-2 source/
borg info backup::2023-05-08-1
输出如下
Archive name: 2023-05-08-1
Archive fingerprint: 9a368357c37399a5d3c784829471b7eb4bb0596b2011de74d444363581f6c868
Time (start): Mon, 2023-05-08 16:42:34
Time (end): Mon, 2023-05-08 16:42:37
Duration: 2.49 seconds
Number of files: 2
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
This archive: 586.81 MB 315.08 MB 315.08 MB
All archives: 586.81 MB 315.08 MB 315.09 MB
Unique chunks Total chunks
Chunk index: 225 225
------------------------------------------------------------------------------
borg list backup
# 2023-05-08-1 Mon, 2023-05-08 16:42:34 [9a368357c37399a5d3c784829471b7
# 列出存档内容
borg list backup::2023-05-08-1
# drwxrwxr-x admin admin 0 Mon, 2023-05-08 16:14:30 source
# -rw-rwxr-- admin admin 545468729 Mon, 2023-05-08 16:13:41 source/Smi1.fa
# -rw-rwxr-- admin admin 41336490 Mon, 2023-05-08 16:14:05 source/Smi1.gff
# 列出存档内容,同时排除特定文件或目录
borg list backup::2023-05-08-1 --exclude Smi1
head -n 10000 source/Smi1.fa >source/NewSmi1.fa
borg create --stats --progress backup::2023-05-08-2 source/
输出如下,总大小没有变。相同内容的文件,没有增加额外存储。
------------------------------------------------------------------------------
Repository: /home/admin/tes/backup
Archive name: 2023-05-08-2
Archive fingerprint: 25d7942b01376dad1f84f3efef276d30c680be5d83e76626427f3794143345a5
Time (start): Mon, 2023-05-08 19:24:59
Time (end): Mon, 2023-05-08 19:25:01
Duration: 1.13 seconds
Number of files: 3
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
This archive: 587.32 MB 315.36 MB 284.22 kB
All archives: 1.17 GB 630.44 MB 315.39 MB
Unique chunks Total chunks
Chunk index: 228 451
------------------------------------------------------------------------------
给之前文件增加一些内容
cat source/NewSmi1.fa >>source/Smi1.fa
borg create --stats --progress backup::2023-05-08-3 source/
输出如下,新的备份存档只包含文件新增的部分内容,总的存档大小略微增加。
------------------------------------------------------------------------------
Repository: /home/admin/tes/backup
Archive name: 2023-05-08-3
Archive fingerprint: 887d645b3e80779431b564feab24e1ee5a9e1184780c291a5b11134da8d368f1
Time (start): Mon, 2023-05-08 19:27:41
Time (end): Mon, 2023-05-08 19:27:42
Duration: 1.12 seconds
Number of files: 3
Utilization of max. archive size: 0%
------------------------------------------------------------------------------
Original size Compressed size Deduplicated size
This archive: 587.83 MB 315.65 MB 1.75 MB
All archives: 1.76 GB 946.09 MB 317.15 MB
Unique chunks Total chunks
Chunk index: 231 677
------------------------------------------------------------------------------
再次查看每个档案下备份的文件
# 每个档案下的存储都是当时备份时的全文件,可以看到档案3里面Smi1.fa的大小比档案1里面要大一些
borg list backup::2023-05-08-3
# drwxrwxr-x admin admin 0 Mon, 2023-05-08 19:23:01 source
# -rw-rwxr-- admin admin 545978689 Mon, 2023-05-08 19:27:39 source/Smi1.fa
# -rw-rwxr-- admin admin 41336490 Mon, 2023-05-08 16:14:05 source/Smi1.gff
# -rw-rw-r-- admin admin 509960 Mon, 2023-05-08 19:23:01 source/NewSmi1.fa
borg list backup::2023-05-08-1
# drwxrwxr-x admin admin 0 Mon, 2023-05-08 16:14:30 source
# -rw-rwxr-- admin admin 545468729 Mon, 2023-05-08 16:13:41 source/Smi1.fa
# -rw-rwxr-- admin admin 41336490 Mon, 2023-05-08 16:14:05 source/Smi1.gff
# 直接使用diff比较2个档案,差异看的更清楚
borg diff backup::2023-05-08-1 2023-05-08-3
# [ctime: Mon, 2023-05-08 16:14:30 -> Mon, 2023-05-08 19:23:01] [mtime: Mon, 2023-05-08 16:14:30 -> Mon, 2023-05-08 19:23:01] source
# +3.2 MB -2.7 MB [ctime: Mon, 2023-05-08 16:14:30 -> Mon, 2023-05-08 19:27:39] [mtime: Mon, 2023-05-08 16:13:41 -> Mon, 2023-05-08 19:27:39] source/Smi1.fa
# added 509.96 kB source/NewSmi1.fa
提取时只会提取到当前目录,这一点需要注意。
# 新建一个要恢复数据到的目录
mkdir -p recover_dir1
# 切换目录
cd recover_dir1/
# 恢复存档backup::2023-05-08-1,注意路径的变化
borg extract -v --list ../backup::2023-05-08-1
source
source/Smi1.fa
source/Smi1.gff
# 恢复时是恢复的整个文件夹
ls
source
# 查看下时间和大小
ls -l source/
# 总用量 573056
# -rw-rwxr-- 1 admin admin 545468729 5月 8 16:13 Smi1.fa
# -rw-rwxr-- 1 admin admin 41336490 5月 8 16:14 Smi1.gff
删除早期档案不影响当前数据的完整恢复。
cd ../
borg delete backup::2023-05-08-1
# 新建一个要恢复数据到的目录
mkdir -p recover_dir2
# 切换目录
cd recover_dir2
# 恢复存档backup::2023-05-08-3,注意路径的变化
borg extract -v --list ../backup::2023-05-08-3
# 查看文件大小
ls -ltsr source/
总用量 574052
40368 -rw-rwxr-- 1 admin admin 41336490 5月 8 16:14 Smi1.gff
500 -rw-rw-r-- 1 admin admin 509960 5月 8 19:23 NewSmi1.fa
533184 -rw-rwxr-- 1 admin admin 545978689 5月 8 19:27 Smi1.fa
# 测试查看文件是否一致,输出为空,表示完全一样
diff source/Smi1.fa ../source/Smi1.fa
cd ../
mkdir /tmp/backup3
borg mount backup::2023-05-08-3 /tmp/backup3
ls -ltrs /tmp/backup3/source/
# 总用量 574049
# 40368 -rw-rwxr-- 1 admin admin 41336490 5月 8 16:14 Smi1.gff
# 499 -rw-rw-r-- 1 admin admin 509960 5月 8 19:23 NewSmi1.fa
# 533183 -rw-rwxr-- 1 admin admin 545978689 5月 8 19:27 Smi1.fa
可以直接拷贝需要的文件出来
# 卸载备份的文件
borg umount /tmp/backup3
# 如果挂载时出现下面的错误,请执行 export 的三句话设置本地语言
# File "borg/archiver.py", line 183, in wrapper
# File "borg/archiver.py", line 1371, in _do_mount
# File "borg/fuse.py", line 545, in mount
# File "borg/fuse.py", line 278, in _create_filesystem
# File "borg/fuse.py", line 355, in _process_archive
# File "os.py", line 812, in fsencode
# UnicodeEncodeError: 'ascii' codec can't encode characters in position 25-29: ordinal not in range(128)
export LC_ALL=en_US.UTF-8
export LANG=en_US.UTF-8
export LANGUAGE=en_US.UTF-8
定期清空一部分副本以减少空间使用
# --keep-daily 7 means to keep the latest backup on each day, up to 7 most recent days with backups (days without backups do not count). The rules are applied from secondly to yearly, and backups selected by previous rules do not count towards those of later rules.
# 每周的存档保留最新的,最多保存最近 2 个周
borg prune -v --list --keep-weekly=2 backup/
# 每周的存档保留最新的,最多保存最近 6 个 月
borg prune -v --list --keep-monthly=6 backup/
# 指定对某些特定名字的存档应用此规则
# borg prune -v --list --keep-weekly=2 --prefix='{archive name}' /home/karthick/borg/backup/
不知道命令的操作会有什么后面时,加上--dry-run
查看会运行哪些操作。