如何对Encfs加密的PostgreSQL 9.6.8不可见数据目录执行物理备份?
针对你遇到的Encfs加密PostgreSQL数据目录后无法用tar/rsync备份的问题,我整理了几个可行的方案,结合你的环境(PostgreSQL 9.6.8 + CentOS 6.6)给你参考:
方案一:直接备份Encfs加密源目录(最推荐)
其实Encfs的核心是把加密后的实际文件存在/pgsql/postgredb/data_enc/,挂载后的data只是解密后的虚拟视图。直接备份这个加密源目录,不仅避开了挂载目录的权限/兼容性问题,还能减少备份过程中可能的文件损坏风险:
- 确保PostgreSQL数据一致性:
- 如果测试环境可以停服:执行停止命令
service postgresql-9.6 stop - 如果不能停服:先以超级用户身份进入PostgreSQL执行备份起点标记
pg_start_backup('encfs_backup_session');
- 如果测试环境可以停服:执行停止命令
- 执行备份:
用tar或者rsync直接备份加密源目录即可:# tar压缩备份 tar -czf pgsql_encrypted_backup.tar.gz /pgsql/postgredb/data_enc/ # 或者用rsync同步到备份存储 rsync -avz /pgsql/postgredb/data_enc/ /your/backup/path/pgsql_enc_backup/ - 收尾一致性操作:
如果之前用了pg_start_backup,记得回到PostgreSQL执行:pg_stop_backup(); - 恢复方式:
把备份的data_enc目录还原到原路径,再用你原来的Encfs命令挂载即可:encfs -o nonempty /pgsql/postgredb/data_enc/ /pgsql/postgredb/data
方案二:修复权限后备份挂载的解密目录
如果你确实需要备份解密后的目录,大概率是tar/rsync无法访问挂载目录的权限问题导致的,按以下步骤调整:
- 检查并调整挂载权限:
先卸载当前挂载点,然后重新挂载时添加权限允许备份用户访问:# 卸载挂载点 fusermount -u /pgsql/postgredb/data # 先修改fuse配置允许跨用户访问(CentOS 6需要) sed -i 's/#user_allow_other/user_allow_other/' /etc/fuse.conf service fuse restart # 重新挂载,添加allow_other选项让其他用户能访问挂载目录 encfs -o nonempty,allow_other /pgsql/postgredb/data_enc/ /pgsql/postgredb/data - 验证权限:
执行ls -l /pgsql/postgredb/data,确保执行备份的用户(比如root或postgres)能看到里面的文件。 - 执行备份:
同样先确保PostgreSQL数据一致(停服或用pg_start_backup),然后用tar/rsync备份挂载目录:tar -czf pgsql_decrypted_backup.tar.gz /pgsql/postgredb/data/ - 恢复方式:
解压备份到目标路径,调整目录权限为postgres用户所有,然后启动PostgreSQL:chown -R postgres:postgres /pgsql/postgredb/data/ service postgresql-9.6 start
方案三:用PostgreSQL官方工具pg_basebackup备份
pg_basebackup是PostgreSQL自带的物理备份工具,能更好地适配PostgreSQL数据目录的结构,即使是Encfs挂载的目录也能正常工作:
- 调整PostgreSQL配置:
编辑postgresql.conf,确保以下参数配置正确(如果没有就添加):
然后重启PostgreSQL服务:wal_level = replica max_wal_senders = 1service postgresql-9.6 restart - 执行备份:
切换到postgres用户执行备份命令:
参数说明:su - postgres pg_basebackup -D /your/backup/path/pgsql_basebackup -Ft -z -P-D:指定备份存储路径-Ft:生成tar格式的备份包-z:启用压缩-P:显示备份进度
- 恢复方式:
解压备份包到目标数据目录,调整权限后启动PostgreSQL即可。
注意事项
- 无论用哪种方案,数据一致性是核心:绝对不能在PostgreSQL运行且未做一致性标记的情况下直接备份,否则恢复后数据可能损坏。
- 一定要妥善保存Encfs的加密密码,否则备份的加密目录无法解密使用。
- 测试环境建议先尝试恢复流程,确保备份能正常还原后再正式使用。
内容的提问来源于stack exchange,提问作者aswin s
相关产品推荐
相关产品推荐

