多用户Linux文件服务器跨网络备份(rsync工具)权限问题求助
您好!看了您的备份需求和目前遇到的权限问题,结合您两台树莓派(Raspbian/Debian)的环境,给您几个针对性的解决思路:
先分析您当前方案的核心问题
您现在用NFS挂载备份服务器的目录,然后用sudo rsync本地同步,但默认NFS会把root用户的请求映射成nobody用户(因为您的/etc/exports里没加no_root_squash参数),这就导致您同步的文件所有权会被改成nobody,自然出现权限和所有权异常——哪怕两台机器的UID/GID、用户名完全一致也没用。
方案一:修复NFS挂载的权限映射
修改备份服务器上的/etc/exports配置,给每个共享目录加上no_root_squash参数,这样源服务器的root用户操作NFS挂载目录时,不会被降级为nobody,能正确保留文件的原始所有权和权限:
/mnt/data1/ 192.168.0.160(rw,sync,no_subtree_check,no_root_squash) /mnt/data2/ 192.168.0.160(rw,sync,no_subtree_check,no_root_squash) # 其他data3-data8的配置同理修改
修改完成后重启NFS服务:
sudo systemctl restart nfs-kernel-server
之后重新挂载NFS目录,再运行您的备份脚本,同步后的文件应该就能保留原始的用户权限了。
方案二:改用rsync远程SSH模式(更推荐)
其实您不用挂载NFS,直接用rsync的远程SSH同步模式,用root用户操作就能完美解决多用户文件的权限问题——root可以访问所有用户(包括nologin用户)的文件,且远程同步时能完整保留文件的所有权、权限、时间戳等属性。
步骤如下:
- 先在源服务器上配置root用户免密登录备份服务器:
# 生成root的SSH密钥(一路回车默认即可) sudo ssh-keygen -t ed25519 # 把密钥拷贝到备份服务器的root用户下 sudo ssh-copy-id root@备份服务器IP
- 修改您的备份脚本,替换成远程rsync命令:
#!/bin/bash # 这里换成备份服务器的IP BACKUP_SERVER="192.168.0.XXX" if [ -e /mnt/data4_B/B4 ]; then printf "There is a B4 marker\n" # 用root远程同步,--numeric-ids确保UID/GID直接匹配(避免用户名映射问题) sudo rsync -avz --numeric-ids /mnt/data4/git root@${BACKUP_SERVER}:/mnt/data4_B/ sudo rsync -avz --numeric-ids /mnt/data4/stacking2 root@${BACKUP_SERVER}:/mnt/data4_B/ else printf "B4 does not exist\n" fi
这种方式不需要依赖NFS,减少了挂载环节的问题,而且rsync的远程模式本身就对跨服务器同步做了优化,效率也有保障。
验证同步结果
同步完成后,您可以用ls -n命令查看备份服务器上的文件(ls -n会显示数字UID/GID,比用户名更准确),确认和源服务器的UID/GID完全一致,就说明权限和所有权同步正确了。
备注:内容来源于stack exchange,提问作者nobody

