In many cases, you're supposed to be able to read most of the different parts of memory from the Arduino chip. (In a few cases, the lock bit has been set so that you can't.)
Sometimes, it's necessary to unplug/re-plug the USB cable once for this to work. I think it's effectively similar to pressing the RESET button in that the board is freshly powered and is more willing to give up the information. They're finicky like that. I'm guessing that once the serial connection has been opened and a START command sent from the host it now doesn't want to allow you to back anything up. So maybe the trick is to boot it up and then go for it.
sudo avrdude -c arduino -P /dev/ttyUSB0 -p m1284p -b 57600 -F -U flash:r:flash_backup_file.hex:r
sudo avrdude -c arduino -P /dev/ttyUSB0 -p m1284p -b 57600 -F -U eeprom:r:eeprom_backup_file.hex:r
sudo avrdude -c arduino -P /dev/ttyUSB0 -p m1284p -b 57600 -F -U hfuse:r:hfuse_backup_file.hex:r
sudo avrdude -c arduino -P /dev/ttyUSB0 -p m1284p -b 57600 -F -U lfuse:r:lfuse_backup_file.hex:r
sudo avrdude -c arduino -P /dev/ttyUSB0 -p m1284p -b 57600 -F -U efuse:r:efuse_backup_file.hex:r
It wouldn't surprise me if it could talk faster (
-b 115200) than what you're trying.
I normally bring up the Arduino IDE software from Arduino.cc, configure the board type, etc and then verify the Board Info as returned from the chip. You can use this information to slightly change the avrdude configuration if necessary.
I just pulled my flash with the following (noting that I've got a Robo 3D ROBOmainboard that's based on an Arduino Mega 2560 via a straight serial cable connection without an FTDI chip'd cable/dongle/programmer/whatever):
avrdude -c avrispmkII -P /dev/cu.usbmodem14201 -b 115200 -p ATmega2560 -U flash:r:backup_flash.bin:r