使用 rsync 进行服务器文件同步与优化

使用 Rsync 工具在两台 Linux 服务器之间同步文件

Rsync 是一种高效的文件同步工具,它可以在本地或远程服务器之间同步文件和目录。Rsync 通过仅传输文件的变化部分来减少数据传输量,因此特别适合用于定期备份或同步大量数据。本文将详细介绍如何将 A 服务器的文件同步到 B 服务器。

1. 准备工作

在开始之前,确保以下条件已满足:

  • 两台 Linux 服务器:A 服务器(源服务器)和 B 服务器(目标服务器)。

  • SSH 访问权限:确保你可以通过 SSH 从 A 服务器访问 B 服务器,或者反之。

  • Rsync 安装:确保 Rsync 在两台服务器上均已安装。如果没有安装,可以使用以下命令进行安装:

    sudo apt-get install rsync  # 对于基于 Debian 的系统(如 Ubuntu)
    sudo yum install rsync      # 对于基于 Red Hat 的系统(如 CentOS)
    
2. 配置 SSH 无密码登录

为了简化 Rsync 的使用,建议配置 SSH 无密码登录。这样在执行 Rsync 命令时不需要手动输入密码。

在 A 服务器上生成 SSH 密钥(如果尚未生成):

ssh-keygen -t rsa

按提示操作,默认情况下会在 ~/.ssh/ 目录下生成 id_rsaid_rsa.pub 文件。

将公钥复制到 B 服务器:

ssh-copy-id user@B_server_ip

其中 user 是 B 服务器的用户名,B_server_ip 是 B 服务器的 IP 地址。输入 B 服务器的密码后,公钥将被复制到 B 服务器的 ~/.ssh/authorized_keys 文件中。

测试无密码登录:

ssh user@B_server_ip

如果配置正确,你应该能够无需密码登录到 B 服务器。

3. 使用 Rsync 同步文件

基本命令格式:

rsync [选项] 源路径 目标路径

将 A 服务器的文件同步到 B 服务器:

rsync -avz -e ssh /path/to/source/ user@B_server_ip:/path/to/destination/

参数解释:

  • -a:归档模式,表示递归传输并保持文件属性(如权限、时间戳等)。
  • -v:详细模式,输出同步过程中的详细信息。
  • -z:压缩传输,减少数据传输量。
  • -e ssh:指定使用 SSH 作为远程 shell。
  • /path/to/source/:A 服务器上要同步的文件或目录路径。
  • user@B_server_ip:/path/to/destination/:B 服务器上的目标路径。

示例:

假设 A 服务器上有一个目录 /home/user/data,我们想将其同步到 B 服务器的 /backup/data 目录,命令如下:

rsync -avz -e ssh /home/user/data/ user@B_server_ip:/backup/data/

注意事项:

  • 如果目标路径不存在,Rsync 会自动创建。
  • 如果源路径以 / 结尾,Rsync 会同步目录内容;如果不以 / 结尾,Rsync 会同步整个目录。
4. 定期自动同步

为了定期自动同步文件,可以使用 cron 任务。

编辑 cron 任务:

crontab -e

添加以下行以每天凌晨 2 点同步:

0 2 * * * rsync -avz -e ssh /home/user/data/ user@B_server_ip:/backup/data/

保存并退出编辑器。

5. 高级选项
  • 1.指定 SSH 端口
    如果 B 服务器的 SSH 端口不是默认的 22,可以通过 -e 参数指定端口号:

    rsync -avz -e "ssh -p 2222" /home/user/data/ user@B_server_ip:/backup/data/
    
  • 2.模拟运行:
    如果不确定 rsync 会覆盖哪些文件,可以先使用 --dry-run 参数进行模拟运行:

    rsync -avz --dry-run -e "ssh -p 51222" /home/user/data/ user@B_server_ip:/backup/data/
    
  • 3.排除特定文件或目录:

    rsync -avz -e ssh --exclude '*.log' /home/user/data/ user@B_server_ip:/backup/data/
    
  • 4.排除多个文件或目录:

    rsync -avz -e ssh --exclude '*.log' --exclude 'log' /home/user/data/ user@B_server_ip:/backup/data/
    
  • 5.后台运行 rsync
    对于大文件传输,可以将 rsync 放到后台运行,使用 nohup 命令:

    nohup rsync -avz -e "ssh -p 2222" /home/user/data/ user@B_server_ip:/backup/data/ > rsync.log 2>&1 &
    

    日志会写入 rsync.log 文件,可以随时查看进度:

    tail -f rsync.log
    
  • 6.查看进度:
    如果希望实时查看传输进度,可以在 rsync 命令中添加 --progress 参数:

    rsync -avz --progress -e "ssh -p 2222" /home/user/data/ user@B_server_ip:/backup/data/
    
  • 7.中止同步:
    如果需要在同步过程中中止任务,可以按下 Ctrl + C(前台运行),或者使用 kill 命令终止后台进程:

    ps aux | grep rsync
    kill <PID>
    
  • 8.覆盖已存在的文件:
    rsync 默认会覆盖目标服务器上已存在的文件。如果不希望覆盖,可以使用 --ignore-existing 参数:

    rsync -avz --ignore-existing -e "ssh -p 2222" /home/user/data/ user@B_server_ip:/backup/data/
    
  • 9.强制覆盖已存在的文件:
    如果目标服务器上存在一些特殊文件(例如符号链接或设备文件),rsync 默认会跳过这些文件。如果你希望强制覆盖这些文件,可以使用 --force 参数。

    rsync -avz --force -e "ssh -p 2222" /home/user/data/ user@B_server_ip:/backup/data/
    
  • 10.备份被覆盖的文件:
    如果希望在覆盖目标文件之前备份这些文件,可以使用 --backup 参数:

    rsync -avz --backup -e "ssh -p 51222" /home/user/data/ user@B_server_ip:/backup/data/
    
  • 11.限制带宽:

    rsync -avz -e ssh --bwlimit=1000 /home/user/data/ user@B_server_ip:/backup/data/
    

    其中 --bwlimit=1000 表示限制带宽为 1000 KB/s。

