首页 > 其他分享 >服务器上数据定时同步到网络磁盘

服务器上数据定时同步到网络磁盘

时间:2024-07-16 18:18:16浏览次数:7  
标签:文件 rsync 同步 LOG home FILE 服务器 磁盘 定时

背景:由于权限问题无法将网络磁盘直接挂载到HPC上,但是可以挂载到本地,解决思路是通过rsyncd进行同步,每次同步的时候都将网络磁盘挂载到本地。我想把服务器上/home/s222552331/LUTO2_XH/Custom_runs/下的文件同步到网络磁盘的z/LUF-Modelling/LUTO2_XH/LUTO2/output

一、Window本地操作

1. 下载并安装cwRsyncServer

下载地址:https://github.com/foxuc/Windows/releases/
安装到:C:\Program Files (x86)\ICW可任意更改

2. 配置本地Rsync

a.编写配置文件

rsyncd.conf内容

port = 端口号
use chroot = false
strict modes = false
hosts allow = *
log file = C:/Program Files (x86)/ICW/rsyncd.log
uid = 0
gid = 0

[luto]
path = /cygdrive/z/LUF-Modelling/LUTO2_XH/LUTO2/output
read only = false
transfer logging = yes
auth users = ruser
secrets file = C:/Program Files (x86)/ICW/rsyncd.secrets

说明:

  • port = Rsync服务使用的端口号。
  • use chroot = false:是否使用chroot,设置为false表示不使用chroot。
  • strict modes = false:严格模式设置,设置为false表示不检查文件权限。
  • hosts allow = :允许连接的主机,可以使用IP地址或主机名,表示允许所有主机。
  • log file = C:/Program Files (x86)/ICW/rsyncd.log:日志文件路径。
  • uid = 0:运行Rsync服务的用户ID,0表示root用户。
  • gid = 0:运行Rsync服务的组ID,0表示root组。
  • [luto]:共享模块名称。
  • path = /cygdrive/z/LUF-Modelling/LUTO2_XH/LUTO2/output:共享目录路径。
  • read only = false:设置为false表示允许写操作。
  • transfer logging = yes:是否记录传输日志。
  • auth users = ruser:授权用户列表,多个用户用逗号分隔。
  • secrets file = C:/Program Files (x86)/ICW/rsyncd.secrets:认证用户的密码文件路径。内容为ruser:密码

b. 编写挂载磁盘并启动Rsync的脚本

start_rsync.bat内容:

net use 网络磁盘ip /user:用户名 密码
"C:\Program Files (x86)\ICW\bin\rsync.exe" --daemon --config="C:\Program Files (x86)\ICW\rsyncd.conf"

说明:

  • net use z: \网络磁盘ip\共享文件夹 /user:用户名 密码:挂载网络磁盘到本地Z盘。
  • "C:\Program Files (x86)\ICW\bin\rsync.exe" --daemon --config="C:\Program Files (x86)\ICW\rsyncd.conf":启动Rsync服务。

二、HPC服务器上操作

0. 安装rsync

一般HPC上都带的有,如果没有需要自己安装,无安装权限需联系管理员
(安装方法)

sudo apt-get install rsync  # 对于Ubuntu
# 或
sudo yum install rsync  # 对于CentOS

1. 创建同步脚本

sync_files.sh内容:

#!/bin/bash

# 定义日志文件及其备份目录
LOG_FILE="/home/s222552331/rsync/rsync_log.txt"
BACKUP_DIR="/home/s222552331/rsync/backup_logs"
MAX_LOG_DAYS=7

# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR

# 检查日志文件是否存在并且超过 MAX_LOG_DAYS 天
if [ -f $LOG_FILE ]; then
    LOG_FILE_AGE=$(find $LOG_FILE -mtime +$MAX_LOG_DAYS)
    if [ ! -z "$LOG_FILE_AGE" ]; then
        TIMESTAMP=$(date +%Y%m%d%H%M%S)
        mv $LOG_FILE $BACKUP_DIR/rsync_log_$TIMESTAMP.txt
    fi
fi

