Script to Fix Broken RRDs
OpenWRT seems to have issues with inserting bad data into RRDs, especially after reboots. I made the below script to fix affected files:
#!/bin/bash FILE=$1 TIMESTAMP=`date +%s` if [ -f $FILE ] then rrdtool dump $1 > $1.xml sed -i "s/<lastupdate>.*<\/lastupdate>/<lastupdate> $TIMESTAMP <\/lastupdate>/" $1.xml rm $1 rrdtool restore $1.xml $1 rm $1.xml else echo "File does not exist: $1" fi
Save it somewhere in your $PATH, and chmod +x it. You may also wish to change /bin/bash to a different compatible shell, as you may not have bash installed.
To use it, simply stop luci_statistics (and anything associated with it – check ps to see if any collectd processes are still running). Then, run something like this:
find /srv/rrd/ -name '*.rrd' | xargs -n 1 rrdfixer
where /srv/rrd/ is the path to your RRDs that you want fixed, and rrdfixer is the name of the script.
What happens to the RRDs is that instead of proper timestamps, “NaN” gets inserted instead. Simply replacing these with the current time won’t fix the bad data, but it will at least allow new data to be written to the file.