使用 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/
