I have the following situation:

My current Ubuntu (12.04) installation is running from an external HDD (250 GB) because I was to lazy to buy an new internal hdd. Now i've got a new internal (120GB) and i want to move everything to the internal. Installing Ubuntu new is out of disscussion because its to peronalized.

Luckily (i hope so) the root partition is partitioned with LVM, so i hope i can move the partition to the smaller internal HDD.

Is this possible? And where do i find help?

EDIT: This question already is quite old and could be outdated. I added the Ubuntu version that was used back then.

  • related question -- the above answers are not clear enough... – MeSo2 Feb 16 at 20:06
  • the above two answers are not clear enough to me. So a started a new post. – MeSo2 Feb 16 at 20:10
up vote 33 down vote accepted

As you suspect, this is extremely elegant to do using LVM.

Shrink the existing installation to fit the smaller disk.

Physically install the new harddisk, format and pvcreate it, use vgextend to add it to the same vg as your root partition

Use pvmove to transparently move all data away from the old partition

Use vgreduce to remove your external hd from your vg. Unplug the old disk /dev/sdOLD.

In the example below:

  • /dev/sdOLD stands for the old partition to replace
  • /dev/sdNEW stands for the new partition to take its place.
  • vgX stands for the volume group

Example: Of course, you have to be 100% sure that your are using the right devices. Also, having complete and up-to-date backups, removed from the system, is essential.

pvcreate /dev/sdNEW
vgextend vgX /dev/sdNEW
pvmove /dev/sdOLD
vgreduce vgX /dev/sdOLD

Use update-grub and grub-install to make your new root disk bootable

Done.

  • It would have been nice if you had provided concrete examples. – isaaclw Jan 5 '13 at 0:50
  • 12
    Ah, that's nice voting down a valid accepted post with helpful information. I intentionally did NOT give a concrete example, because the danger is that someone will mindlessly copy-paste that and destroy his/her data. If you do anything with lvm, you should be able to find you bearing with the pointers i give. – Floyd Jan 5 '13 at 14:28
  • 1
    Worked on Cento7 As well. Steps provided here were enough for me to learn a little and google a little. Spot-on – terary Mar 17 at 8:07
  • centos: use grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)" ... from here – terary Mar 17 at 10:57

First, if you used the whole 250GB disk for your current installation, you'll need to shrink it to fit the 120GB disk. You can only shrink an ext4 filesystem while it's unmounted, so you'll need to boot off an Ubuntu live system (CD or USB), or a specialized maintenance live system such as GParted live. You can use resize2fs or GParted to resize the existing filesystem.

Once you've shrunk the filesystem(s) of your existing installation to fit on the new disk, you can do the rest of the move with the filesystem mounted if you like. If the existing filesystem fits on the new disk, you can do the transfer without unmounting anything or rebooting.

In the following description, I'll show how to move from the physical volume /dev/sdb1 to the physical volume /dev/sda1, with an existing volume group called oldvg. Be sure to adjust the disk letters and partition numbers to match your system.

To do a live transfer:

  1. Partition the new disk, using the partitioning tool of your choice (cfdisk, fdisk, parted, …). See e.g. How do I add an additional hard drive?
  2. Create a physical volume on the new disk: pvcreate /dev/sda1
  3. Add this physical volume to the existing volume group containing the logical volume(s) you want to move: vgextend oldvg /dev/sda1
  4. Move the logical volumes from one physical volume to another: pvmove /dev/sdb1 /dev/sda1
  5. Split the existing volume group in two: vgsplit oldvg newvg /dev/sda1

Another method is to make the existing logical volume(s) a mirror volume with lvconvert --mirror, set up a mirror on the new disk, then split the mirrors with lvconvert --splitmirrors. This way, you end up with two copies of your data, and after the split each copy leads its own life.

After you've done the copy, you'll need to make the new disk bootable. Mount the filesystem for this. Assuming it's mounted on /mnt, run these commands as root:

chroot /mnt
# if the name of the volume group has changed, edit /etc/fstab
update-grub
grub-install /dev/sda

Alternatively, you might be able to use Clonezilla. This is a powerful disk manipulation and cloning tool, and I think it covers your situation, but I have no experience with it.

  • 1
    How an answer that basically says pvadd, pvmove, pvremove gets accepted over THIS is beyond me... – ish Jul 8 '12 at 21:01
  • Much too complicated and not what he needs – Floyd Jul 9 '12 at 5:19

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

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