使用 rsync 备份文件

备份 点文件 的习俗自古有之,arch 还为此单独开了一个 页面
我感觉比较好用的是 https://github.com/twpayne/chezmoi
然而, chezmoi 不支持用户路径以外的文件,其他工具我也懒得用了,索性用 rsync 自己配一个

touch ~/.rsync

写入以下内容:

# 备份的命令是 rsync --files-from=.rsync -raHXi / DESTINATION
/etc/oh-my-zsh/
/home/tea/.ssh/

上述命令中参数的含义分别为:

-r:递归处理文件夹
-a :归档模式(保留文件权限、保存文件时间信息、保留文件属组信息、保持文件属主信息、保持设备文件信息、保留软链接)
-H:保留硬链接
-X:保留拓展属性
-i:输出一个摘要信息

可以将 DESTINATION 设置到一个 git 路径下,同步成一个私有仓库即可。
也可以用 tar 压缩成一个压缩包,这样还能保留文件的权限信息。当然,使用 git-cache-meta
也可以保留权限信息

缺点是不同系统之间只能自己建分支维护,但是胜在简单

Note:
如果你备份了 $HOME 路径之外的文件,比如 /etc,那么由于备份时会保留权限,所以你在备份时需要 root 权限
另一个问题是 rsync 不支持路径替换,比如用 ~ 代替 $HOME 是不允许的,当然,变量替换也是不允许的

定时运行备份

根据 使用 Systemd Timer 调度任务 可以创建三个文件来用来创建定时运行的备份

三个文件分别为:

/bin/dot_backup.sh

#! /bin/bash
rsync --files-from=/home/your_name/.rsync -raHXi / /data/sec_data/Documents/backup/fedora
exit 0

/etc/systemd/system/dot_backup.service

[Unit]
Description=A job backup dotfiles

[Service]
Type=simple
ExecStart=/bin/dot_backup.sh

[Install]
WantedBy=default.target

/etc/systemd/system/dot_backup.timer

[Unit]
Description=A job timer backup dotfiles
RefuseManualStart=no
RefuseManualStop=no

[Timer]
Persistent=true
# 一天运行一次
OnCalendar=*-*-* 00:00:00
Unit=dot_backup.service

[Install]
WantedBy=timers.target

根据以上内容,实际上还可以创建一个任务用来定期将其打包成 tar 或者进行增量备份并上传,但是我现在还没有更新这部分内容的计划,就先搁置了。

使用 tar 对备份进行打包

上面已经将文件备份到指定文件夹,但是如果直接使用 git 上传上去的话,一方面是会丢失权限,另一方面也不够安全。

打包的命令如下:

XZ_DEFAULTS="-T 0"
tar -cpJ 1 | xz -9e  > 1.tar.xz

上面第一行是让 xz 自动使用多线程,下面先使用 tar 将文件夹压缩成 tar 再通道到 xz 进行最高限度的压缩

加密

一般来说

  • 使用公钥对文件进行签名是最可靠的方法,但是一旦私钥丢失就没办法将文件找回了,所以这里不再使用公钥签名
  • 最简单的字节反转的方式对文件加密,这种方式虽然加密程度不高,但是但是胜在简单、速度快,而且很难想到有人用这种方式加密
  • 另一种是使用 openssl 的密码加密。这里使用这种方式
openssl enc -e -aes256 -in 1.tar.xz -out 2.tar.xz -k 12345

需要解密的时候只需要将 -e 换成 -d 就行了

加密要求不高的话还可以使用 dd conv=swab 进行字节反转,这种方式快速而且简单

后续

这里我又做了一个测试:

压缩文件为 mp4,653MB(684558471)

压缩方式 加密方式 总时间 压缩后的大小 压缩比
ztsd -T0 -18 openssl 5:35.85 680484912 0.994
zstd -T0 -18 gpg 5:43.77 681187559 0.995
lz4 openssl 5:34.70 680534560 0.994
lz4 -9 openssl 5:49.34 680532256 0.994
lz4 -9 gpg 6:09.26 681193647 0.995

因此,以后备份方式改成 zstd+openssl ,如此,完整的备份命令如下:

tar -cpJ Music | zstd -c -T0 -18 | openssl enc -e -aes256 -k 12345 -pbkdf2 > Music.tar.zstd.secret

gpg 对称加密的方式如下:

tar -cpJ '1.mp4' | zstd -c -T0 -18 | gpg -c --cipher-algo AES256 --output /tmp/1.tar.zstd.gpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容