About a year and a half ago, I installed Ubuntu on my laptop so I could dual boot with the original Windows 8 installation. At the time, I wasn’t sure if I would stick with Ubuntu, so I was conservative with how much disk space I allocated to the Ubuntu partition. However, I’ve been using Ubuntu as my primary OS since then, and I’d been starting to want more disk space.
The obvious solution was to shrink the Windows partition and expand the Ubuntu partition. On a high level, this process consisted of three steps:
- Create a bootable USB stick containing GParted, a partitioning utility.
- Shrink the Windows partition.
- Expand the Ubuntu partition using GParted.
I used a combination of command line and GUI utilities. More detail is given below.
Step One: Create a bootable USB stick containing GParted
GParted is “a free partition manager that enables you to resize, copy, and move partitions without data loss.” After googling around a bit, this seemed like the best option for resizing the Ubuntu partition. Since you can’t resize the Ubuntu partition while it is running (not true apparently, although I didn’t want to risk it), it was necessary to create a bootable USB stick to boot GParted and perform the resize from there. A CD/DVD would also work, but my laptop doesn’t have a CD drive.
To do this, I did the following while running Ubuntu:
- Found a spare 1GB USB flash drive. Note that 1GB is far more than necessary to create the GParted image, so use a small spare flash drive like this.
- Downloaded the GParted image. GParted Live comes in three different architectures:
- Create the live USB. GNU/Linux Method D: Manual - Overwrite seemed to me to be the easiest method, so I went with a variation of that, as follows:
- With the USB flash drive NOT plugged in, open up a terminal and run
df -hto see what devices are currently mounted.
- Plug in the flash drive and run
df -hagain. You should see a new device. In my case, it was
/dev/sdb1, but this will likely differ for you, so make sure to note the correct device for your specific case.
- Unmount the flash drive. Ubuntu automatically mounted the flash drive as a storage device, so it was a good idea to unmount it before beginning. I did this via Ubuntu’s “Files” GUI, although it can also be done through the command line via
umount /dev/sbd1. Again, replace
sdb1to match your specific case.
- Format the drive. I also did this via the Files GUI, by right clicking on the flash drive and clicking Format. You should select FAT as the file system. This will erase all contents of the flash drive, so make there you haven’t left anything important on there.
dmesg. Assuming you haven’t plugged in or unplugged any devices other than the flash drive in the previous steps, you should see a bunch of stuff related to the flash drive. In my case, this was lots of lines containing
/dev/sdb. Take note of what this is. Note that it is NOT
/dev/sbd1, since that is just a particular partition, whereas we will need the entire disk.
sudo dd if=~/Downloads/gparted-live-0.24.0-2-amd64.iso of=/dev/sdb bs=4M; syncto create the live USB. Make sure to:
- Replace ~/Downloads/gparted-live-0.24.0-2-amd64.iso with the actual path to the GParted image
- Replace /dev/sdb with the actual device you want to install GParted on.
ddutility could easily overwrite the wrong partition and brick your computer. Make sure you have not made any typos when specifying the device.
- With the USB flash drive NOT plugged in, open up a terminal and run
At this point, you should have a valid live USB containing GParted.
Creating the live USB actually didn’t go quite as smoothly for me as described above. I didn’t format the flash drive on my first try, and saw a bunch of weird errors when trying to mount it in the Files GUI after running
dd. I thought I bricked the flash drive, so I then formatted it and tried again, only to still see those errors. It also wouldn’t appear in Files if I unplugged it and then plugged it back in.
However, I inspected the flash drive using the Disks GUI and GParted appeared to have installed correctly. I suppose this process works fine, but causes the USB to no longer be mountable as usual.
Step Two: Shrink the Windows partition
This step was comparatively easy. The following worked for me:
- Boot into the Windows partition.
- Clean out any unwanted files. I had quite a bit of extra junk that ultimately prevented the Windows resize from working on the first try.
- Open up Control Panel > System and Security > Defragment and optimize your drives (under Administrative Tools). Find the Windows partition, select it, and click Optimize. This step is necessary to try to free up space near the end of the partition so you can maximize the resize.
- Open up Control Panel > System and Security > Create and format hard disk partitions (under Administrative Tools). Find the Windows partition, select it, and shrink it. Given the space the utility tells you can be shrunk, you may want to use the maximum amount or reduce it. I went for the maximum, which for me was about 12GB of about 47GB of unused space on the partition. Kinda sucks that I couldn’t reclaim more, but there’s only so much that this will let you shrink, since even after defragmenting there may be stuff relatively close to the edge of the partition that can’t be moved.
This step is also a good time to confirm that the Windows partition and the Ubuntu partition are in fact next to each other on disk. If you already partitioned your computer to dual-boot Windows and Ubuntu in the first place and did it correctly, they should be adjacent and much of this should feel very familiar. If not, you’ll have some extra work to do in GParted.
Step Three: Expand the Ubuntu partition
This was the most nerve-wracking step for me, since you risk causing boot to break if something goes wrong. You should take a look at this step of the GParted FAQ before you begin, so you know what to do in case booting fails. You should also make sure you have backups of anything you care about and know how to retrieve them.
To expand the Ubuntu partition:
- Make sure the GParted live USB is plugged in.
- Reboot your computer. Do not boot into either Ubuntu or Windows, since we are going to boot from the live USB. At the GRUB menu, I was able to find the USB device by hitting
cto enter the command line, then typing
exit. This brought me to a menu with a few bootable devices, including the USB. Select the USB and hit Enter.
- If everything worked out, you should be given a series of menus for GNOME Partition Editor configuration. Just hit Enter each time you are presented with an option to select the default.
- Eventually, this should bring you to a rather primitive desktop interface. The GParted utility will probably be open by default, but if not, try double-clicking the GParted desktop icon. It may take a few seconds to open.
- In GParted, find your Ubuntu partition. To its left should be a block of unallocated space (the space you freed up when shrinking the Windows partition), and to the left of that should be what’s left of the Windows partition.
- Click the Ubuntu partition, and click the Shrink/Move option. This will present you with a confirmation dialog, warning you that this operation can break boot. If you’re willing to accept this possibility, click OK.
- The previous step does not actually begin the process, it just queues it up. To actually perform the expansion, click Apply and click OK in the confirmation that pops up.
- At this there should be something akin to a progress bar and the current command that GParted is running. Just sit back for a while and let this finish.
- If all went well, after a while GParted will let you know that it completed the operation successfully.
- To exit GParted, double-click the Exit icon on the desktop. It may take a few seconds for the next dialog to pop up. Choose Reboot.
- Confirm that you can get into your Ubuntu and Windows partitions.
In my case, everything worked flawlessly, and the end result was more space on my Ubuntu partition.