当前位置: 首页 > article >正文

使用 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 进行文件同步的整个过程。通过掌握这些知识,你可以高效地管理和同步服务器上的文件。

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

相关文章:

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

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

MySQL 的 SQL 语句执行顺序

MySQL 的 SQL 语句执行顺序并不完全按照代码的书写顺序执行&#xff0c;而是遵循一套固定的逻辑流程 1. FROM 和 JOIN 作用&#xff1a;确定查询的数据来源&#xff0c;包括表和它们的连接方式&#xff08;如 INNER JOIN, LEFT JOIN 等&#xff09;。 细节&#xff1a; 先执行…...

小型水库大坝安全及水雨情监测技术方案

一、小型水库监测系统构成 小型水库雨水情测报和大坝安全监测系统由水库监测站点、通信网络和监测平台等组成&#xff0c;系统总体架构如图所示。 水库监测站点设施包括&#xff1a;雨量计、水位计、视频监视设备、渗压计、量水堰计、变形监测仪器、数据采集仪、遥测终端、水准…...

scala简介和基础语法

Scala简介 Scala 是一门多范式&#xff08;multi-paradigm&#xff09;的编程语言&#xff0c;设计初衷是要集成面向对象编程和函数式编程的各种特性。 Scala 运行在 Java 虚拟机上&#xff0c;并兼容现有的 Java 程序。Scala 源代码被编译成 Java 字节码&#xff0c;所以它可…...

‘无法定位程序输入点kernel32.dll’详细的修复方法,一键快速修复kernel32.dll

在 Windows 系统运行过程中&#xff0c;若程序提示“无法定位程序输入点 kernel32.dll”&#xff0c;往往意味着程序调用了 kernel32.dll 中不存在或已变更的函数接口。作为系统的核心动态链接库&#xff0c;kernel32.dll 承担着内存管理、进程控制、文件操作等底层功能&#x…...

电源系统的热设计与热管理--以反激式充电器为例

前言 反激电源常用于各种电子设备中&#xff0c;比如充电器、适配器等&#xff0c;它们通过变压器进行能量转换。高温环境可能对电子元件造成影响&#xff0c;特别是像MOSFET、二极管、变压器这样的关键部件&#xff0c;导致效率变低&#xff0c;甚至可能导致功能失效。还有安…...

笔记本电脑更换主板后出现2203:System configuration is invalid,以及2201、2202系统错误的解决

笔记本电脑更换主板后启动出现2203:System configuration is invalid,以及2201、2202系统错误的解决 自用的一台ThinkpadT490笔记本电脑 ,由于主板故障,不得不更换主板,通过某宝购置主板后进行了更换。 具体拆卸笔记本可搜索网络视频教程。 注意: 在更换主板时,注意先拍…...

项目-苍穹外卖(十七) Apache POI+导出数据

一、介绍 二、入门案例 package com.sky.test;import org.apache.poi.xssf.usermodel.XSSFRow; import org.apache.poi.xssf.usermodel.XSSFSheet; import org.apache.poi.xssf.usermodel.XSSFWorkbook;import java.io.File; import java.io.FileNotFoundException; import jav…...

蓝桥杯单片机刷题——E2PROM记录开机次数

设计要求 使用E2PROM完成数据记录功能&#xff0c;单片机复位次数记录到E2PROM的地址0中。每复位一次数值加1&#xff0c;按下按键S4&#xff0c;串口发送复位次数。串口发送格式如下&#xff1a; Number&#xff1a;1 备注&#xff1a; 单片机IRC振荡器频率设置为12MHz。 …...

聚合根的特性

聚合根的特性 聚合根是实体&#xff0c;拥有实体的业务属性和行为&#xff0c;同时也是聚合的管理者&#xff0c;负责协调聚合内的实体和值对象&#xff0c;按照固定的业务规则&#xff0c;完成业务逻辑。 聚合根是聚合对外唯一的接口人&#xff0c;聚合之间以聚合根ID关联的方…...

基于盛科CTC7132交换机核心模块

