My somewhat hacky solution would be to have a series of headers like this:
header:
- block number
- address of next block
- checksum
record:
- num bytes of data
- [data]
- checksum
When you power on, you read the first sector of your file, and follow the pointer to the address of the next header. Try reading the data there, and if it passes the checksum, repeat until you reach a block that doesn't pass the checksum. You now know that you've found the last block of valid data. Go back to the last valid header, and start reading data records. Keep going until you find a record that doesn't pass its checksum. That's where you start writing from.
It's not perfect, but given the constraints it should probably work reasonably well.