You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对Encfs加密的PostgreSQL 9.6.8不可见数据目录执行物理备份?

针对你遇到的Encfs加密PostgreSQL数据目录后无法用tar/rsync备份的问题,我整理了几个可行的方案,结合你的环境(PostgreSQL 9.6.8 + CentOS 6.6)给你参考:

方案一:直接备份Encfs加密源目录(最推荐)

其实Encfs的核心是把加密后的实际文件存在/pgsql/postgredb/data_enc/,挂载后的data只是解密后的虚拟视图。直接备份这个加密源目录,不仅避开了挂载目录的权限/兼容性问题,还能减少备份过程中可能的文件损坏风险:

  1. 确保PostgreSQL数据一致性:
    • 如果测试环境可以停服:执行停止命令
      service postgresql-9.6 stop
      
    • 如果不能停服:先以超级用户身份进入PostgreSQL执行备份起点标记
      pg_start_backup('encfs_backup_session');
      
  2. 执行备份:
    用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/
    
  3. 收尾一致性操作:
    如果之前用了pg_start_backup,记得回到PostgreSQL执行:
    pg_stop_backup();
    
  4. 恢复方式:
    把备份的data_enc目录还原到原路径,再用你原来的Encfs命令挂载即可:
    encfs -o nonempty /pgsql/postgredb/data_enc/ /pgsql/postgredb/data
    

方案二:修复权限后备份挂载的解密目录

如果你确实需要备份解密后的目录,大概率是tar/rsync无法访问挂载目录的权限问题导致的,按以下步骤调整:

  1. 检查并调整挂载权限:
    先卸载当前挂载点,然后重新挂载时添加权限允许备份用户访问:
    # 卸载挂载点
    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
    
  2. 验证权限:
    执行ls -l /pgsql/postgredb/data,确保执行备份的用户(比如root或postgres)能看到里面的文件。
  3. 执行备份:
    同样先确保PostgreSQL数据一致(停服或用pg_start_backup),然后用tar/rsync备份挂载目录:
    tar -czf pgsql_decrypted_backup.tar.gz /pgsql/postgredb/data/
    
  4. 恢复方式:
    解压备份到目标路径,调整目录权限为postgres用户所有,然后启动PostgreSQL:
    chown -R postgres:postgres /pgsql/postgredb/data/
    service postgresql-9.6 start
    

方案三:用PostgreSQL官方工具pg_basebackup备份

pg_basebackup是PostgreSQL自带的物理备份工具,能更好地适配PostgreSQL数据目录的结构,即使是Encfs挂载的目录也能正常工作:

  1. 调整PostgreSQL配置:
    编辑postgresql.conf,确保以下参数配置正确(如果没有就添加):
    wal_level = replica
    max_wal_senders = 1
    
    然后重启PostgreSQL服务:
    service postgresql-9.6 restart
    
  2. 执行备份:
    切换到postgres用户执行备份命令:
    su - postgres
    pg_basebackup -D /your/backup/path/pgsql_basebackup -Ft -z -P
    
    参数说明:
    • -D:指定备份存储路径
    • -Ft:生成tar格式的备份包
    • -z:启用压缩
    • -P:显示备份进度
  3. 恢复方式:
    解压备份包到目标数据目录,调整权限后启动PostgreSQL即可。

注意事项

  • 无论用哪种方案,数据一致性是核心:绝对不能在PostgreSQL运行且未做一致性标记的情况下直接备份,否则恢复后数据可能损坏。
  • 一定要妥善保存Encfs的加密密码,否则备份的加密目录无法解密使用。
  • 测试环境建议先尝试恢复流程,确保备份能正常还原后再正式使用。

内容的提问来源于stack exchange,提问作者aswin s

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 12:27:14