I'm currently trying to move bulky folders from my SSD to my HDD (my Users folder and ProgramData folder). I'm following a short guide on using Directory Junctions to do this effectively. However, this doesn't work for me. This is exactly what I did on my latest attempt:

  1. Locate old Users folder on HDD – the one I want to keep
  2. Install Windows 8 on SSD
  3. Reboot into recovery console – SSD=C: HDD=D:
  4. Copy ProgramData to HDD robocopy /copyall /mir /xj C:\ProgramData D:\ProgramData
  5. Reboot into Ubuntu to copy over anything that failed and delete ProgramData
  6. Reboot into recovery console
  7. Rename C:\Users to C:\Users.old
  8. Make junctions
    1. mklink /J C:\Users D:\Users
    2. mklink /J C:\ProgramData D:\ProgramData
  9. Check with dir that everything looks okay.

However, when I booted back up, the login splash screen was plain blue, I had no user profile picture, and upon logging in, I get:

User Profile Service service failed the sign-in. User profile cannot be loaded

So, I moved ProgramData back again, and renamed Users.old back to Users. This time, the splash screen shows correctly, but I still get the user profile issue.

What did I do wrong?

  • Please somebody help =[ I just tried again and it failed again! I can't use my PC without doing this and I really don't like the registry hack way – Chris Watts Mar 12 '13 at 21:57
  • I've got somewhere! It turns out that because I was using /xj in my robocopy flags, any required junction points would be missing. In order to make it work, they would have to be manually recreated. Instead, I made an image of my drive and moved it to the HDD - then junctions work. Except for ProgramData... I'm still trying to figure it out. – Chris Watts Mar 17 '13 at 11:17

I've found the answer after a lot of playing. The reason this doesn't work is because when copying the data from SSD to HDD, any existing junctions are removed. This is because of the /xj flag in robocopy which is required to stop it from getting into an infinite loop.

In order to get around this, a PowerShell script could be made to do the following:

  1. Copy the data from SSD to HDD with robocopy /copyall /mir /xj C:\Stuff D:\Stuff
  2. For each junction in C:\Stuff, create an identical junction in D:\Stuff
  3. For each junction in C:\Stuff, copy the ACL permissions to the corresponding junction in D:\Stuff
  4. Note the attributes of C:\Stuff with attrib C:\Stuff
  5. Remove or rename C:\Stuff
  6. Create the junction mklink /J C:\Stuff D:\Stuff
  7. Apply the attributes of C:\Stuff to the junction point with attrib /L C:\Stuff +H +I (for example - ProgramData uses these attributes)

Hopefully, this will move everything from C:\Stuff to D:\Stuff whilst maintaining all junction points, permissions, and attributes.

But there is a 'shortcut', which I took. Instead of bothering with all this, I made a complete drive image of C:, and restored it to D: (obviously making sure no files were on D: that would get overwritten). There is free software out there to do this such as Macrium Reflect Free and Drive Image XML.

I then copied any extra data I needed into D:, and proceeded to skip to Step 4 of the above. Afterwards, I just removed all of my Windows files that weren't required on the drive (I had to use my Ubuntu USB stick for this part).

All working!

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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