请稍侯

使用 rsync 备份同步文件

26 August 2024

使用 rsync 备份同步文件

Case1: 同步4k电影脚本 rsync_movie4k.sh

#!/bin/bash

# 源目录
SOURCE_DIR="/mnt/remotes/LWDS920.LAN_video/电影·4K·8K·3D·VR/4K/"

# 目标目录
DEST_DIR="/mnt/disks/SATA3.5_ST12T/Movie4K/"

# 日志文件路径
LOG_FILE="$(pwd)/rsync_movie4k.log"

# 执行 rsync 命令
rsync -aiz $SOURCE_DIR $DEST_DIR >> $LOG_FILE 2>&1 &
# rsync -aiz --partial --progress $SOURCE_DIR $LOG_FILE >> $LOG_FILE 2>&1 &

echo "Rsync task started in the background. Logs are saved to $LOG_FILE"

后台执行 rsync 同步任务: nohup ./rsync_movie4k.sh & , 使用 ps 命令查看任务进程信息:ps -p $! -o pid,user,command(表示上条命令的PID), 或使用 top 命令:top -p <PID>, 或使用更强大 htop 命令:htop

Case2: 从 lwds920 同步4k电影到本地外接磁盘上

# 创建本地磁盘挂载目录
sudo mkdir -p /mnt/local/storage
# 挂载本地外接磁盘
sudo mount /dev/sdb1 /mnt/local/storage

# 创建远程cifs挂载目录
sudo mkdir -p /mnt/remotes/movie4k

# 挂载远程cifs目录(或者执行 mount_lwds920_4k.sh 脚本挂载 )
sudo mount.cifs //lwds920.local/video/电影·4K·8K·3D·VR/4K /mnt/remotes/movie4k -o username=<username>,password=<password>
# 与以下命令等价
echo -n "Enter password: " && \
    read -s password && echo && \
    sudo mount -t cifs //lwds920.local/data/docker_image /mnt/remotes/temp -o username=luowei,password="$password"

# 执行 rsync_movie4k.sh 同步
# ...

mount_lwds920_4k.sh 如下:

#!/bin/bash

CIFS_SOURCE_PATH="//lwds920.local/video/电影·4K·8K·3D·VR/4K"
MOUNT_PATH="/mnt/remotes/movie4k"

# 检查参数数量
if [ "$#" -ne 1 ]; then
    ACTION="mount"
else
    ACTION=$1
fi


case $ACTION in
    mount)
        # 获取密码
        read -sp "请输入 $CIFS_SOURCE_PATH 的密码: " PASSWORD
        echo

        # 执行 mount.cifs 命令
        sudo mount.cifs "$CIFS_SOURCE_PATH" "$MOUNT_PATH" -o username=luowei,password="$PASSWORD"

        # 检查 mount 命令的执行结果
        if [ $? -eq 0 ]; then
            echo "挂载成功,路径为:$MOUNT_PATH"
        else
            echo "挂载失败,请检查错误信息。"
        fi
        ;;

    umount)
        # 执行 umount 命令
        sudo umount "$MOUNT_PATH"

        # 检查 umount 命令的执行结果
        if [ $? -eq 0 ]; then
            echo "卸载成功,路径为:$MOUNT_PATH"
        else
            echo "卸载失败,请检查错误信息。"
        fi
        ;;

    *)
        echo "使用方法: $0 <mount|umount>"
        exit 1
        ;;
esac

rsync_movie4k.sh 如下:

#!/bin/bash

# 源目录
SOURCE_DIR="/mnt/remotes/movie4k/"

# 目标目录
DEST_DIR="/mnt/local/storage/movie4k/"

# 日志文件路径
LOG_FILE="$(pwd)/rsync_4kmovie_lwds920.log"

# 执行 rsync 命令
rsync -aiz $SOURCE_DIR $DEST_DIR >> $LOG_FILE 2>&1 &
# rsync -aiz --partial --progress $SOURCE_DIR $LOG_FILE >> $LOG_FILE 2>&1 &

echo "Rsync task started in the background. Logs are saved to $LOG_FILE"

测试下来发现:通过 mount.cifs 将远程目录挂载到本地后,再同步到本地的其他目录,同步的速度远快于直接使用 rsync 从远程同步到本地的速度。 示例:

# 直接使用 rsync 将远程 aaa 目录同步到本地
sudo rsync -aiz --progress "[email protected]:/volume2/video/4K_qnas/aaa/" /mnt/local/storage/movie4k/aaa/