The AWS documentation is pretty detailed and thorough, but sometime I feel it is overwhelming and at times some important steps/command are deep down somewhere, essentially very hard to find or perhaps missing!! I had a similar experience recently.
I hit upon a low disk warning for the root volume of a production instance. I was nervous, but thankfully AWS EC2 supports on the fly increase of volume size (for the kernel that supports on-line resizing, ofcourse). The other option is obviously to create a new instance with larger volume & switch. Not necessary though!!
The first step was to look for documentation and confirm if my instance type supports it. The very first link Google returned was what I was looking for. My Instances are running Ubuntu (mainly 16.04.2 LTS) and AWS does support on the fly volume changes for this. Hurrah!!
The steps in the AWS documentation are certainly detailed but elongated and scattered. It can take a couple of hours to go through and understand the actual set of steps. Additionally, some commands are missing. Let me put down the exact steps and save some trouble 🙂
- Increase the volume size: This can be done using “command line” or the “console“. I prefer the console. The steps on the console link are concise.
- Monitor the progress: In the AWS documentation go to the section “To monitor progress of a modification from the console”. Once the state is shown as “completed (100%)” proceed to step #3 below. Tip: I increased size from 30GB to 100GB.
- Extend the volume’s file system: To take advantage of the increased storage capacity.
- Check the existing disk configuration by using the command ‘lsblk’. It will show something like below:
xvda 202:0 0 100G 0 disk └─xvda1 202:1 0 30G 0 part /
This denotes that disk size is 100 GB and allocated to xvda1 is 30GB. Usable is only 30GB, which is on the partition xvda1.
- Now grow the xvda1 partition to the maximum available disk size. Important: Ensure to use the correct partition. Read ‘growpart’ command documentation, if need be.
sudo growpart /dev/xvda 1
you will see a message like below:
CHANGED: partition=1 start=16065 old: size=62898462 end=62914527 new: size=209699102,end=209715167
NOTE: The growpart command is missing from the AWS documentation on Extending a Linux File System after Resizing the Volume.
- Verify that the allocation has changed using the ‘lsblk’ command again. It should now show the entire 100GB allocated to xvda1, as shown below. Tip: At this point the usable space is still ONLY 30GB though it shows 100GB.
xvda 202:0 0 100G 0 disk └─xvda1 202:1 0 100G 0 part /
- Finally tell the OS to use the additional space by resizing the partition.
sudo resize2fs /dev/xvda1
you will see a message like below:
resize2fs 1.42.13 (17-May-2015) Filesystem at /dev/xvda1 is mounted on /; on-line resizing required old_desc_blocks = 2, new_desc_blocks = 7 The filesystem on /dev/xvda1 is now 26212387 (4k) blocks long.
- You will see 100GB allocated to your partition. Verify using ‘df’ command!!
- Check the existing disk configuration by using the command ‘lsblk’. It will show something like below:
- Done. Your volume is now having the increased size!!
IMPORTANT: It is not mandatory, but as a fail safe mechanism, always take an image of the instance that you intend to modify.
NOTE: The option to support on the fly increase in volume size is specific to OS (kernel should support on-line resizing). And, for EC2 the steps could vary as per instance type. However, using the steps above, I have successfully increased the volume size of both m4.xlarge and m4.large instances running ubuntu 16.04.2 LTS.