简介 基于盛科CTC7132 SOC方案构建&#xff0c;通过板对板高速连接器引出32路10G SerDes接口、1路PCIex1、2路管理SGMII接口、3路Uart接口&#xff08;1路调试串口2路功能串口&#xff09;、4路I2C接口(2路SOC部分2路PPU部分)、5路SMI接口&#xff08;1路管理口4路业务口&…...

How to install OpenJ9 JDK 17 on Ubuntu 24.04

概述 OpenJ9 是一款由 IBM 开发并开源的 Java 虚拟机&#xff08;JVM&#xff09;&#xff0c;现由 ​Eclipse 基金会管理&#xff08;名为 ​Eclipse OpenJ9&#xff09;。它旨在提供高性能、低内存消耗和快速启动时间&#xff0c;特别适用于云原生和容器化环境。 关键特性 …...

【即插即用涨点模块-卷积】SPDConv空间深度卷积,助力小目标与低分辨有效涨点【附源码+注释】

《------往期经典推荐------》 一、AI应用软件开发实战专栏【链接】 项目名称项目名称1.【人脸识别与管理系统开发】2.【车牌识别与自动收费管理系统开发】3.【手势识别系统开发】4.【人脸面部活体检测系统开发】5.【图片风格快速迁移软件开发】6.【人脸表表情识别系统】7.【…...

全流程剖析需求开发:打造极致贴合用户的产品

全流程剖析需求开发&#xff1a;打造极致贴合用户的产品 一、需求获取&#xff08;一&#xff09;与用户沟通&#xff08;二&#xff09;观察用户工作&#xff08;三&#xff09;收集现有文档 二、需求分析&#xff08;一&#xff09;提炼关键需求&#xff08;二&#xff09;建…...

《Python Web网站部署应知应会》No4:基于Flask的调用AI大模型的高性能博客网站的设计思路和实战(上)

基于Flask的调用AI大模型的高性能博客网站的设计思路和实战&#xff08;上&#xff09; 摘要 本文详细探讨了一个基于Flask框架的高性能博客系统的设计与实现&#xff0c;该系统集成了本地AI大模型生成内容的功能。我们重点关注如何在高并发、高负载状态下保持系统的高性能和…...

使用 Docker Compose 在单节点部署多容器

Docker Compose 是什么 Docker Compose 是一个用于运行多容器应用的工具, 通过一个docker-compose.yml文件, 配置应用的服务、网络和卷&#xff0c;然后使用简单的命令启动或停止所有服务 为什么需要 Docker Compose 当你有一个包含多个相互依赖的容器应用时&#xff0c;手动…...

STM32_HAL开发环境搭建【Keil(MDK-ARM)、STM32F1xx_DFP、 ST-Link、STM32CubeMX】

安装Keil(MDK-ARM)【集成开发环境IDE】 我们会在Keil(MDK-ARM)上去编写代码、编译代码、烧写代码、调试代码。 Keil(MDK-ARM)的安装方法&#xff1a; 教学视频的第02分03秒开始看。 安装过程中请修改一下下面两个路径&#xff0c;避免占用C盘空间。 Core就是Keil(MDK-ARM)的…...

在 React 中,组件之间传递变量的常见方法

目录 1. **通过 Props 传递数据**2. **通过回调函数传递数据**3. **通过 Context API 传递数据**4. **通过 Redux 管理全局状态**5. **通过事件总线&#xff08;如 Node.js 的 EventEmitter&#xff09;**6. **通过 Local Storage / Session Storage**7. **通过 URL 查询参数传…...

拦截器和过滤器详解

在 Java Web 开发中&#xff0c;拦截器&#xff08;Interceptor&#xff09;和过滤器&#xff08;Filter&#xff09;是两种常见的请求处理机制&#xff0c;它们用于对请求和响应进行预处理和后处理 1. 过滤器&#xff08;Filter&#xff09; 1.1 作用 Filter 主要用于对 请求…...

多线程—JUC(java.util.concurrent)

上篇文章&#xff1a; 多线程—synchronized原理https://blog.csdn.net/sniper_fandc/article/details/146713129?fromshareblogdetail&sharetypeblogdetail&sharerId146713129&sharereferPC&sharesourcesniper_fandc&sharefromfrom_link 目录 1 Calla…...

