我需要加密一个大文件,但我的硬盘驱动器上没有足够的存储空间来同时存储该文件及其加密版本。
似乎可以在加密的同时逐渐删除文件,以便使用的空间或多或少保持不变。
如果我用以下方式加密我的文件
openssl aes-256-cbc -in myfile -out myfile.aes-256-cbc
您建议如何逐步删除原始文件myfile
和加密文件?
答案1
在 Linux 上,你可以使用fallocate
在文件中“打洞”,即扔掉一些数据块。它需要 ext4、XFS 或 btrfs 文件系统(或 tmpfs)。
$ perl -e 'print "a" x 16384' > foo
$ ls -sl foo
16 -rw-r--r-- 1 foo foo 16384 Oct 18 13:12 foo
$ fallocate -p -o0 -l 8192 foo
$ ls -sl foo
8 -rw-r--r-- 1 foo foo 16384 Oct 18 13:12 foo
其他系统可能有也可能没有类似的功能,但我认为与此相关的唯一可移植系统调用是posix_fallocate
和truncate
这并没有真正帮助您,因为第一个只能为文件保留新空间,而第二个只允许截断文件从最后。
在任何情况下,您都需要安装一个程序,例如将输入文件通过管道传输到openssl
并丢弃文件中已读取的部分(但不是其他部分)。用任何编程语言实现都不难,但也不是很安全,因为崩溃可能会给你留下无法使用的部分。
我不知道是否有任何全盘加密实用程序可以就地加密分区。
另外,相关:将大文件相互附加而不复制它们