这是我在这里的第一篇帖子。
我正在尝试将所有数据文件从一台服务器备份到另一台服务器。数据可以由多个用户或保留的未登录用户拥有。
我正在尝试创建所有用户文件的远程镜像。准备稍后恢复。
我在这里搜索过并且进行过大量谷歌搜索,但所有的解决方案都涉及更改文件的所有权或其他操作。
我有 samba 和 nfs(导出)共享。
该系统由 2 个 Raspberry PI 组成,每个 PI 都配有多个多托架 USB 驱动器,因此基于 raspbian/debian。
我目前最好的解决方案是:
cat /etc/scripts/backup_data4.sh
if [ -e /mnt/data4_B/B4 ]; then
printf "There is a B4 marker\n"
sudo rsync -avz -e ssh /mnt/data4/git /mnt/data4_B/
sudo rsync -avz -e ssh /mnt/data4/stacking2 /mnt/data4_B/
else
printf "B4 does not exist\n"
fi
其中 /mnt/data4_B 是备份服务器上安装的导出驱动器。
/etc/exports
/mnt/data1/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data2/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data3/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data4/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data5/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data6/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data7/ 192.168.0.160(rw,sync,no_subtree_check)
/mnt/data8/ 192.168.0.160(rw,sync,no_subtree_check)
该脚本确实在某种程度上起作用,但我在备份服务器的所有权和权限方面遇到很多问题。
欢迎提出任何建议。谢谢。
额外添加。
两个系统上的用户名、UID 和 GID 相同。
我找不到任何方法来使用:
rsync -av fromdir user@server:todir
可以处理多个用户文件。
答案1
如果 data4_B 是已挂载的 NFS 共享,则 root 可以复制所有内容并保留所有权和属性,只有 root 可以为其他用户执行此操作:
sudo cp -a /mnt/data4/git /mnt/data4_B/
rsync 也可以仅使用 ssh 而不挂载共享来执行此操作,但您首先需要确保 root 可以通过 ssh 登录远程计算机。因此,首先ssh-copy-id
从一个 root 帐户执行到另一个。然后,rsync -av fromdir user@server:todir
如果用户可以登录,您的操作将正常工作。
您所写的用法-e
如下:
sudo rsync -e "ssh -p 22 -l root" -av /mnt/data4/git "host.example.com:/mnt/data4_B"
答案2
您可能遗漏的主要内容是-A
或--acls
包含文件 ACL,rsync 默认排除这些 ACL。我使用下面的标志来备份权限。
# copy data over, ignoring mount points, sparse files, etc:
# -A should include --acls (check it though)
# [optional] -S sparse, -H hard-links, -x don't follow mounts, -v verbose
# -a (archive) includes -r/l/p/t/g/o/D
rsync -SHAxa /mnt/some/folder/ /mnt/backups/
-e ssh
此外,当/mnt/data4/git
和/mnt/data4_B/
都是“本地”路径时,您不需要使用
答案3
感谢大家的建议,它们帮助我找到了解决方案。
问题是只有文件所有者可以设置/更改 nfs 文件或目录的所有权。
我仍然不明白为什么 root 不能更改已挂载的远程驱动器的所有权。
我还遇到了 Samba 配置错误,导致许多文件有错误的用户。我从配置文件中删除了所有管理员用户的使用。
我的最终解决方案是在备份服务器上运行备份脚本,从主服务器提取文件。
sudo rsync -avx /mnt/data4_A/git /mnt/data4/
其中 data4_A 是服务器 A 上的远程 nfs 驱动器,data4 是备份服务器 B 中的本地磁盘。
感谢您的所有帮助。