6. 常见问题及解决方案

问题1:SSH 连接超时

解决方案:检查网络连接,确保两台服务器之间的网络畅通。可以尝试增加 SSH 连接超时时间:

rsync -avz -e "ssh -o ConnectTimeout=10" /home/user/data/ user@B_server_ip:/backup/data/

问题2:权限不足

解决方案:确保你有足够的权限访问源和目标路径。可以使用 sudo 或以具有足够权限的用户身份执行命令。

问题3:文件冲突

解决方案:使用 --backup 选项备份冲突文件:

rsync -avz -e ssh --backup /home/user/data/ user@B_server_ip:/backup/data/
7. 总结

通过 Rsync 工具,你可以轻松地在两台 Linux 服务器之间同步文件。本文详细介绍了从准备工作到配置 SSH 无密码登录,再到使用 Rsync 进行文件同步的整个过程。通过掌握这些知识,你可以高效地管理和同步服务器上的文件。

如果你有任何问题或需要进一步的帮助,请随时联系我。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/74780.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

卷积神经网络 - 微步卷积、空洞卷积

一、微步卷积 微步卷积&#xff08;Fractionally Strided Convolution&#xff09;&#xff0c;通常也称为转置卷积&#xff08;Transposed Convolution&#xff09;或反卷积&#xff08;Deconvolution&#xff09;&#xff0c;是深度学习&#xff08;尤其是卷积神经网络&…

详解java体系实用知识总结

0.java技术能力框架 基础模块应用模块综合模块技术岗位与面试流程常用工具集系统架构设计计算机基础常用框架微服务架构jvm原理缓存容器化多线程队列云计算&#xff08;阿里云/aws&#xff09;设计模式数据库数据结构与算法 1.常用设计模式与应用场景 工厂模式&#xff1a;s…

设计模式之创建型5种

设计模式 为什么设计模式是23种创建型 对象创建为什么设计模式是23种 设计模式之所以被归纳为23种,而非其他数量,源于GoF(Gang of Four)在1994年的系统性总结和分类。这一数量的确定并非偶然,而是基于以下核心原因: 他们遵循“大三律”(Rule of Three),即只有经过三个…

Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)

文章目录 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange)ONNX基本概念ONNX(Open Neural Network Exchange)ONNX Runtime ONNX Runtime 在Oracle数据库中的集成参考 Oracle 23ai Vector Search 系列之2 ONNX(Open Neural Network Exchange) 我们在看【…

统一语言学习范式

摘要 现有的预训练模型通常针对特定类别的问题。迄今为止&#xff0c;关于何种架构和预训练设置应为最佳似乎仍未达成共识。本文提出了一个统一的框架&#xff0c;用于预训练在多种数据集和设置中普遍有效的模型。我们首先将架构原型与预训练目标这两个常被混为一谈的概念进行…

Flutter项目升级到指定版本的详细步骤指南

一、升级前的准备工作 备份项目 使用Git提交当前所有修改&#xff1a;git commit -am "Pre-upgrade backup"或直接复制项目文件夹 查看当前环境信息 flutter --version flutter doctor二、升级Flutter SDK到指定版本 方法1&#xff1a;通过版本管理工具升级&#x…

22、web前端开发之html5(三)

六. 离线存储与缓存 在网络环境不稳定或需要优化资源加载速度的场景下&#xff0c;离线存储与缓存技术显得尤为重要。HTML5引入了多种离线存储和缓存机制&#xff0c;帮助开发者提升用户体验。本节将详细介绍Application Cache、localStorage、sessionStorage以及IndexedDB等技…

用HTML和CSS生成炫光动画卡片

