Rebuild partition table on external HDD - not writable
Solution 1:
OS X uses three different types of valid partition tables. Only one of those is written to a particular disk:
- GUID partition table
- Apple Partition Table
- MBR
The default partition table on OS X is the GUID partition table.
Depending on the previously used partition table on your disk you have to use different tools to create/change/write it:
- gpt for GUID partition table
- pdisk for Apple Partition Table
- fdisk for MBR
After additional informations given by the OP (testdisk results) and checking it in a virtual machine it's highly probable that the disk was formatted with an Apple Partition Map. Consequently use pdisk to rebuild the partition map.
pdisk:
A typical disk formatted with an Apple Partition Table looks like this:
Driver Descriptor Map: Block 0 Size: 1 Block
Apple Partition Table: Block 1 - 63 Size: 63 Blocks
Apple_Free: Block 64 - 262207 Size: 262144 Blocks
1st partition: Block 262208 -
Apple_Free: Size: 262144 Blocks
...
Apple_Free: Size: 262144 Blocks
last partition
Apple_Free: Size: 16 Blocks
To recreate the partition map do the following:
- attach the external drive
- detach any other external drive
- open Terminal and enter
diskutil list
to get the DiskIdentifier (in the step below I assume your DiskIdentifier is disk1 - enter
diskutil unmountDisk /dev/disk1
-
enter
sudo pdisk /dev/rdisk1
You will get the following output:Edit /dev/rdisk1 -
Command (? for help): -
Now enter
c
then enter the start block, the size of the first partition and the name. You have to hit the enter key after every input. Repeat this for the next two partitions. At the end it should look like this:Command (? for help): c
First block: 262208
Length in blocks: 419430400
Name of partition: part1
Command (? for help): c
First block: 419954752
Length in blocks: 838860800
Name of partition: part2
Command (? for help): c
First block: 1259077696
Length in blocks: 694447456
Name of partition: part3
Command (? for help): -
At the last prompt enter
w
theny
to write the changes to disk and finallyq
to quit pdisk:Command (? for help): w
Writing the map destroys what was there before. Is that okay? [n/y]: y
The partition table has been altered!Command (? for help):
The missing volumes should mount automatically. Otherwise enter
diskutil mountDisk /dev/disk1
. Enterq
at the last prompt to quit pdisk, then quit Terminal, open Disk Utility and check the recovered volumes for errors.
gpt:
In the example below I assume the DiskIdentifier of your external disk is disk1 (check this with diskutil list
)
First you have to unmount the external disk:
diskutil umountDisk disk1
Remove the current MBR and create a GPT with gpt:
sudo gpt create -f /dev/disk1
First rebuild the EFI entry with:
sudo gpt add -b 40 -i 1 -s 409600 -t C12A7328-F81F-11D2-BA4B-00A0C93EC93B disk1
The EFI partition is a fixed sized partition near the beginning of every GUID partitioned disk (using OS X partitioning tools)
Then add the JHFS+ partition entries with the TestDisk findings:
sudo gpt add -b StartBlock -i IndexNumber -s SizeOfVolume -t 48465300-0000-11AA-AA11-00306543ECAC disk1
Example for the first OS X partition:
sudo gpt add -b 409640 -i 2 -s SizeOfHFSVolume1 -t 48465300-0000-11AA-AA11-00306543ECAC disk1
After adding a partition with gpt you may have to unmount disk1 with diskutil umountDisk disk1
again if your get a "resource is busy" error adding additional partitions.
Increase the index number by 1 for every new partition.
Listed below are answers to similar questions (partly covering other file systems like ExFAT)
- How to fix GUID hard drive corrupted to MBR?
- HFS+ invalid number of allocation blocks
- Hard drive no longer accessible
If you run into problems, leave a comment to the answer with @klanomath.