有没有办法加密已挂载的文件系统以进行异地备份?

Jay*_*yen 1 linux encryption backup ecryptfs encfs

我想有效地备份我的硬盘驱动器的加密副本。我目前正在使用 rsync 来备份未加密的副本,我发现它非常有效。

我查看了 duplicity 和 rsynccrypto,但 duplicity 进行增量备份,而 rsyncrypto 为每个加密文件使用唯一的密钥。Duplicity 内存不足,我需要在某处备份 rsynccrypto 密钥。我发现这些空间效率低下,所以我不想使用它们。

我认为如果我可以环回/绑定 mount / 并备份加密的挂载点,那么效果会很好。我查看了 eCryptfs 和 EncFS,但它们似乎都只挂载加密目录,而不允许对挂载的目录进行加密。它们都支持加密文件名,这也是一个理想的功能。

如果我可以拥有我的文件系统的加密版本,那么我现有的 rsync-backup 将有效地工作。当变化很小时,只需要加密文件名。

有没有办法将挂载的目录加密为另一个目录?还有其他建议吗?

Jay*_*yen 5

唉,我花了太多的时间发布这个问题之前,寻找一个答案,现在我找到--reverse选项,encfs我想要做什么。这是我的备份脚本:

#!/bin/bash
set -e
set -u
CP="/usr/bin/sudo /usr/bin/rsync -aAhHPxX --delete-excluded --del --ignore-errors --rsync-path=\"rsync --fake-super\" $*"
SOURCE='/'
MOUNTPOINT='/tmp/slash'
DEST='backupuser@backuphost:backupdir'

mkdir -p $MOUNTPOINT
mount -t fuse.encfs | grep "^encfs on $MOUNTPOINT type fuse.encfs" || /usr/bin/sudo /usr/bin/encfs --reverse $SOURCE $MOUNTPOINT

#don't cross mount points
EXCLUDE_LIST=$(encfsctl encode $SOURCE `/usr/bin/cut -d\  -f 2 /proc/mounts | /bin/grep -v ^$SOURCE$`)
EXCLUDE=''
for EXCLUDE_ITEM in ${EXCLUDE_LIST} ; do
  EXCLUDE="${EXCLUDE} --exclude ${EXCLUDE_ITEM}"
done

/usr/bin/rsync -haxHAXPR $SOURCE/.encfs* $DEST/../
#eval for the quotes in the CP command
eval $CP $EXCLUDE $MOUNTPOINT/ $DEST/
Run Code Online (Sandbox Code Playgroud)

并恢复文件:

CP='/usr/bin/sudo /usr/bin/rsync -haxHAXPR --no-implied-dirs --rsync-path="rsync --fake-super"';
SOURCE='/';
DEST='backupuser@backuphost:backupdir';
MOUNTPOINT='/tmp/slash';
ENCRYPTED_NAME=$(encfsctl encode $SOURCE $*);
eval $CP $DEST/./$ENCRYPTED_NAME $MOUNTPOINT
Run Code Online (Sandbox Code Playgroud)