存储受限时的文件加密

存储受限时的文件加密

假设:在 Linux 服务器上,我们的可用空间有限。任务是创建文件夹的存档(例如 /var/www),对其进行加密并上传到远程位置,同时保留原始未加密文件。对于相对较小的文件,一切都很顺利,但是一旦存档文件的大小达到可用空间的 50% 以上,就没有足够的空间来放置加密文件。上传是通过提供商的 SDK 完成的,无法将 gpg-agent 的输出直接传输到上传。以上所有操作均由自写 bash 脚本完成。

因此,请逐步采取行动(带有示例数字):

  1. 例如,/opt/ 中的可用存储空间为 100GB
  2. 将 /var/www 压缩为 /​​opt/www.tar.gz(文件大小为 60GB)
  3. 以某种方式生成 /opt/www.tar.gz.gpg 文件(需要 60GB 或更多)
  4. 使用 CLI 工具上传 /opt/www.tar.gz.gpg
  5. 完成以上所有操作后,应该剩下文件 /opt/www.tar.gz

这个问题有解决办法吗?

答案1

如果您可以暂时停止服务器更改 /var/www,则可以通过管道创建 gpg:

tar cf - /var/www | gpg -e >/opt/www.tar.gz.gpg 
upload /opt/www.tar.gz.gpg
rm /opt/www.tar.gz.gpg 

然后创建本地副本

tar zcf /opt/www.tar.gz /var/www

无论如何,对实时系统进行 tar 处理都不是完美的,所以为什么不接受 2 个略有不同的快照呢。


这是另一种解决方案,它将 gpg 上传拆分成单独的较小文件。然后,您可以在服务器上将它们连接起来,以备不时之需。将bs和更改count为略小于您可用的可用空间,或任何方便的较小尺寸。

tar zcf /opt/www.tar.gz /var/www
gpg -e </opt/www.tar.gz |
( let i=1
  while dd iflag=fullblock bs=10240 count=100 >/opt/part.$i
        [ -s /opt/part.$i ]
  do   echo upload /opt/part.$i
       rm /opt/part.$i
       let i=i+1
  done
)

我进行了如下测试并检查结果正常:

tar czf /tmp/tar.gz ~/bin/
>/tmp/b
gpg --compress-level=0 -e </tmp/tar.gz |
( let i=1
  while dd iflag=fullblock bs=10240 count=100 >/tmp/a$i
        [ -s /tmp/a$i ]
  do   echo upload /tmp/a$i
       cat /tmp/a$i >>/tmp/b
       rm /tmp/a$i
       let i=i+1
  done
)
gpg -d </tmp/b >/tmp/c
cmp /tmp/c /tmp/tar.gz 

相关内容