# 使用 flock 确保脚本的唯一实例
exec 200>/var/lock/sync_files.lock || exit 1
flock -n 200 || exit 1

# 定义上次同步的时间标记文件
LAST_SYNC_FILE="/home/s222552331/rsync/last_sync_time.txt"

# 如果上次同步时间标记文件不存在,创建它并设置为一个很早的时间
if [ ! -f $LAST_SYNC_FILE ]; then
    echo "1970-01-01 00:00:00" > $LAST_SYNC_FILE
fi

# 读取上次同步时间
LAST_SYNC_TIME=$(cat $LAST_SYNC_FILE)

# 日志开始时间
echo "Sync started at: $(date)" >> $LOG_FILE

# 查找自上次同步以来修改或新增的文件,并生成相对路径的文件列表
find /home/s222552331/LUTO2_XH/Custom_runs/ -type f -newermt "$LAST_SYNC_TIME" | sed 's|^/home/s222552331/LUTO2_XH/Custom_runs/||' > /home/s222552331/rsync/file_list.txt

# 同步文件,日志中只记录传输的文件
rsync -av --files-from=/home/s222552331/rsync/file_list.txt --relative --progress --port=8873 --password-file=/home/s222552331/rsync/rsync_password --log-file=$LOG_FILE /home/s222552331/LUTO2_XH/Custom_runs/ [email protected]::luto

# 检查 rsync 命令的退出状态
if [ $? -eq 0 ]; then
    # 如果 rsync 成功,更新上次同步时间到当前时间
    date '+%Y-%m-%d %H:%M:%S' > $LAST_SYNC_FILE
    echo "Sync finished at: $(date)" >> $LOG_FILE
else
    # 如果 rsync 失败,记录错误信息但不更新上次同步时间
    echo "Sync failed at: $(date)" >> $LOG_FILE
fi

说明:
sync_files.sh脚本首先定义了日志文件及其备份目录,然后创建备份目录(如果不存在)。接下来,检查日志文件是否存在且超过最大保存天数(7天),如果是,则将其备份。使用 flock 命令确保脚本的唯一实例运行,防止多个同步进程同时运行导致冲突。定义并读取上次同步的时间标记文件,如果文件不存在,则创建并设置为一个很早的时间(1970年)。记录同步开始时间,查找自上次同步以来修改或新增的文件,并生成相对路径的文件列表。使用 rsync 命令同步文件,记录传输的文件到日志文件。最后,检查 rsync 命令的退出状态,如果成功,更新上次同步时间到当前时间;如果失败,记录错误信息但不更新上次同步时间。

  • LOG_FILE="/home/s222552331/rsync/rsync_log.txt":定义日志文件路径。
  • BACKUP_DIR="/home/s222552331/rsync/backup_logs":定义日志文件备份目录。
  • MAX_LOG_DAYS=7:日志文件保存的最大天数。
  • mkdir -p $BACKUP_DIR:创建备份目录(如果不存在)。
  • 检查日志文件是否存在并且超过 MAX_LOG_DAYS 天。
  • 使用 flock 确保脚本的唯一实例。(定时运行可能会上一次同步位完成下一次同步开始)
  • 定义上次同步的时间标记文件 LAST_SYNC_FILE。
  • 如果上次同步时间标记文件不存在,创建它并设置为一个很早的时间。
  • 读取上次同步时间 LAST_SYNC_TIME。
  • 查找自上次同步以来修改或新增的文件,并生成相对路径的文件列表。
  • 同步文件,日志中只记录传输的文件。
  • rsync_password文件自己创建,内写windoew上rsyncd.secrets中的密码
  • 检查 rsync 命令的退出状态,如果成功,更新上次同步时间到当前时间;如果失败,记录错误信息但不更新上次同步时间。

2.定期运行脚本

编辑crontab文件:
crontab -e
添加以下内容以每小时运行一次同步脚本:
0 * * * * /home/s222552331/rsync/sync_files.sh

标签:文件,rsync,同步,LOG,home,FILE,服务器,磁盘,定时
From: https://www.cnblogs.com/skypanxh/p/18305816

