Recovering ride data from Garmin Edge 500
Wednesday, November 19th, 2014For the second time now I lost a ride from my Garmin Edge 500. But this time, thanks to this great blog post I was able to recover the data and upload to strava
I followed the steps in that blog post pretty closely, so this is largely a re-hash of that post for my own reference. But here’s what I did on OSX:
- Make a copy of the garmin device using dd
dd if=/dev/disk2 of=~/temp/garmin.img bs=1m
You can (but don’t need to) mount the device using Finder:
open ~/temp/garmin.img
- Get sleuthkit
- Download latest from http://www.sleuthkit.org/sleuthkit/download.php
- Fix the junit path in bindings/java/nbproject/project.xml . Change from:
<classpath mode="compile">lib;lib/diffutils-1.2.1.jar;lib/junit-4.8.2.jar;lib/sqlite-jdbc-3.8.0-SNAPSHOT.jar</classpath>
to
<classpath mode="compile">lib;lib/diffutils-1.2.1.jar;lib/junit-4.8.2.jar;lib/sqlite-jdbc-3.8.7.jar</classpath>
- Fix the junit version in bindings/java/ivy.xml . Change from:
<dependency org="org.xerial" name="sqlite-jdbc" rev="3.8.0-SNAPSHOT" >
to
<dependency org="org.xerial" name="sqlite-jdbc" rev="3.8.7" >
- Build
./configure && make
- Get scalpel:
git clone https://github.com/machn1k/Scalpel-2.0.git . ./configure && make && sudo make install
- Create a scalpel.conf:
#fit file definition from http://www.thice.nl/recovering-data-from-garmin-edge500 #fit y 1000000 \x0E\x10\x98\x00??????\x00\x2E\x46\x49\x54\x00\x00\x40\x00 \x01\x00\x00\x1A\x01??# updated fit definition as per data on my Garmin fit y 1000000 \x0E\x10\x98\x00???\x00\x2E\x46\x49\x54\x00\x00\x40\x00 \x01\x00\x00\x1A\x01??
It’s worth noting that the first definition does find some files on the device (perhaps from an earlier version of the firmware), but the second definition finds a lot more files (including the recent file I was missing). I found the common header and footer by using hexdump on some known good .fit files on the device, e.g.
for f in $(ls -1 2014-1*.fit); do hexdump -n16 $f; done
- Run scalpel on the copy of the garmin device:
scalpel -c scalpel.conf -o garmin.out garmin.img
There will now be a bunch of files in the garmin.out directory
- Get FitDump and GarminFit perl scripts:
mkdir fitdump; cd fitdump curl http://pub.ks-and-ks.ne.jp/cycling/pub/fitdump-0.04.tar.gz > fitddump/fitdump.tar.gz curl http://pub.ks-and-ks.ne.jp/cycling/pub/GarminFIT-0.12.tar.gz > garminfit.tar.gz tar -xzvf fitdump.tar.gz tar -xzvf garminfit.tar.gz
- Do something like this to find the file you're looking for
for f in $(ls -1 ../../garmin.out/fit-0-0/*.fit); do echo $f; ./fitdump $f | grep time_created; done > ~/temp/garmin.out/time_created.out
Then you can look through the time_created.out file to find the file containing the ride you're missing based on the date. You can then directly upload this file to Strava