diff --git a/README.md b/README.md index bae6730..60c4fb8 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ Save the changes. 2. Plug in the backup storage device (or camera, if you configured Little Backup Box as described above) 3. Plug in the card reader and wait till the Raspberry Pi shuts down -**Note:** To differentiate between different storage cards, the backup script assigns a random 8-digit identifying number to each card (this number is stored in the *CARD_ID* file in the root of the card). The contents of the card is saved on the storage device in a folder with the identifying number as its name. +**Note:** To differentiate between different storage cards, the backup script creates a datetime-based *.id* file in the root of each storage card. The name of the *.id* file is also used as the destination backup folder on the storage device. ## Problems? diff --git a/backup.sh b/backup.sh index 44de230..bc6b093 100755 --- a/backup.sh +++ b/backup.sh @@ -5,14 +5,31 @@ # 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" +# and other settings +STORAGE_DEV="sda1" # Name of the storage device +STORAGE_MOUNT_POINT="/media/storage" # Mount point of the storage device +CARD_DEV="sdb1" # Name of the storage card +CARD_MOUNT_POINT="/media/card" # Mount point of the storage card +GEO_REF="GEOREF.JPG" # Name of the reference photo to be used for geotagging +SHUTD="5" # Minutes to wait before shutdown due to inactivity + +# If there is a wpa_supplicant.conf file in the root of the storage device +# Rename the original config file, +# move wpa_supplicant.conf from the card to /etc/wpa_supplicant/ +# Reboot to enable networking +if [ -f "$STORAGE_MOUNT_POINT/wpa_supplicant.conf" ]; then + sudo sh -c "echo 100 > /sys/class/leds/led0/delay_on" + mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.bak + mv "$STORAGE_MOUNT_POINT/wpa_supplicant.conf" /etc/wpa_supplicant/wpa_supplicant.conf + reboot +fi # Set the ACT LED to heartbeat sudo sh -c "echo heartbeat > /sys/class/leds/led0/trigger" +# Shutdown after a specified period of time (in minutes) if no device is connected. +sudo shutdown -h $SHUTD "Shutdown is activated. To cancel: sudo shutdown -c" + # Wait for a USB storage device (e.g., a USB flash drive) STORAGE=$(ls /dev/* | grep $STORAGE_DEV | cut -d"/" -f3) while [ -z ${STORAGE} ] @@ -24,21 +41,13 @@ done # When the USB storage device is detected, mount it mount /dev/$STORAGE_DEV $STORAGE_MOUNT_POINT +# Cancel shutdown +sudo shutdown -c + # Set the ACT LED to blink at 1000ms to indicate that the storage device has been mounted sudo sh -c "echo timer > /sys/class/leds/led0/trigger" sudo sh -c "echo 1000 > /sys/class/leds/led0/delay_on" -# If there is a wpa_supplicant.conf file in the root of the storage device -# Rename the original config file, -# move wpa_supplicant.conf from the card to /etc/wpa_supplicant/ -# Reboot to enable networking -if [ -f "$STORAGE_MOUNT_POINT/wpa_supplicant.conf" ]; then - sudo sh -c "echo 100 > /sys/class/leds/led0/delay_on" - mv /etc/wpa_supplicant/wpa_supplicant.conf /etc/wpa_supplicant/wpa_supplicant.conf.bak - mv "$STORAGE_MOUNT_POINT/wpa_supplicant.conf" /etc/wpa_supplicant/wpa_supplicant.conf - reboot -fi - # Wait for a card reader or a camera CARD_READER=$(ls /dev/* | grep $CARD_DEV | cut -d"/" -f3) until [ ! -z $CARD_READER ] @@ -52,21 +61,30 @@ 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 + # Create a .id random identifier file if doesn't exist + cd $CARD_MOUNT_POINT + if [ ! -f *.id ]; then + touch $(date -d "today" +"%Y%m%d%H%M").id fi + ID_FILE=$(ls *.id) + ID="${ID_FILE%.*}" + cd + +# Set the backup path +BACKUP_PATH=$STORAGE_MOUNT_POINT/"$ID" # Log the output of the lsblk command for troubleshooting sudo lsblk > lsblk.log - -# 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 $CARD_MOUNT_POINT/ $BACKUP_PATH +rsync -av --exclude "*.id" $CARD_MOUNT_POINT/ $BACKUP_PATH + +# Geotag photos if the reference photo exists +if [ -f "$STORAGE_MOUNT_POINT/$GEO_REF" ]; then + cd $STORAGE_MOUNT_POINT + exiftool −overwrite_original_in_place -r -ext jpg -tagsFromFile $GEO_REF -gps:all . +fi + # Turn off the ACT LED to indicate that the backup is completed sudo sh -c "echo 0 > /sys/class/leds/led0/brightness" fi