Linux Foundation’s LFCS and LFCE Certification Preparation Guide ($79)Get This Book   

How to Migrate Windows 10 from HDD to SSD Using Clonezilla

This tutorial represents a practical excerpt on how to migrate (also known as cloning) a Windows 10 Operating System from a large HDD with multiple partitions, such as C:, D:, to a smaller SSD using a Linux distribution which includes Clonezilla utility.

Clonezilla utility can run from PartedMagic Linux distribution CD ISO image or directly from Clonezilla Linux distribution CD ISO image.

This guide assumes that both disks (old HDD and SSD) are physically plugged-in into your machine simultaneously and Windows OS is installed on a disk with MBR partition scheme table. Fdisk command line utility should display the disklabel type as DOS.

Read Also: 8 Open Source Disk Cloning and Backup Solutions for Linux

If disk in partitioned in MBR layout from UEFI, you should clone all partitions, such as Windows RE partition, EFI System partition, Microsoft Reserved partition and Microsoft basic data partition which holds the Windows OS partition, typically the C: drive. In this case Fdisk command line utility should report the disklabel type as GPT.

On the below screenshots you can review the initial Windows partitioning scheme in case of a MBR layout style and GPT partition layout performed from UEFI.

MBR Partition Layout from Disk Management

Check MBR Partition Layout

Check MBR Partition Layout

GPT Partition Layout from Disk Management

Check MBR Partition Layout

Check MBR Partition Layout

Step 1: Shrink C: Partition of Windows System

Be aware that in the case your windows C: partition from the HDD is larger than the total size of your SSD you will need reduce its size to fit on the SSD.

The calculations for this step are simple:

System Reserved + Recovery + EFI partition + Windows C: partitions must be smaller or equal than the total size of the SSD reported by a utility such as fdisk.

1. To shrink C: partition from Windows, first open a Command Prompt window and execute the diskmgmt.msc to open Windows Disk Management utility which will be used to Shrink the volume (assuming that windows is installed at the beginning of the disk on the second partition, after the System Reserved partition and has C: letter assigned) in order to reduce its size to minimal.

Shrink C Partition

Shrink C Partition

Feel free to use other partitioning tools for this step, such as Gparted run from a live Linux ISO, to reduce C: drive size to minimal.

