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

Result:

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.

Restore files

$ hfsprescue -s3 /dev/sdc1 -b 4096

Restore the directory structure

$ hfsprescue -s4

Move the restored files to the correct directories

$ hfsprescue -s5

Cleanup

$ hfsprescue -s6