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
    Commented Feb 16, 2018 at 20:06
  • the above two answers are not clear enough to me. So a started a new post.
    – MeSo2
    Commented Feb 16, 2018 at 20:10

2 Answers 2


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


  • It would have been nice if you had provided concrete examples.
    – isaaclw
    Commented Jan 5, 2013 at 0:50
  • 15
    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
    Commented Jan 5, 2013 at 14:28
  • 2
    Worked on Cento7 As well. Steps provided here were enough for me to learn a little and google a little. Spot-on
    – terary
    Commented Mar 17, 2018 at 8:07
  • centos: use grub2-mkconfig -o "$(readlink -e /etc/grub2.cfg)" ... from here
    – terary
    Commented Mar 17, 2018 at 10:57
  • I'm doing this with an ubuntu install that has efi /boot and lvm partitions. I've moved the lvm stuff over to the new disk. How do you move the efi and /boot stuff and have it actually work?
    – JamesH
    Commented Jun 18, 2021 at 2:00

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
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
    Commented Jul 8, 2012 at 21:01
  • Much too complicated and not what he needs
    – Floyd
    Commented Jul 9, 2012 at 5:19

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .