Take the 2-minute tour ×
Ask Ubuntu is a question and answer site for Ubuntu users and developers. It's 100% free, no registration required.

My current situation is:

  • One hard disk
  • Dual boot Ubuntu 11.04 and Windows 7. Partitions:
    • 100MB Windows System thingy
    • 144GB Main Windows
    • 160GB Ubuntu
    • 4GB Swap
    • 12GB System Restore stuff

Now I want to install an 80GB SSD and move Ubuntu to it. AFAIK I need to:

  • Shrink the 160GB Ubuntu partition to 80GB
  • Copy it over to the SSD
  • Change fstab to mount the SSD as /

How do I do the second? And what do I need to do about Grub?

share|improve this question
    
[Offtopic, sorry, should've put in a comment] It is also better to simultaneously enable TRIM support for your SSD, as mentioned at webupd8.org/2013/01/enable-trim-on-ssd-solid-state-drives.html –  user2074854 Dec 8 '13 at 14:06

3 Answers 3

up vote 36 down vote accepted

You want to copy the FILES, not the whole partition ( including its free space ), so you don't need to resize the partition first. Boot from the livecd and mount both the HD and SSD ( after formatting a partition on the SSD of course ), then copy all of the files over:

sudo cp -ax /media/hd /media/ssd

Use the correct names for the hd and ssd mount points of course. Then you just need to edit the /etc/fstab on the ssd to point to the new fs UUID ( you can look it up with blkid ). Finally you need to install grub on the ssd:

sudo -s
for f in sys dev proc ; do mount --bind /$f /media/ssd/$f ; done
chroot /media/ssd
grub-install /dev/ssd
update-grub

Of course, use the correct device for /dev/ssd. The whole disk, not a partition number. Finally reboot and make sure your bios is set to boot from the SSD.

share|improve this answer
4  
I'm posting this comment from my system running perfectly on the SSD. Thanks –  Bart van Heukelom May 6 '11 at 12:14
1  
Just something I found doing this with a second PC: The live CD needs to be 64 bits if the OS you're moving is 64 bits too, or the chroot won't work. –  Bart van Heukelom Aug 28 '11 at 22:45
    
What does the chroot command do, and why is it necessary? –  codeape Oct 20 '11 at 12:26
2  
I found the command should be sudo cp -ax --target-directory=/path/to/ssd /path/to/hdd/* or else it copies over the files but dumps it into a directory on the ssd instead.. –  Pwnna Aug 12 '12 at 15:18
1  
@Balthazar: When using chroot, the new root directory needs to be a complete enough environment that whatever programs/scripts you're going to run can act as if it's a normal root filesystem. Those mount commands drop the "sys", "dev", and "proc" filesystems (virtual filesystems with non-disk-backed files e.g. /dev/zero, which returns all zeros when read) into the right places so that they'll appear in the right place when inspected from within the chroot jail. –  azernik Apr 14 '13 at 20:51

Considering your HDD is /dev/sda and SSD is /dev/sdb and partitions are properly sized, you may use simple cp:

cp /dev/sdaX /dev/sdbY

Where X and Y are corresponding partition numbers.

However this method will copy 80GB of data and all sectors on your SSD will be marked as "occupied" initially.

share|improve this answer
    
Sound easy enough, but that last sentence doesn't mean much to me. Is it, or could it be, a problem? –  Bart van Heukelom May 5 '11 at 14:56
    
Well it might negatively impact your SSD speed (however with TRIM support it would recover later). You may read en.wikipedia.org/wiki/TRIM for more information. But, you should really go the route described in the other reply (copy files, not partitions). If you still decide to copy the whole partition, you need to perform grub-install/grup-update as well. –  Vilmantas Baranauskas May 6 '11 at 7:41
1  
I wouldn't recommend this approach, it will copy all the filesystem errors you may have on your old partition. The cp -ax approach is both quicker and safer. –  Andrei Sosnin Nov 23 '12 at 17:36

I was able to do this migration successfully thanks to @psusi's instructions, however I observed one "gotcha."

After installing Grub on the new SSD, it still wouldn't boot - it was looking for the ramdisk image using the UUID of my old OS drive, which I had removed. Using the --recheck option fixed this:

$ grub-install --recheck /dev/ssd

This encourages grub to re-scan the BIOS, identify the new drive, and presumably use its UUID when passing the "root=" parameter to the kernel.

share|improve this answer

Your Answer

 
discard

By posting your answer, you agree to the privacy policy and terms of service.

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