But if you insist and want a free tool, you can put any bootable linux distro with Gnome on USB stick (Ubuntu?) and then use GParted to clone an entire disk.
There are several guides for GParted online. However if the disk was indeed MBR then you won't be able to boot if you don't enable CSM in the BIOS which will prevent you from having ReBar/Smart access memory enabled.
You will probably see NTFS instead of ext4 and wont have swap partitions if the disk was with windows, but this is roughly what you will be presented with. Note: operations you do in GParted are simply queued, and you need to Apply them before they take effect.
Aways read and verify what will happen when you want to Apply, in order to avoid your own errors that could potentially destroy data.
If you are simply copying pasting partitions from disk to disk, you might be missing the boot record on the destination disk and would need to rebuild it in order to boot from the cloned disk.
It is a technical thing, so perhaps just use GParted to check or shrink/resize the partitions before copying.
Afterwayds you can use the command line tool to copy the whole disk to another empty disk that can contain it.
For that in Linux the command line (terminal) will be (depending on the live distro you might need to prefix "sudo " before it to run as admin):
Bash:
dd if=/dev/sdInput of=/dev/sdOutput bs=10M
You will deduce sdInput and sdOutput from GParted. Those are your source and destination drive names as seen by the OS. The bs=10M just means to copy in 10 megabytes per write cycles which should be ok. You can increase it if you wish, just dont overdo it since it can slow down the copy. This operation will overwrite the whole destination disk byte per byte exactly as the original, and everything there was on it will be lost.
If on the other hand you cannot clone the whole drive with "dd" because you already have some partitions but still want to copy the partitions of the source drive (have a merge of both disk so to speak) AND KEEP the disk bootable, then:
- make sure you have space on the destination disk equal to the partitions already present on it
- calculate the space needed for the partitions from the source drive and add a few megabytes of buffer
- select the partitions on the destination drive and click the Move button
- move the partition(s) after the space required for the source partitions
- apply the changes
- now that you have free space on the beginning of the disk proceed to copy paste the partitions from the source disk by keeping the same order
- apply the changes again
Now that you have copied the partitions on the destination disk, and they have the same order, you need to copy the boot record.
You can do this with "dd". The boot record are the first 512 bytes of the disk, but you dont need the partition table from it since you already made them. You need just the boot code that contains what the original OS from the source disk had. This is stored in the first 446 bytes of the disk.
Bash:
dd if=/dev/sdInput of=/dev/sdOutput bs=446 count=1
So this will copy the first chunk of 446 bytes from the source disk to the destination disk, once. the sdInput and sdOutput are again deduced from GParted. This will make the destination disk run the boot code that was originally on the source disk, and if all partitions on the destination disk are in the same positions as they were on the source disk, it should allow you to boot into the OS you had just cloned.