Here is an easy way to restore things if you have the starting point and size of each partition using fdisk:
In this example we pretend that /dev/sda was wiped out, but the running system still has the info in /sys/class/block/sda
Go into each partition and record the "start" and "size"
hostdev@box /sys/class/block/sda/sda1 $ cat start
2048
hostdev@box /sys/class/block/sda/sda1 $ cat size
2097152
hostdev@box /sys/class/block/sda $ cat sda2/start
2099200
hostdev@box /sys/class/block/sda $ cat sda2/size
62914560
hostdev@box /sys/class/block/sda $ cat sda3/start
65013760
hostdev@box /sys/class/block/sda $ cat sda3/size
520923740
Now create the same 3 partitions at the same starting point and with the same size using fdisk:
Welcome to fdisk (util-linux 2.34).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0x8e7672df.
Command (m for help): n
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (1-4, default 1):
First sector (2048-585524838, default 2048): 2048
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-585524838, default 585524838): 2097152
Created a new partition 1 of type 'Linux' and of size 1023 MiB.
Command (m for help): n
Partition type
p primary (1 primary, 0 extended, 3 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (2-4, default 2):
First sector (2097153-585524838, default 2099200): 2099200
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2099200-585524838, default 585524838): 62914560
Created a new partition 2 of type 'Linux' and of size 29 GiB.
Command (m for help): n
Partition type
p primary (2 primary, 0 extended, 2 free)
e extended (container for logical partitions)
Select (default p):
Using default response p.
Partition number (3,4, default 3): 65013760
Value out of range.
Partition number (3,4, default 3):
First sector (2097153-585524838, default 62916608): 65013760
Last sector, +/-sectors or +/-size{K,M,G,T,P} (65013760-585524838, default 585524838): 520923740
Created a new partition 3 of type 'Linux' and of size 217.4 GiB.