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

通过Samba复制Postgres目录遇权限问题求助

解决rsync跨机同步Postgres目录时的权限不匹配问题

你遇到的核心问题是源Postgres目录的属主/属组(通常是postgres用户组)和Samba挂载的目标目录属主不匹配,导致rsync因权限不足报错。下面给你几个针对性的解决方案,按推荐优先级排序:

1. 调整Samba挂载参数,匹配Postgres的UID/GID

这是最彻底的方案,让挂载后的目标目录直接继承Postgres用户的权限属性:

  • 先在源机器上查询postgres用户的UID和GID:
    id postgres
    # 输出类似 uid=999(postgres) gid=999(postgres) groups=999(postgres)
    
  • 卸载当前的挂载(如果已挂载):
    umount /mnt/pg-ralph12
    
  • 重新挂载时指定UID和GID参数,替换成你查到的数值:
    mount -t cifs //目标机器IP/共享名 /mnt/pg-ralph12 -o username=你的登录账号,password=你的密码,uid=999,gid=999
    
  • 如果需要开机自动挂载,修改/etc/fstab,添加类似条目:
    //目标机器IP/共享名 /mnt/pg-ralph12 cifs username=你的登录账号,password=你的密码,uid=999,gid=999 0 0
    

2. 使用rsync的--chown参数同步时修改属主

如果不想调整挂载配置,可以在rsync命令中直接指定同步后文件的属主属组:

rsync -avz --chown=postgres:postgres /源机器Postgres目录/ /mnt/pg-ralph12/

注意:这个方法需要你对目标挂载目录有写入权限,且目标机器的Samba配置允许修改文件属主(如果不行,需要在目标机器的smb.conf中添加allow chown = yes)

3. 调整目标机器的Samba共享配置

在目标机器的/etc/samba/smb.conf中,找到pg-ralph12的共享段,添加以下参数强制共享目录的属主为postgres:

[pg-ralph12]
    path = /目标机器的共享目录路径
    writeable = yes
    valid users = 你的登录账号 postgres
    force user = postgres
    force group = postgres
    allow chown = yes

修改后重启Samba服务:

systemctl restart smbd

之后重新挂载目录,再执行rsync就不会有权限问题了。

注意事项

  • 不要随意修改源机器Postgres目录的权限(比如给其他用户开放读写),这会破坏Postgres的安全运行环境,不推荐。
  • rsync的-a参数会同步权限、属主等属性,但只有当两边的UID/GID对应相同时才会生效,这也是你之前同一登录用户能复制成功的原因——因为两边该用户的UID/GID一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 10:44:24