这个效果结合了渐变、旋转和悬浮效果的炫酷动画示例&#xff0c;使用HTML和CSS实现。 一、效果 二、实现 代码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport&quo…

【嵌入式学习2】数组

目录 ## 数组概念 ## 数组使用 ## 数组初始化 ## 数组名 ## 数组长度 ## 数组相关题目 1、找最大值 2、逆置 ## 数组和指针 指针加整数的含义 ## 指针数组 ## 数组名做函数参数 ## 函数参数传递数组 1、在函数内部 2. 在函数外部 ## 多维数组 使用下标访问 #…

C++中的判断与循环

一.if判断语句 1.程序中的判断&#xff1a; if (要执行的判断&#xff0c;最后的返回值要是bool型的数据) {如果为真&#xff0c;要执行的代码段; } #include"iostream" using namespace std;int main() {int ans;cin >> ans;if (ans > 1000) {cout <…

前端开发中生成网站的favicon.ico文件的软件推荐及使用方法

日常网站开发中&#xff0c;我们经常需要生成网站的favicon.ico文件&#xff0c;今天我在这里来推荐几个编辑.ico(也可将图片格式转化为.ico)图片&#xff0c;而且免费的那软件&#xff1a; GIMP&#xff1a;一个功能强大的开源图像编辑软件&#xff0c;支持多种文件格式&#…

浅谈WebSocket-FLV

FLV是一种视频数据封装格式&#xff0c;这种封装被标准通信协议HTTP-FLV和RTMP协议应用。 而WebSocket-FLV是一种非标的FLV封装数据从后端发送到前端的一种方式。 在WebSocket的url请求中&#xff0c;包含了需要请求设备的视频相关信息&#xff0c;在视频数据到达时&#xff0c…

基于ADMM无穷范数检测算法的MIMO通信系统信号检测MATLAB仿真,对比ML,MMSE,ZF以及LAMA

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 ADMM算法 4.2 最大似然ML检测算法 4.3 最小均方误差&#xff08;MMSE&#xff09;检测算法 4.4 迫零&#xff08;ZF&#xff09;检测算法 4.5 OCD_MMSE 检测算法 4.6 LAMA检测算法 …

cocos creator 笔记-路边花草

版本&#xff1a;3.8.5 实现目标&#xff1a;给3d道路生成路边景观花草 在场景下创建一个节点&#xff0c;我这里种植两种花草模型&#xff0c;兰花和菊花&#xff0c;所以分别在节点下另创建两个节点&#xff0c;为了静态合批。 1.将花草模型分别拖入场景中&#xff0c;制作…

R语言——循环

参考资料&#xff1a;学习R 在R中有三种循环&#xff1a;repeat、while和for。虽然向量化意味着我们可能并不需要大量使用它们&#xff0c;但在需要重复执行代码时&#xff0c;它们是非常有用的。 1、重复循环 R中最容易掌握的循环是repeat。它所做的事情就是反复地执行代码&a…

springboot使用阿里限流框架-sentinel

当前项目源码 控制台下载 启动bin中的看板服务&#xff1a;账号密码:sentinel/sentinel 官方文档地址 项目引入依赖 <!-- sentinel注解支持 --> <dependency><groupId>com.alibaba.csp</groupId><artifactId>sentinel-annotation-aspectj<…

CSS3学习教程,从入门到精通,CSS3 元素的浮动与定位语法知识点及案例代码(17)

CSS3 元素的浮动与定位语法知识点及案例代码 一、CSS3 浮动&#xff08;float&#xff09; 知识点 1. **定义** &#xff1a;浮动使元素向左或向右移动&#xff0c;直到它的外边缘碰到包含框或另一个浮动元素的边框为止。浮动主要用于布局&#xff0c;如实现图文绕排等效果。…

数据结构:汉诺塔问题的递归求解和分析

递归方法求解该类问题&#xff0c;是一种简单的思维方法&#xff0c;通常比使用迭代方法更简单。但是&#xff0c;递归方法也有劣势。此处以典型的汉诺塔问题&#xff08;Tower of Hanoi&#xff09;为例给予说明。 汉诺塔是根据一个传说形成的数学问题&#xff0c;最早是由法国…

3.27学习总结 算法题

自己用c语言做的&#xff0c;不尽如意 后面看了题解&#xff0c;用的是c&#xff0c;其中string 变量和字符串拼接感觉比c方便好多&#xff0c;可以用更少的代码实现更好的效果&#xff0c;打算之后去学习c&#xff0c;用c写算法。 递归&#xff0c;不断输入字符&#xff0c;…

vue 图片放大到全局

背景&#xff1a; 在vue项目中&#xff0c;el-image组件图片组件用于展示图片&#xff0c;组件自带的属性preview-teleported&#xff0c;设置为true可以控制图片放大到全局 实现效果&#xff1a; 核心代码&#xff1a; //图片地址&#xff1a;BASEUrl /file/ item.file //这…