Circular buffer in flash
Simply have a counter in your snapshots (you probably already do), and make them fixed-size (either individually, or by making your 512 B sectors).

Your search for the point that the pointer becomes non-consecutive shouldn't take long at all!

What you're looking for is a binary search (wikipedia and literature certainly have information on this standard search algorithm):


Take the counter of the first and the last sector. Compare!
if #last > #first, then you're in the special case that your flash has been written exactly full, for an integer amount of times. I.e., your write point is at the very beginning.
if #last &lt; #first: Your write pointer is somewhere in the middle between the first and the last. Set oldlast = last, compare #first > (middle of old interval); if that's true, the write pointer is in the lower half of your flash, i.e. [first, middle], else in the upper half, i.e. [middle, oldlast]
repeat this search algorithm in the half that you just found out contains the write pointer


The worst case for this search algorithm takes 23 steps to find the right sector. I doubt that's a problem.