SaltStack中rsync.synchronized无法同步目录内容的问题排查
问题原因与解决方案
核心问题
你误解了rsync.synchronized模块的路径逻辑:默认情况下,source指向的是minion节点本地的路径,而非master节点。
- 第一次执行报错,是因为minion节点不存在
/home/user/test/目录; - 添加
prepare: True后,minion自动创建了空目录,导致rsync同步空内容,输出"total size is 0"。
不用file_roots的解决方案
要从master同步目录到minion,需将source指定为master的远程路径,以下是两种可行方式:
方式1:利用Salt的SSH信任关系(推荐)
Salt默认已建立master与minion的无密码SSH信任,直接通过SSH格式指定master路径即可:
sync_test_dir: rsync.synchronized: - name: /home/user/test/ # minion上的目标目录路径 - source: your-master-user@your-master-hostname:/home/user/test/ - force: True - rsync_opts: - '-avz' # 追加rsync参数,确保同步目录内容与属性
- 替换
your-master-user为master上的用户名,your-master-hostname为master的主机名/IP; name必须明确指定minion的目标路径,避免路径混淆。
方式2:通过master的rsync daemon同步
- 在master上配置rsyncd,共享
/home/user/test/目录; - SLS中指定rsync协议路径:
sync_test_dir: rsync.synchronized: - name: /home/user/test/ - source: rsync://your-master-ip/test-share-module/ - force: True
此方式需额外配置rsyncd,步骤较繁琐,优先推荐方式1。
额外注意事项
- 确认master上的
/home/user/test/目录存在且有内容; - 确保minion的目标用户对目标路径有读写权限;
- 若master的SSH端口非默认22,需在
rsync_opts中添加'-e "ssh -p 自定义端口"'。
内容的提问来源于stack exchange,提问作者Tony
相关产品推荐
相关产品推荐

