You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过rsync从服务器备份网站至本地并保留文件所有权?

关于rsync备份保留所有权及替代方案的解答

咱们一步步来拆解并解决你的问题:

1. rsync的-a选项是否包含-o-g

完全正确!你的理解没毛病——rsync -a确实等价于-rlptgoD,其中:

  • -o:负责保留文件的所有者信息
  • -g:负责保留文件的组信息

2. 为什么本地备份后所有权变成了你的本地用户?

核心原因有两个:

  • rsync是基于**用户ID(UID)组ID(GID)**来匹配所有权的,而非单纯的用户名。虚拟主机上的user:user对应的UID/GID,大概率和你本地用户的UID/GID不匹配,rsync没法在本地找到对应ID,就会默认用当前执行备份的本地用户权限替换。
  • 你不是服务器管理员,也没有本地root权限,没法在本地创建和服务器上完全相同UID/GID的用户,自然没法直接保留原所有权。

3. 如何保留原文件的所有权信息?

分两种场景给你实用方案:

场景1:仅需备份元数据(用于后续恢复到服务器)

推荐用rsync的--fake-super选项,它会把所有权、权限等元数据存储在文件的扩展属性中,而非强制修改本地文件的实际所有权。这样备份的文件在本地显示的是你的用户权限,但元数据完整保留,以后恢复到服务器时可以还原成原有的user:user权限。
示例命令:

rsync -a --fake-super your-server-user@your-server:/path/to/website ~/local-backup/

场景2:必须在本地实际拥有原所有权

这种情况要求你有本地root权限,并且知道服务器上user:user对应的UID和GID:

  1. 在本地创建匹配的用户(需要root权限):
sudo useradd -u [服务器上的UID] -g [服务器上的GID] server-user
  1. 用rsync备份时保持-a选项(已包含-o-g):
sudo rsync -a your-server-user@your-server:/path/to/website ~/local-backup/

但这个方案对虚拟主机用户不太友好——你大概率不知道服务器上的UID/GID,而且本地不一定有root权限,实用性不高。

4. 是否应该用tar打包方式?

非常推荐!tar打包是虚拟主机备份的常用方案,它能完整保留文件的所有权、权限等所有元数据,即使你本地没有对应的用户ID,这些信息也会完整存在tar包中。具体步骤:

步骤1:在服务器上打包(如果虚拟主机允许执行tar命令)

tar -czf website-backup.tar.gz /path/to/your/website

-c创建包,-z压缩,-f指定包名,tar默认会保留文件的所有权信息)

步骤2:下载tar包到本地

用scp或者rsync都可以:

scp your-server-user@your-server:/path/to/website-backup.tar.gz ~/

步骤3:解压备份(按需选择)

  • 如果只是查看文件,直接解压即可(所有权会变成本地用户,但tar包里的元数据仍保留):
tar -xzf website-backup.tar.gz
  • 如果需要在本地还原原所有权(需要root权限):
sudo tar -xzf website-backup.tar.gz

总结

如果你的备份主要是为了以后恢复到服务器,tar打包是最稳妥的选择;如果需要在本地随时查看备份且保留元数据记录,rsync的--fake-super选项更方便。

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

火山引擎 最新活动