You can easily create an image of a entire drive encompassing all partitions/bootloaders/etc.
Personally, I'd just use a Linux LiveCD/USB and then run a terminal command like "sudo dd if=/dev/disk/by-id/ata-WDC_WD3200BJKT-... bs=1K | gzip --fast > drive.img.gz". That'll create a compressed drive image of a drive (a 320GB WD in this case), and save it to a file in the current directory named "drive.img.gz", so you probably want the current dir to be a network share or a large (non-FAT32) USB drive (the image file will be many GB and take a long time to create).
These aren't smart tools, so they can't strip unused space out of the image, which means images take longer to create/restore and can be larger than necessary. But these tools have the advantage of being simple and ubiquitous (these tools are included with all non-Windows OSs). Hopefully, the compression will work well, but on a well used drive, the free space will be full of deleted files, which might not compress well.
To improve compression, you can zero out the free space prior to creating the image, but if the drive is relatively new, the free space is probably full of zeros anyway.
Restoring the image would be as simple as running the command in reverse. "gunzip < drive.img.gz | sudo dd of=/dev/disk/...whatever... bs=1K"