使用Perl进行简单安全的备份

最近我在寻找一个备份解决方案,最终自己动手制作了一个。结果是 Stasis,这是一个使用 tar
和 gpg
压缩和加密文件的Perl程序。
工作原理
Stasis会接受文件和目录路径列表,并使用tar
构建一个临时的压缩gzip存档。然后,它使用AES 256位加密临时存档,将其保存到新位置,并删除临时存档。Stasis支持使用密码短语或GPG密钥进行备份。
示例
假设我想备份主家目录中的所有文件。我会创建一个名为files_to_backup.txt
的文本文件,其中包含
/home/dfarrell/Documents
/home/dfarrell/Downloads
/home/dfarrell/Music
/home/dfarrell/Pictures
/home/dfarrell/Videos
我可以将这些目录和文件保存到Dropbox
$ stasis --destination ~/Dropbox --files files_to_backup.txt --passphrase mysecretkey
或者更简洁地
$ stasis -de ~/Dropbox -f files_to_backup.txt --passphrase mysecretkey
使用passfile而不是密码短语
$ stasis -de ~/Dropbox -f files_to_backup.txt --passfile /path/to/passfile
使用“referrer”参数提供GPG密钥而不是密码短语
$ stasis -de ~/Dropbox -f files_to_backup.txt -r keyname@example.com
忽略匹配.stasisignore
中模式的文件。如果我想忽略某些类型的文件,例如OSX的.DS_Store
索引文件,或者更广泛地说,所有隐藏文件:.*
,这将很有用。
$ stasis -de ~/Dropbox -f files_to_backup.txt -r keyname@example.com -i .stasisignore
限制备份数量
Stasis接受--limit
选项,只保留最近的x个备份
$ stasis -de ~/Dropbox -f files_to_backup.txt -r mygpgkey@email.com --limit 4
它和--days
选项配合使用非常好,这个选项告诉stasis只在x天内没有创建新的存档时才创建新的存档。因此,为了保留一个月的周存档,我可以这样做
$ stasis -de ~/Dropbox -f files_to_backup.txt -r mygpgkey@email.com --limit 4 --days 7
现在stasis将只保留最后4个存档,并且每周只创建一个新存档。我的个人笔记本电脑并不总是开启,所以我有一个每30分钟检查一次的cron作业
*/30 * * * * stasis -de ~/Dropbox -f files_to_backup.txt -r mygpgkey@email.com -l 4 -da 7
恢复备份
首先用gpg
解密备份
$ gpg -d /path/to/backup.tar.gz.gpg > /path/to/output.tar.gz
gpg: AES256 encrypted data
gpg: encrypted with 1 passphrase
GPG将要求输入密码短语或GPG密钥密码来解锁数据。然后你可以使用tar
检查解密存档的文件
$ tar --list -f /path/to/output.tar.gz
或者
$ tar -zvtf /path/to/output.tar.gz
解压存档
$ tar -zvxf /path/to/output.tar.gz
Stasis的缺点
Stasis符合我的需求,但它有几个缺点,可能不适合你。首先,每次运行时它都会创建一个独立的加密存档,而不是增量备份。尽管这很简单,但它也浪费了空间,因此如果你打算保留许多备份副本,请考虑其影响。因为Stasis创建它存档的数据的临时副本,它还需要足够的磁盘空间来创建两个压缩存档。
由于Stasis每次都会创建一个新的存档,备份可能是一个资源密集型的过程。在我的超薄笔记本上,Stasis大约需要20秒来创建一个新的400MB新存档。如果你打算存档大量数据,你可能需要另一个解决方案。
存档名称是固定的,不应更改。Stasis使用ISO 8601日期时间创建加密存档的文件名,如:stasis-0000-00-00T00:00:00.tar.gz.gpg
。为了检测备份目录中的以前备份文件,Stasis会在备份目录中查找匹配此模式的文件。当你使用--limit
选项时,这一点很重要。
Stasis速查表
stasis [options]
Options:
--destination -de destination directory to save the encrypted archive to
--days -da only create an archive if one doesn't exist within this many days (optional)
--files -f filepath to a text file of filepaths to backup
--ignore -i filepath to a text file of glob patterns to ignore (optional)
--limit -l limit number of stasis backups to keep in destination directory (optional)
--passphrase passphrase to use
--passfile filepath to a textfile containing the password to use
--referrer -r name of the gpg key to use (instead of a passphrase or passfile)
--temp -t temp directory path, uses /tmp by default
--verbose -v verbose, print progress statements (optional)
--help -h print this documentation (optional)
更新:添加了关于--days选项的新部分,删除了脚本部分 2016-04-02
这篇文章最初发布在PerlTricks.com。
标签
反馈
这篇文章有什么问题吗?请通过在GitHub上创建问题或拉取请求来帮助我们。