I have Ubuntu installed on a drive. The problem is it is running low on disk space. This is installed on vmware. I expanded the virtual drive and booted into ubuntu. But when I opened gparted(sudo gparted), the move/resize option is unavailable. This is the partition Ubuntu is installed on, but I need to resize it. Any ideas? I am comfortable using command line
8 Answers
As a matter of fact, you CAN enlarge the root filesystem while Ubuntu is running (I learned this recently myself here) - this sounds incredible but it's true :)
Here's the list of steps for a simple scenario where you have two partitions, /dev/sda1 is an ext4 partition the OS is booted from and /dev/sdb2 is swap. For this exercise we want to remove the swap partition an extend /dev/sda1 to the whole disk.
As always, make sure you have a backup of your data - since we're going to modify the partition table there's a chance to lose all your data if you make a typo, for example.
Run
sudo fdisk /dev/sda- use
pto list the partitions. Make note of the start cylinder of/dev/sda1 - use
dto delete first the swap partition (2) and then the/dev/sda1partition. This is very scary but is actually harmless as the data is not written to the disk until you write the changes to the disk. - use
nto create a new primary partition. Make sure its start cylinder is exactly the same as the old/dev/sda1used to have. For the end cylinder agree with the default choice, which is to make the partition to span the whole disk. - use
ato toggle the bootable flag on the new/dev/sda1 - review your changes, make a deep breath and use
wto write the new partition table to disk. You'll get a message telling that the kernel couldn't re-read the partition table because the device is busy, but that's ok.
- use
Reboot with
sudo reboot. When the system boots, you'll have a smaller filesystem living inside a larger partition.The next magic command is
resize2fs. Runsudo resize2fs /dev/sda1- this form will default to making the filesystem to take all available space on the partition.
That's it, we've just resized a partition on which Ubuntu is installed, without booting from an external drive.
Two Methods
1. Tested in Ubuntu Server 16.04 to 18.10
After extending the volume in VMware ESXi (shutdown vm, backup/export vm, remove all snapshots, then increased number in disk size, take snapshot of vm again before following the next steps so you can revert mistake/error).
The following example is extending volume on root partition on a system that is already using LVM.
sshinto the system, switch to root and runcfdisk
# cfdiskAfter exiting cfdisk
# fdisk -l /dev/sda Disk /dev/sda: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0xc8b647ff Device Boot Start End Sectors Size Id Type /dev/sda1 * 2048 999423 997376 487M 83 Linux /dev/sda2 1001470 16775167 15773698 7.5G 5 Extended /dev/sda3 16775168 41943039 25167872 12G 8e Linux LVM (***** See new partition /dev/sda3*****) /dev/sda5 1001472 16775167 15773696 7.5G 8e Linux LVMReboot system before next step (or else you might get
Device /dev/sda3 not found (or ignored by filtering))# shutdown now -rInitialize the new volume
# pvcreate /dev/sda3 Physical volume "/dev/sda3" successfully createdGet the name of volume to extend
# vgdisplay --- Volume group --- VG Name linuxetc1-vg (***** this is vg i'm extending*****) System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size 7.52 GiB PE Size 4.00 MiB Total PE 1925 Alloc PE / Size 1925 / 7.52 GiB Free PE / Size 0 / 0 ...Extend volume group
# vgextend linuxetc1-vg /dev/sda3 Volume group "linuxetc1-vg" successfully extendedExtend root
# lvextend -l+100%FREE /dev/linuxetc1-vg/root Size of logical volume linuxetc1-vg/root changed from 6.52 GiB (1669 extents) to 18.52 GiB (4741 extents). Logical volume root successfully resized. Or if you only wanted to give 5 more GB to root # lvextend -L +5g /dev/linuxetc1-vg/rootGet filesystem name for next step
# df -h Filesystem Size Used Avail Use% Mounted on udev 477M 0 477M 0% /dev tmpfs 100M 4.6M 95M 5% /run /dev/mapper/linuxetc1--vg-root 6.3G 2.5G 3.5G 42% / (***** this line*****) tmpfs 497M 0 497M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 472M 105M 343M 24% /boot tmpfs 100M 0 100M 0% /run/user/1000Extend filesystem
# resize2fs /dev/mapper/linuxetc1--vg-root resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/mapper/linuxetc1--vg-root is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/mapper/linuxetc1--vg-root is now 4854784 (4k) blocks long.See the increased size
# df -h Filesystem Size Used Avail Use% Mounted on udev 477M 0 477M 0% /dev tmpfs 100M 4.6M 95M 5% /run /dev/mapper/linuxetc1--vg-root 19G 2.5G 15G 15% / (***** this line*****) tmpfs 497M 0 497M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 472M 105M 343M 24% /boot tmpfs 100M 0 100M 0% /run/user/1000
2. Faster Method Tested in Ubuntu Server 18.04.3 LTS
This method is a little faster than the first. This is due to a new option in the cfdisk menu called "Resize" that saves some steps.
After extending the volume in VMware ESXi (shutdown vm, backup/export vm, remove all snapshots, then increased number in disk size, take snapshot of vm again before following the next steps so you can revert mistake/error).
The following example is extending volume on root partition on a system that is already using LVM.
sshinto the system, switch to root and runcfdisk.After pressing enter, you'll see screen with the following note "Partition [someNumber] resized":

Quit
cfdisk. When you exit you may see message "syncing disks".

