verbose mode reveals little. erase takes no time at all and the "writing flash" progress bar simply crawls along when loading that file.
"reveals little" ? Really? How many -v did you use?
My recommendation is to run with -v -v -v -v and save the output so you can see everything that is happening.
You will be able to quickly tell what is happening.
Try that and get back to us with what you see.
You should be able to tell how many blocks are being burned with what data
and then how much of the part is being read after the burn for verifying.
i.e. is it trying to burn the entire part, or it is trying to read back the full part for verifying or both?
or something else?
Once you know that you can start to look at options.
(much better than guessing)
There are options to erase the part before burning. It might be that is what enables the code that avoids burning FFs.
(I can't remember how that part of the avrdude code worked - sorry it's been quite a while since I went through the code)
Then there is the option to avoid verifying what was burned.
avrdude is known to be a flaky buggy oddball kludge
I think that is a bit harsh. I'll agree that it isn't very user friendly but
when things are hooked up correctly and the proper options are used it is quite reliable.
I don't think it is time to throw in the towel just yet.