软件工程面试题(十二)

1、文件和目录(i/o)操作,怎么列出某目录下所有文件?某目录下所有子目录,怎么判断文件或目录是否存在?如何读写文件? 列出某目录下所有文件:调用listFile(),然后判断每个File对象是否是文件可以调用 isFile(),判断是否是文件夹可以调用isDirectory(),判断文件或目…...

从零开始跑通3DGS教程:(三)坐标系与尺度编辑(CloudCompare)

写在前面 本文内容 本文所属《从零开始跑通3DGS教程》系列文章&#xff1b; sfm重建的点云已经丢掉了尺度信息&#xff0c;并且坐标系跟图像数据有关(SFM初始化选择的图像)&#xff0c;所以如果想恢复物理真实尺度&#xff0c;以及在想要的视角下渲染&#xff0c;那么需要对尺度…...

多线程 - 线程安全引入

写一个代码&#xff0c;让主线程创建一个新的线程&#xff0c;由新的线程负责完成一系列的运算&#xff08;比如&#xff1a;1 2 3 ... 1000&#xff09;&#xff0c;再由主线程负责获取到最终结果。 但打印结果为 result 0&#xff0c;略微思考&#xff0c;明白了要让 t 线…...

笔记:基于环境语义的通感融合技术,将传统通信由“被动接收”转为“主动感知”

《基于计算机视觉的感知通信融合理论与关键技术研发进展》 介绍了联合研发的基于环境语义的通感融合技术研发进展。 观点&#xff1a;利用环境感知信息或环境语义辅助通信的通感融合技术成为6G重要方向之一 产出&#xff1a;基于环境感知的毫米波波束管理方案&#xff0c;并…...

【面试八股】:CAS指令

一、CAS 面试题 1. 说说CAS、CAS有什么问题&#xff08;ABA)?(美团一面&#xff09; Compare And Swap 对比交换&#xff08;原子指令&#xff09; CAS是 CPU指令 操作系统原生 API&#xff0c;JVM对它进行了封装&#xff08;C)&#xff0c;供我们使用。 通过判断 内存 和 …...

matplot显示中文

import matplotlib.pyplot as plt from matplotlib.font_manager import FontProperties 指定字体文件路径 font_path ‘/usr/share/fonts/SIMHEI.TTF’ font_prop FontProperties(fnamefont_path) 示例代码 plt.plot([1, 2, 3], [4, 5, 6]) plt.title(‘示例图表’, fon…...

mac部署CAT监控服务

在 Mac 上部署美团点评开源的 CAT 监控服务端&#xff0c;可以按照以下步骤操作&#xff1a; 1. 环境准备 1.1 安装依赖 确保已安装以下工具&#xff1a; JDK 8&#xff08;建议 OpenJDK 11&#xff09; MySQL 5.7&#xff08;存储监控数据&#xff09;&#xff08;8.0不支持…...

实变函数:集合与子集合一例(20250329)

题目 设 r , s , t r, s, t r,s,t 是三个互不相同的数&#xff0c;且 A { r , s , t } A \{r, s, t\} A{r,s,t}, B { r 2 , s 2 , t 2 } B \{r^2, s^2, t^2\} B{r2,s2,t2}, C { r s , s t , r t } C \{rs, st, rt\} C{rs,st,rt} 若 A B C A B C ABC 则 { r , s…...

软件工程之需求工程(需求获取、分析、验证)

一、需求获取&#xff08;Requirements Elicitation&#xff09; 1. 定义与目标 需求获取是通过与用户、利益相关者等交互&#xff0c;识别并捕获系统需求的过程&#xff0c;目标是明确用户意图与业务目标&#xff0c;避免后期因需求偏差导致返工。 2. 主要方法 问卷法&…...

c++第三课(基础c)

1.前文 2.break 3.continue 4.return 0 1.前文 上次写文章到现在&#xff0c;有足足这么多天&#xff08;我也不知道&#xff0c;自己去数吧&#xff09; 开始吧 2.break break是结束循环的意思 举个栗子 #include<bits/stdc.h> using namespace std; int main(…...