Are you certain that /dev/sdb is a san drive? It looks to me that it is an internal or external drive and you mapped dm-0 to it.
Also /dev/sda has a corrupt partition table. You might want to fix that before rebooting.
You could use losetup to attach to /dev/sda at an offset to double check where /dev/sda1 starts. Make a first guess of 63 blocks (63*512 bytes) for XP and Linux, and 1024 or 2048 blocks for Vista and Windows 7.
Then you can use "df --block-size=512" to learn the size of the filesystem. The other partitions may start on cylinder boundaries, but using 512 byte blocks consistently with the df and fdisk commands will prevent rounding errors.
example:
sudo /sbin/losetup -fs /dev/sda -o $((63*512))
# some distro's versions of losetup don't have the -s option to tell you which loop device was found.
# use "sudo /sbin/losetup -a" to check in that case
# Check the filesystem before trying to mount it, or use it
sudo file -s /dev/loop0
sudo df --block-size=512
Given the filesize in blocks, you can add the size to the start of the partition to obtain what may be the start of the next partition.
If these partitions are already mounted and you just mucked up the table in the current session, then enter:
"cat /proc/partitions" to display the size of the partitions as they are mounted.
Code:
cat /proc/partitions
major minor #blocks name
8 0 976762584 sda
8 1 102400 sda1
8 2 62918572 sda2
8 3 1 sda3
8 4 12933120 sda4
8 5 8385898 sda5
8 6 83883366 sda6
8 7 387439573 sda7
8 16 1953514584 sdb
8 17 1953504000 sdb1
253 0 1953503484 dm-0
These sizes match what you would see using "sudo /sbin/fdisk -lu" if the partition table wasn't mucked up.