Automatic backup of Garmin Edge on Linux

·Clayton Craft

I purchased a Garmin Edge 130 last year to use for recording cycling trips, one of the main reasons for choosing this device was that it didn't require any special/proprietary software for accessing recorded activities or adding tracks. When the device is plugged into a computer via USB, it shows up as a mass storage device! Perfect!

Obviously keeping my precious ride recordings solely on the device is risky business, and (obviously) manually copying them off each and every time I ride is annoying and not something I want to do, considering I've been known to ride several times a week. So I came up with the following solution to have recorded rides automatically backed up off the device when I plug it in, something I do at the end of almost every ride to ensure the Edge always has a full charge.

This solution uses udiskie, which is an automount helper frontend thing for udisks2. A custom script is run by udiskie when it automounts the mass storage device, the script then runs a command for backing up recordings.

~/.config/udiskie/config.yml:

---
program_options:
  notify_command: "/home/<ME>/bin/backup_garmin {event} {device_presentation}"
  notify: true
  tray: false
  automount: true

udiskie needs to be started, which can be accomplished by running it manually from the command line, via a systemd user service, etc.

Script to perform the backup:

#!/bin/sh
set -e

BACKUP_DIR=/home/$(whoami)/Sync/rides/garmin
mkdir -p "$BACKUP_DIR"
event="$1"
disk="$2"
[ -z "$event" ] && exit 0
[ -z "$disk" ] && exit 0
# only pay attention to device_mounted event
[ "$event" != "device_mounted" ] && exit 0

label="$(lsblk -n -o label "$disk")"
[ "$label" != "GARMIN" ] && exit 0

ride_dir="/run/media/$(whoami)/GARMIN/GARMIN/ACTIVITY"

notify-send "Backing up $disk/$label to $BACKUP_DIR"
rsync -a "$ride_dir/" "$BACKUP_DIR/"

BACKUP_DIR can be modified to send backups to some other location.

Since reading from the Garmin is slow, this uses rsync so that any existing files are not re-transferred if they haven't changed.

This backup script could be extended to run any number of things on other events from udiskie!