SYNOPSIS

    use Data::ParseBinary::FileSystem::MBR qw{$mbr_parser};
    my $data = $mbr_parser->parse(CreateStreamReader(File => $fh));

Can parse the binary structure of the \s-1MBR\s0. (that is the structure that tells your computer what partitions exists on the drive) Getting the data from there is your problem.

This is a part of the Data::ParseBinary package, and is just one ready-made parser. please go to the main page for additional usage info.