相关文章

  • AWS无服务器 应用程序开发—第十八章 AWS EventBridge
    AWSEventBridge是一项无服务器事件总线服务,可以方便地将数据从源传输到目标。EventBridge能够处理应用程序和服务之间的事件传递,并通过路由事件数据来触发各种操作。以下是使用AWSEventBridge的详细指南,包括其核心概念和操作步骤。核心概念事件源:生成事件的AWS服......
  • FTK Imager的强大功能:详细解读内存和磁盘镜像导出
    本指南将详细解读如何使用FTKImager进行内存镜像导出、镜像挂载和磁盘镜像导出。通过这篇文章,我希望能够帮助你更好地理解和应用这些技术,提高你的工作效率和准确性。文档目录简介准备工作1.1安装FTKimager1.2汉化(可选)1.3界面介绍磁盘镜像导出2.1什么是磁盘镜......
  • 算力服务器的崛起:技术革新与市场展望
    在当今这个数字化时代,算力已成为推动社会进步和经济发展的重要力量。随着云计算、物联网、人工智能等技术的飞速发展,对算力的需求呈现出爆炸式增长。算力服务器,作为这一需求的核心支撑,正经历着前所未有的变革与发展。本文将从技术革新、市场趋势、以及未来展望三个维度,深入探讨算......
  • 通过chrony实现内网自建时间同步服务器
    服务端安装chrony服务端yuminstall-ychrony配置chrony服务端#chrony默认配置文件路径#yum:一般为/etc/chrony.conf#apt:一般为/etc/chrony/chrony.conf#在chrony.conf中加入以下行serverntp.aliyun.comiburstmanualallow0.0.0.0/0localstratum8......
  • sysbench测试系统磁盘读写
    版本号:sysbench1.1简介  sysbench除了测试数据库外,还可以用于测试硬盘在不同负载下的性能表现,包括随机读写、顺序读写、随机访问模式、I/O延迟等。原理是通过生成不同的文件I/O负载模式(如顺序读写和随机读写),并根据指定的数据块大小和线程数量,测量系统在这些条件下的读......
  • 独立高防服务器特点免费全能空间存在吗
    独立高防服务器,是在独享整台服务器硬件资源和卓越性能的基础上独立高防服务器有哪些特点呢?因为独立高防服务器具有超强稳定性,用户可安装独立的操作系统,http、ftp、ssh、sendmail、mysql等都是独立的,只有你一个人在用,不像虚拟主机一样是免费服务器很多人共享,在安全性、性能、......
  • 易优cms apache服务器伪静态规则
    易优cms在apache服务器环境默认自动隐藏index.php入口。如果发现没隐藏,可以检查根目录.htaccess是否含有以下红色代码段: <IfModule mod_rewrite.c>Options +FollowSymlinks -MultiviewsRewriteEngine on#http跳转到https#RewriteCond %{HTTPS} !=on#RewriteRule ^......
  • 如何更换服务器硬盘
    一、前期准备备份数据:在更换硬盘之前,务必对服务器上的重要数据进行全面备份。这可以通过使用备份软件或手动复制文件到外部存储设备(如移动硬盘、云存储等)来完成。确保备份文件的完整性和可恢复性,以防止数据丢失。关闭服务器:在进行硬盘更换之前,需要先关闭服务器。确保保存并关......
  • 如何在服务器上恢复RAID磁盘阵列
    在服务器上恢复RAID磁盘阵列的过程可以相当复杂,具体步骤取决于数据丢失的原因、RAID的级别(如RAID0、RAID1、RAID5、RAID6等)以及服务器的具体配置。一、评估与准备确认RAID状态:检查RAID控制器的状态,确认是否有磁盘故障或RAID配置错误。查看服务器的系统日志或RAID控制器的......
  • Docker如何将本地镜像上传到服务器并解压使用该镜像?
    第一步本地导出镜像包.tar文件dockersave-oapp.tarnuxt_app:1.0.1提示:app.tar这个文件名称任意取,.tar后缀不能随意修改。第二步将导出的镜像包文件app.tar上传到服务器第三步在服务器解压镜像cd/opt/docker-compose/save_image/sudodockerload<app.tar......