Possible Duplicate:
How do I easily copy or clone a Windows boot partition onto a new hard drive?

How do I clone my current HDD to a new one? It's getting constant chkdsk operations every time I start windows which is making me worrisome. I've looked around but i'm getting conflicting recommendations on how to go about it. Can I just do a direct dd command via linux or will this not work because of the ntfs formatting?

How should I go about it instead?


Before you decide to do a clone, you need to first consider that the disk checks could be a symptom of a hardware failure. Run a memory test and hard drive test (a simple "cat /dev/sda > /dev/null" with a live Linux CD that returns no error works fine in a pinch) and make sure your CPU isn't overheating and you don't have bad capacitors or a flaky power supply, because there's a reason the disk checks happen.

Alternatively, you can foolishly disable all automatic disk checking on a hard drive (I'll assume C: for the example) by typing the following at an elevated command prompt: "chkntfs /X C:" And live blissfully ignorant of any and all filesystem errors that never get checked for again.

Now, on to the cloning option, which may or may not fix your issue, but inquiring minds want to know. Assuming you want to clone to a hard drive of the same or greater size, you can certainly use the Linux "dd" command, i.e. "dd if=/dev/sda of=/dev/sdb" will get the job done for copying sda -> sdb. Any live Linux CD or USB can do this if it can detect your hard drives. If the destination is larger, you'll not be able to use the extra space without creating a new partition in Windows. Note that "easy" tools like GParted may not always work for cloning; you MUST copy the boot code in the MBR to the new disk for that disk to boot the partition, and you must copy the NTFS boot code that occupies sectors beyond the partition boot sector. "dd" will do this automatically because it copies, byte for byte, everything on the disk, including "free space" in the filesystem and the unused sectors between the MBR and the first partition.

I have done a lot of work with cloning filesystems manually (read: the really hard way) using only Linux "dd" and the ntfsprogs tool "ntfsclone" but I guarantee you that you don't want to go through that trouble. Your partition must start on the exact same sector of the disk as before, you must copy the boot code from the MBR and the boot sector AND the NTFS boot area after the boot sector, and if you throw resizing into the mix, it only gets worse; and on the extremely unlikely chance that your computer decides to represent the sector geometry of the new drive differently, you have to hex edit the NTFS boot sector to modify the sector count also.

If you can do it with dd, do it with dd. If not, another user suggested Clonezilla which might also work. The latest GParted live CD may get the job done as well, but I haven't tested that.

If you want to live an exciting life, I'll detail the hard way that I do it when necessary. There are modifications that can be made to this process if needed, but it's the reader's job to figure those out on a case-by-case basis. Assume here that /dev/sda with only one partition is larger than destination /dev/sdb, just so resizing is thrown in there too. If this eats your data, it's not my problem. And now, the hard way to clone a disk with a single NTFS partition from one hard disk to another (assuming the disks are 100% good/healthy/not going to die):

ntfsresize -fns 70G /dev/sda1 (If that command indicates a successful outcome:) ntfsresize -fs 70G /dev/sda1 dd if=/dev/sda of=/dev/sdb bs=512 count=1 fdisk -u /dev/sdb (fdisk commands follow, comma = hit [enter]) p, (note the starting sector of /dev/sda1) d, n, p, 1, (enter starting sector previously noted), +70G, t, 7, a, 1, w, (end of fdisk commands) dd if=/dev/sda1 of=/dev/sdb1 bs=512 count=32 ntfsclone -O /dev/sdb1 /dev/sda1 (wait for what seems like forever) fdisk -u /dev/sdb p, (note the starting sector of /dev/sda1) d, n, p, 1, (enter starting sector previously noted), (hit enter to accept default of last disk sector), t, 7, a, 1, w, (end of fdisk commands) ntfsresize -f /dev/sdb1

That's it. My advice to find an automated solution stands, but it wouldn't be a complete answer to your question if I didn't include the hard way.

  • both my HDDs are 500gb if that means anything. But if I use something like clonezilla do I still have to worry about the MBR? I'm currently dual booting with linux, but windows is my primary and what I'm most concerned about saving. – randomafk Mar 13 '12 at 6:04

There are various tools, sometimes the manufacturer will have a tool to transfer to a new drive. There are some free tools such as clonezilla that can do disk to disk cloning. Paid versions are acronis true image, ghost, etc.

Disk to disk would be the best option using clonezilla or similar program.


as I know, Acronis True Image should be what you need. enter image description here

If you need a free alternative, then you can use Seagate Discwizard which should be something like lite Acronis version. There is a way to use it also for non Seagate HDDs.

However, I would run first some diagnostics on your old HDD to find the problem. I used Hitachi Drive Fitness Test, free botable CD which also offers very detailed tests.

Not the answer you're looking for? Browse other questions tagged or ask your own question.