通过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
相关产品推荐
相关产品推荐

