Rpi3B + SD卡备份和媒体服务器-使用rsync的问题

时间:2019-06-20 14:25:48

标签: linux bash raspberry-pi3 rsync

请问我对这个问题有一个非常基本的答案。我对linux比较陌生。

我正试图在树莓派上创建一个plex媒体服务器,供我岳父在电视上查看他的所有照片。

基本概念是我有一个带有外接硬盘和USB SD卡读卡器的RPI。插入SD卡后,它将自动将文件复制到HDD。然后,我将plex指向硬盘以拾取所有照片。

我已经在家中的rpi上构建了一个简单的NAS / plex服务器,因此可以正常运行。但是我在从SD卡自动复制文件时遇到了问题。

我之前从未做过任何脚本编写工作,因此我使用了一个名为“小备份盒”的项目作为参考,并尝试根据需要对其进行修改。如果需要参考,请在此处输入原始版本:

https://github.com/dmpop/little-backup-box/

原始脚本检测何时插入设备,然后关闭rpi。就像我想在rpi上运行plex介质服务器一样,我需要它保持打开状态。完整脚本由我在下面修改。

#!/bin/bash

# IMPORTANT:
# Run the install-little-backup-box.sh script first
# to install the required packages and configure the system.

# Specify devices and their mount points
STORAGE_DEV="sda1"
STORAGE_MOUNT_POINT="/media/storage"
CARD_DEV="sdb1"
CARD_MOUNT_POINT="/media/card"

# When the USB storage device is detected, mount it
mount /dev/$STORAGE_DEV $STORAGE_MOUNT_POINT

# Wait for a card reader or a camera
CARD_READER=$(ls /dev/* | grep $CARD_DEV | cut -d"/" -f3)
until [ ! -z $CARD_READER ]
  do
  sleep 1
  CARD_READER=$(ls /dev/sd* | grep $CARD_DEV | cut -d"/" -f3)
done

# If the card reader is detected, mount it and obtain its UUID
if [ ! -z $CARD_READER ]; then
  mount /dev/$CARD_DEV $CARD_MOUNT_POINT
  # # Set the ACT LED to blink at 500ms to indicate that the card has been mounted
  sudo sh -c "echo 500 > /sys/class/leds/led0/delay_on"
  # Create the CARD_ID file containing a random 8-digit identifier if doesn't exist
  if [ ! -f $CARD_MOUNT_POINT/CARD_ID ]; then
    < /dev/urandom tr -cd 0-9 | head -c 8 > $CARD_MOUNT_POINT/CARD_ID
  fi
  # Read the 8-digit identifier number from the CARD_ID file on the card
  # and use it as a directory name in the backup path
  read -r ID < $CARD_MOUNT_POINT/CARD_ID
  BACKUP_PATH=$STORAGE_MOUNT_POINT/"$ID"
# Perform backup using rsync
rsync -avh --timeout=10  $CARD_MOUNT_POINT/ $BACKUP_PATH
fi

exec $0 && exit

这在大多数情况下都可以正常工作。我可以插入一张SD卡,它将复制所有文件。

但是我遇到的问题是,我的岳父年纪大了,可能需要万无一失,并且在完成复制等操作之前可能会拔出SD卡。我还需要它才能复制另一个移除原件后,SD。

因此,我尝试修改脚本以在完成后重新启动自身。当我输入top命令时,可以看到backup.sh脚本正在运行,这似乎可以正常工作。

但是,如果通过拉出SD卡故意中断了复制,则在插入新存储卡后,它不会开始复制新文件。我认为该问题可能与rsync进程未正确终止/终止有关。

因此,我添加了--timeout = 10以尝试在未检测到IO的情况下干净地关闭rsync进程,但这似乎不起作用,因为我可以看到拉取SD后rsync继续作为进程很好地运行卡。

我不完全确定我在哪里出错,只是猜测它与rsync问题有关。因此,非常感谢任何帮助。

其他信息:运行raspbian拉伸的rpi模型3 b +。

0 个答案:

没有答案