Install HFS+ Rescue
Download from here. Compile and install according to instructions.
Scan the corrupted disk
Usually the block size is 4096.
$ hfsprescue -s1 /dev/sdc1 -b 4096
Cleanup file database
$ hfsprescue -s2 /dev/sdc1 -b 4096
Extract the Extents Overflow File
Volume Header is defect, it is needed to extract the EOF.
$ hfsprescue --find-eof /dev/sdc1 -b 4096
1. Possible block: 4928 | File position: 0x1340000 2. Possible block: 5285 | File position: 0x14a5000 maybe ExtentsOverflowFile or CatalogFile
So the last block is 5285-1=5284:
$ hfsprescue --extract-eof /dev/sdc1 -b 4096 --start-block 4928 --last-block 5284
After that, use
--one-file to test the restored file.
$ hfsprescue -s3 /dev/sdc1 -b 4096
Restore the directory structure
$ hfsprescue -s4
Move the restored files to the correct directories
$ hfsprescue -s5
$ hfsprescue -s6