I rebooted my system at this point but it may not be necessary. Now you can pickup from step 19 from the first method (repeated below).
(19) Get filesystem name for next step
# df -h Filesystem Size Used Avail Use% Mounted on udev 477M 0 477M 0% /dev tmpfs 100M 4.6M 95M 5% /run /dev/mapper/linuxetc1--vg-root 6.3G 2.5G 3.5G 42% / (***** this line*****) tmpfs 497M 0 497M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 472M 105M 343M 24% /boot tmpfs 100M 0 100M 0% /run/user/1000(20) Extend filesystem
# resize2fs /dev/mapper/linuxetc1--vg-root resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/mapper/linuxetc1--vg-root is mounted on /; on-line resizing required old_desc_blocks = 1, new_desc_blocks = 2 The filesystem on /dev/mapper/linuxetc1--vg-root is now 4854784 (4k) blocks long.(21) See the increased size
# df -h Filesystem Size Used Avail Use% Mounted on udev 477M 0 477M 0% /dev tmpfs 100M 4.6M 95M 5% /run /dev/mapper/linuxetc1--vg-root 19G 2.5G 15G 15% / (***** this line*****) tmpfs 497M 0 497M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 497M 0 497M 0% /sys/fs/cgroup /dev/sda1 472M 105M 343M 24% /boot tmpfs 100M 0 100M 0% /run/user/1000
Articles:
https://wiki.ubuntu.com/Lvm
http://www.geoffstratton.com/expand-hard-disk-ubuntu-lvm
- 2,100
EDIT: As mentioned below by @kent this is an old answer and no longer true.
You are almost there.
You can not resize the partition using GParted while Ubuntu is running.
You will need to attach the GParted ISO's as a CD to the VM machine and reboot the machine so that the GParted will be loaded instead of Ubuntu (I think you can boot from the virtual CD by pressing F12 immediately after machine is started).
Once you booted into GParted the option to move/resize will be enabled as Ubuntu is not currently running.
- 5,828
jtlindsey's "faster" method works on LVMs but is missing some steps. df -h wouldn't show the additional space.
- Follow up until step 9.
- Run
sudo lsblkto determine your partition name (mine was sda3). - Run
sudo pvresize /dev/sda3 - Run
sudo lvextend -L +76G /dev/mapper/ubuntu--vg-ubuntu--lv(replacing the size and the name with your own) - Go back to his method and finish remaining steps.
- 281
I noticed that my ubuntu VM had a LVM that simply was not using all the allocated space. So to add space to my LVM it was quite simply this: https://wiki.ubuntu.com/Lvm chapter: "resizing partitions".
For example: A quick way to know if you have an LVM is to do df -h
and look for this line:
/dev/mapper/ubuntu--vg-ubuntu--lv 689G 20G 639G 3% /
And... see that is not actually the classic "/dev/sda1" type of mount point.
Then run the extension commands on that partition.
sudo lvextend -L +500g /dev/mapper/ubuntu--vg-ubuntu--lv
sudo resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv
Another quick clue that reminded me to check for an LVM was that I noticed when I looked at the fdisk partitions and saw that I had a large /dev/sda3 partition that was not really mounted anywhere. (ie: when I checked with the mount command).
- 273
With cfdisk and resize2fs I was able to extend my / partition on proxmox VM. Thanks to jtlindsey for the example.
I had the next picture before extending:
Model: QEMU QEMU HARDDISK (scsi)
Disk /dev/sda: 107GB
Sector size (logical/physical): 512B/512B
Partition Table: linux
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 40,0GB 40,0GB primary ext4 boot
2 40,0GB 53,7GB 13,7GB extended
5 40,0GB 53,7GB 13,7GB logical linux-swap(v1)
With cfdisk I've removed swap partition, then resized my / partition with Resize option to 80Gb and recreated the swap partition. Then I've written changes with Write option:
Device Boot Start End Sectors Size Id Type
>> /dev/sda1 * 2048 167774207 167772160 80G 83 Linux
/dev/sda2 167774208 209715199 41940992 20G 82 Linux swap / Solaris
┌───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│Partition type: Linux swap / Solaris (82) │
└───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
[Bootable] [ Delete ] [ Resize ] [ Quit ] [ Type ] [ Help ] [ Write ] [ Dump ]
After this I've rebooted and used the following command to extend my file system to the current partition's size:
$ sudo resize2fs /dev/sda1
Make sure you've created backup of important data before any disk changing action. So, jtlindsey's method could be used even for none-LVM partitions.
Also do not forget to get swap back by:
$ sudo mkswap /dev/sda2
And change UUID of swap partition in /etc/fstab to what sudo blkid shows for it.
- 8,002
- 9
- 37
- 53
The answer from Sergey was excellent. If you have the empty space not directly in the next device, however, you will need to delete other devices. For example:
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 33556477 33554430 16G 83 Linux
/dev/sda2 33556478 41940991 8384514 4G 5 Extended
/dev/sda3 41940992 125829119 83888128 40G 83 Linux
/dev/sda5 33556480 41940991 8384512 4G 82 Linux swap / Solaris
In the above case, if you want to merge /dev/sda3 with /dev/sda1, you would need to remove /dev/sda1, /dev/sda2, and /dev/sda3 (with d command), and re-add /dev/sda2 and update its type (with n and t commands).
- 322
- 2
- 7
I succeeded in enlarging my primary ext4 partition using the methodology described here.
Some notes from my personal experience:
- The link example is for shrinking partition, hence the order is resize2fs first and then fdisk. When enlarging partition (as in my case) the order should be fdisk first, reboot and then resize2fs. Also, when using fdisk, the primary as well as the extended partitions should be removed and re-defined.
- I booted the Ubuntu from another drive and then worked on this drive which actually was mirror (using dd) of the older drive. Made it bootable using GParted
- The current version of resize2fs (I am using Ubuntu 12.04LTS) support ext4 - no need to do the actions described in the link of changing it the ext2.
- 5,669
- 1















