我正在创建一个备份脚本,该脚本使用tar
,用 加密它gpg
,然后将输出发送ssh
到异地主机。我现在想知道天气如何以及如何验证所有数据是否已成功传输。由于备份大小为多个 GB,因此连接很有可能在中途断开。由于ssh
使用,TCP
我并不担心某些数据包被丢弃,但是当连接断开 20 秒或更长时间时怎么办?
这是我正在使用的命令:
tar \
--create \
... \
--listed-incremental="${metadata_file}" \
--file - \
"${FILES_TO_BACKUP[@]}" |
gpg --encrypt ... --output - |
ssh -T ${REMOTE_HOST} "cat > ${output_file}"
备份后,我还复制了元数据文件,我可以使用校验和来验证。但是备份本身呢?
有可能
- 将备份写入本地存储
- 复制到远程
- 验证校验和
- rm 本地备份
然而,由于我本地没有那么多的存储空间,所以如果可能的话我不想这样做。
我使用的是 Linux,安装的是 Bash >4.0。
答案1
您不必在本地保存文件来计算其校验和。
这个想法是将您选择的校验和实用程序添加到管道之后gpg
和之前ssh
,以在本地计算校验和而不将其保存到本地文件。为了避免将校验和发送给ssh
您,您可以使用tee
。
这个想法是管道看起来像这样:
tar ... | gpg ... | tee >(checksum-utility > output-file) | ssh ...
因为output-file
您可以使用真实文件或者也可以/dev/tty
。
例如,参见帖子 同时对输入进行校验和管道传输。