How do I resize partitions using command line without using a GUI on a server?

Solution 1:

You cannot shrink/edit a partition if any of the partition on the storage device is mounted. So in order to unmount and edit the root filesystem, the OS need to be shutdown. Then boot into a live system and edit the partition as described in other answers.

Alternative solution : swap file

As an alternative to creating an entire partition, a swap file offers the ability to vary its size on-the-fly, and is more easily removed altogether. Swap file can be hot plugable. i.e can be added and removed without unmounting/turning off the OS.

  1. Create a 512 MB file called /swapfile. This will be our swap file.

    fallocate -l 512M /swapfile  
    

    OR

    dd if=/dev/zero of=/swapfile bs=1M count=512
    
  2. Set the right permissions (because a world-readable swap file is a huge local vulnerability):

    chmod 600 /swapfile
    
  3. After creating the correctly sized file, format it to swap:

    mkswap /swapfile
    
  4. Activate the swap file:

    swapon /swapfile
    
  5. Edit /etc/fstab and add an entry for the swap file:

    /swapfile none swap defaults 0 0
    

More details at arch linux wiki.

Solution 2:

First of all is important to know that you cannot resize to shrink your root partition if you are using it (This is called online shrinking). You can only grow it online. This is supported by the resize2fs command. I will assume the following:

  • You don't want to loose your information on the root partition.
  • You don't have physical access to the hard drive in order to use a LiveCD. This can apply to a virtual environment or a remote one. In the case of a virtual one you can still manage to boot from a LiveCD if you set the VM to boot from a LiveCD. This is assumming the VM supports outputting the Desktop GUI from where you would run the Gparted app to resize easily. But since this is less likely I assume you can not.

There are 2 type of partitions that you can resize, the LVM partitions or Logical Volume Manager partitions which support Online resizing (Shrinking/Growing) since the creation of the galaxy and the standard partitions most of us use. Right now the only one that has almost 100% support of complete online resizing (Shrink/Grow) is the btrfs filesystem (Which is still in development). I will explain how to do the normal partitions most of us use in the ext4 filesystem.

Resizing (Growing) the Partition

To grow your partition you can do it with the root mounted. To do this simply do:

sudo resize2fs /dev/sda1

Provided you already have the empty space ready to be merged. Afterwards I recommend rebooting for the changes to take effect correctly. The command above would resize to the maximum permitted. If you wish to resize to a particular size then simply add the size at the end:

sudo resize2fs /dev/sda1 25G

Note that if you want to specify 25.4 GB, you can not use the ".". you would need to go down one unit of measure. In this case from GB to MB, so it would look like this:

sudo resize2fs /dev/sda1 25400M

This way you will have a partition of 25.4G

Resizing (Shrinking) the Partition

Shrinking the partition is a two step process which involves:

  • Reducing the size of the file system by the amount needed.
  • Reducing the size of the underlying block device to match that of the file system.

Before reducing the capacity of a file system you need to reduce the size of the block device (Which can be a partition or a logical volume). Since this is not available for any of the ext* file systems you won't be able to shrink it from 20 GB to 19.5 GB to create the 500 MB swap one.

Even Ext4 does not support online shrinking. If you try to do it you will get the following:

enter image description here

Your only bet as far as I know is to either:

  • Install another Ubuntu version on the same server (On another partition) that can then be used to shrink the root partition of the original Ubuntu Server.

  • Install Ubuntu server from scratch with the size you actually want

  • Use the Ubuntu Server Live Image to resize the partition. For this case, you will need to get to this screen:

    enter image description here

    And choose the Resize option as shown in the image above. From there you will select what the new size will be since from here you can unmount the unit and shrink it if you want.

As an additional help here is the gparted filesystem suppor http://gparted.org/features.php which gives a very detailed list of supported ones and includes if they have full online resizing. Btrfs is amongst them.