2. After you’ve reduced the size of C: partition, plug the SSD drive to your machine motherboard and reboot the machine into Clonezilla utility (use Clonezilla ISO image or <arel=”nofollow” href=”https://partedmagic.com/downloads/” target=”_blank”>Parted Magic ISO), enter to Bash shell interface and check both disks partition table and size using the below commands.

# fdisk -l /dev/sda
# fdisk -l /dev/sdb
Check Partition Table Size

Check Partition Table Size

Be aware that your drives names would be sda for the first disk, sdb for the second and so on. Choose the disk with maximum attention so you won’t end-up cloning the wrong device and destroy all data.

To match the correct disk source (HDD in this case) and disk destination target (SSD) use the size and the partition table reported by fdisk command. Fdisk output will show that the SSD should be smaller in size than your HDD disk and should have no partition table created by default.

In case of a GPT disk, the HDD partition table should look as illustrated on the below screenshot.

$ su -
# fdisk -l /dev/sda
# fdisk -l /dev/sdb
Check Partition Disk Label

Check Partition Disk Label

Step 2: Clone Disks Using Clonezilla

3. Next , clone only the MBR (stage one bootloader + partition table) from the HDD to the SSD target disk using one of the below commands (assuming that sda represents the drive where Windows OS is installed and sdb the SSD disk).

# dd if=/dev/sda of=/dev/sdb bs=512 count=1
or
# sfdisk -d /dev/sda | sfdisk -f /dev/sdb
Clone Disks Using Clonezilla

Clone Disks Using Clonezilla

In case of a GPT partition style you should clone the first 2048 bytes:

# dd if=/dev/sda of=/dev/sdb bs=2048 count=1

Or use sgdisk utility. Be aware that if you copy partition table from sda to sdb you should inverse the order of disks when using sgdisk.

# sgdisk -R /dev/sdb /dev/sda

After cloning the MBR/GPT, run fdisk command again with the -l flag to verify if the partition table matches on both disks.

# fdisk -l /dev/sda
# fdisk -l /dev/sdb
Verify Partition Table

Verify Partition Table

4. By now both drives should have the exact partition table. On the target disk now delete all the partitions that follow after the Windows partition in order to start with a clean partition table with the entries necessaries only for system reserved and windows.

You won’t clone data from D: (or other partitions that follow Windows) from the old drive. You’re basically cloning only the first two partitions from the old HDD. Later you will use this unallocated space left behind to extend the C: partition by incorporating all the unused space from SSD.

Use fdisk utility as described below to delete partitions. First run the command against your SSD target drive (/dev/sdb this case), print partition table with p key, press d key to start delete partitions and choose the last partition number from the prompt (in this case the third partition) as illustrated in the below screenshots.

# fdisk /dev/sdb
Delete Partition Table

Delete Partition Table

In case your drive has more than one partition following after the Windows partition, make sure you delete all of them. After you’ve finished removing all unneeded partitions, press p key again to print partition table and if, by now, only the two required Windows partitions are listed, you are safe to hit on w key in order to apply all changes.

Confirm Partition Changes

Confirm Partition Changes

The same procedure for deleting last partitions applies for GPT disks also, with the mention that you should use cgdisk utility which is intuitive to work with in manipulation a disk layout.

Don’t worry about destroying backed-up partition table at the end of the GPT disk, cgdisk will make the appropriate changes on both partition tables and will save the new disk layout table at the end of the disk automatically.

# cgdisk /dev/sdb
Delete GPT Partition

Delete GPT Partition

And the final GPT disk report with the last 4,9 GB partition deleted.

Verify GPT Partition Table

Verify GPT Partition Table

5. Now, if everything is in place, start Clonezilla utility, select device-device mode, run from beginner wizard and select part-to-local_part cloning option.

Use the below screenshots for guide.

Select Clonezilla Device Mode

Select Clonezilla Device Mode

Select Clonezilla Beginner Mode

Select Clonezilla Beginner Mode

Select Clonezilla Local Partition Clone

Select Clonezilla Local Partition Clone

6. Choose the first local partition from the list (sda1 – System Reserved ) as source and press Enter key to continue.

Select Partition to Clone

Select Partition to Clone

7. Next, choose the local target partition, which will be the first partition from the second disk, (/dev/sdb1) and press Enter key to continue.

Select Local Target Partition

Select Local Target Partition

8. On the next screen choose to Skip check/repair file system and press Enter key again to continue.

Skip Check Repair Filesystem

Skip Check Repair Filesystem

9. Finally, press Enter key again to Continue and answer with yes (y) twice to accept the warnings and start the cloning process.

Confirm Partition Changes

Confirm Partition Changes

Start Cloning Partition

Start Cloning Partition

10. After the cloning process of the first partition finishes select to enter command line prompt, run clonezilla and repeat the same steps for next partitions (source sda2 – target sdb2, etc).

Clone Second Partition

Clone Second Partition

11. After all windows partitions are cloned, reboot the system and physically unplug the HDD drive or, better, tamper BIOS settings in order to set SSD as primary boot drive instead of old HDD.

Step 3: Resize Windows Partition

12. You can run Gparted utility to check partitions sanity and extend windows partition from Linux or you can just boot into Windows and use Disk Management utility to do this job. The below screenshots illustrate how to use both utilities.

Extend Partition using Gparted Live CD

Resize Partition Using GParted

Resize Partition Using GParted

Resize Partition Size

Resize Partition Size

Extend Partition using Windows Disk Management utility directly from Windows.

Extend Windows Partition

Extend Windows Partition

Select Disk to Extend

Select Disk to Extend

That’s all! The C: partition is now expanded to the maximum size of your SSD and Windows can now run at its maximum speed on a brand new SSD. The old HDD has all data intact.

Connect the hard-disk again in order to use it in case you’ve physically removed it from the motherboard. You can delete system reserved partition and windows partition from the old HDD and create a new partition instead of these two. The other old partitions (D:, E: etc) will remain intact.

Conclusion

With Clonezilla you can also choose to image the partitions and save them to an external HDD or a network location. In this case you must also backup HDD MBR/GPT with one of the following commands and save the MBR image to the same directory where your clonezilla images are kept.

MBR backup to file:

# dd if=/dev/sda of=/path/to/MBR.img bs=512 count=1
or
# sfdisk -d /dev/sda > =/path/to/sda.MBR.txt

GPT Backup to file:

# dd if=/dev/sda of=/path/to/GPT.img bs=2048 count=1
or
# sgdisk --backup=/path/to/sda.MBR.txt /dev/sda

For a future restoration of your Windows system from a network location, first restore the MBR sector from the saved imaged above using one of the below commands, then proceed with restoring each clonezilla partition image one by one.

MBR image restore from file:

# dd if=/path/to/MBR.img of=/dev/sda bs=512 count=1
or
# sfdisk /dev/sda < =/path/to/sda.MBR.txt

GPT image restore from file:

# dd if=/path/to/GPT.img of=/dev/sda bs=2048 count=1
# sgdisk - -load-backup=/path/to/sda.MBR.txt /dev/sda

Read Also: How to Clone or Backup Linux Disk Using Clonezilla

This method has been used multiple times on BIOS motherboards and on UEFI machines with Windows installed from Legacy Mode (CSM) or directly from UEFI without any error or data loss.

If You Appreciate What We Do Here On TecMint, You Should Consider:

TecMint is the fastest growing and most trusted community site for any kind of Linux Articles, Guides and Books on the web. Millions of people visit TecMint! to search or browse the thousands of published articles available FREELY to all.

If you like what you are reading, please consider buying us a coffee ( or 2 ) as a token of appreciation.

Support Us

We are thankful for your never ending support.

Matei Cezar

I'am a computer addicted guy, a fan of open source and linux based system software, have about 4 years experience with Linux distributions desktop, servers and bash scripting.

Your name can also be listed here. Got a tip? Submit it here to become an TecMint author.

RedHat RHCE and RHCSA Certification Book
Linux Foundation LFCS and LFCE Certification Preparation Guide
The Complete Linux System Administrator Bundle
Become an Ethical Hacker Bonus Bundle

You may also like...

7 Responses

  1. Gessival Reis says:

    Excellent documentary!

  2. Daniel Jeznach says:

    Hi, this is fantastic article, it helped me to save about 50$. I had to migrate HDD to SSD with Win8.1 with UEFI boot, used clonezilla for cloning partitions, but didn’t know how to copy boot records.

    I almost gave up and I was considering buying one of these commercial magic tools to do the job for me, but then I found this article. I used sysrescuecd Linux and followed first steps, now everything here works like a charm on new SSD. Thank you.

  3. Internet User says:

    I found that Clonezilla was disrupting the partition table on a nvme drive with windows 10 bitlocker encrypted drive. I was able to get this to work with 2 changes. Disable bitlocker before shutting down (but did not decrypt), and then using dd instead of Clonezilla to copy each partition. I suspect the block by block option in Clonezilla would work too.

  4. Iulian Murgulet says:

    Congratulations Matei for this good tutorial.

    Maybe an extra step . Before start cloning, make a fstrim on the SSD in case of a old/used SSD.

  5. Matei Cezar says:

    And what’s the procedure in case the Windows partition has 500GB, for example, and your SSD only 60 or 120 GB? How do you transfer the OS to a SSD in this case. You can do it in expert mode and skip checking the destination disk, but if the size of the Windows partition, in case of a production machine, exceeds the SSD size, then data corruption will surly occur! Yes, you can disable page file, hibernation and delete all system restore points to free some space, but this is just a Windows trick to save space. What if the machine was put into hibernation.

    You don’t want to delete hiverfile.sys. The point of cloning is to do exactly what it implies: clone, bit by bit, sector by sector, block by block, all data from one drive to other. If Windows diskmgmt tool does an execrable job in shrinking space, then you can use an Open Source Linux distro to shrink a Windows OS partition to it’s minimal data limit.

  6. Martins Almeida says:

    Unnecessary complicated procedure and not even complete, as many times you are not able to shrink windows system partition without previously (and temporarily) removing virtual memory and disabling system protection.

    I would prefer moving any data partition to an exterrnal disk, then remove the data partition, leave all other partitions adding up to the size of the ssd disk, and run the clonezilla in expert mode and select not checking the size of the destination disk, leaving all remaining options as default.

    • Matei Cezar says:

      What if the you have a 4 TB HDD, with the Windows system installed on a 200 GB partition and the rest of the space forms the D: partition with 3 GB occupied space. What’s the easy way? Wait a day to transfer 3GB of data from one HDD to other and then crate one big partition to transfer with clonezilla (no check the size of the destination disk) or shrink the windows partition to the size of the SSD and transfer only the Windows partition (with all required pre-partitions, such as Reserved space, certainly).

      Then, on the old HDD you just delete the windows partition and create a new partition. The rest of the partitions on old HDD, the old D: partition will remain intact with with no data touched. The time you gain using this method is way shorter. With disk to disk clone, migrating a 100 GB Windows partition from a HDD to a SSD will not take longer than a couple of ten minutes or roughly one or two hours tops.

Got something to say? Join the discussion.

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.