Block storage allows you to create and attach additional storage volumes to your instances. These volumes are a totally independent resource that can be moved from one instance to another. Attached block storage will work like locally connected storage drives, which means managing your storage is easy and you can use familiar tools to do so.
In this learn guide, we will cover the following subjects:
- What is Block Storage?
- What are the common ways to use Block Storage?
- How to create and attach volumes to your Instances
- How to partition and format volumes
- How to resize volumes
- How to detach and delete volumes
Block Storage is a convenient and flexible way of managing additional storage for your instances. Block Storage is configured in units known as
volumes. Volumes function as block devices, this means they appear to the operating system as locally attached storage drives which can be partitioned and formatted to your individual needs ( handy right?! ).
A couple of points you should know about Block Storage:
- All Block Storage volumes are backed by SSD's
- Volumes are region specific resources. You are able to move your volumes between any instance in the same region
- A volume can only be attached to a single instance at any one time
Good question! Block Storage is a fantastic solution for when you need that little ( or much ) more storage space, but you do not need or require the additional processing power or memory that a larger Civo instance can provide. The volumes can be created, destroyed and expanded easily as your needs for them change. You can start small and grow as you require which means you only use the storage space you need, rather than having a big chunk you're not using but still paying for.
Volumes are great because they function as generic block devices, they can be very useful in a number of different ways. A few examples of this are:
- To store database files for a database server such as MySQL, PostgreSQL and others
- As a target device for backups
- As the media uploads directory for a web server
Block Storage is not a specialised resource, which sounds bad but that's what makes it so versatile. It can be used for just about anything that will benefit from additional disk space, which in our books is only a good thing!
Creating a new volume is nice and easy through the Civo control panel. You can create a volume by clicking on the
Volumes section your dashboard and then select
Create Volume :
Once done, it will take you to the next section where you can decide what size you want your volume to be and to give it a name of your choice. Once you have selected a name and size of your volume , simply click on the
Create button to setup your first volume:
We now have the volume created and we can attach it to any instance of your choice. To do this simply click on the
Attach to an instance icon to the right of your volume name and the select the instance from the drop down menu provided:
Attach and you will now have your volume attached to your instance:
You can also see how it looks from your instance page as well:
Once you attach a volume to your instance, it will need to be prepared for use as you would for any new disk added to a Linux operating system. The steps required by this will depend on whether you are attaching a newly created volume or setting up and existing volume on a new instance. So we will cover both to make sure no mistakes are made.
Once you have created a new volume, it will require some preparation before your instance can begin to utilise the space. A volume must be partitioned, formatted with a filesystem and then finally mounted. We would also recommend that you modify the
/etc/fstab so that the volume will automatically mount at boot.
This process can be modified significantly depending on your individual needs and it may also vary depending on the Linux distribution, the procedure we are using can be used to get up and running quickly in most user cases. The following commands below will:
- Create a single GPT partition ( using parted ) that will span the entire volume
- Format the partition with the Ext4 filesystem
- Create a mount point under the
- Mount the filesystem
- Adjust the
/etc/fstabto define a persistent mount
Before running the commands, make sure you are logged in with a user that as
sudo privileges or you are the
First we need to get back the volume ID. To do this, simply click on the
Volumes link on your Civo dashboard which will display the ID of the volume for you:
As we can see the ID is
Next we need to use
parted to create a GPT partition. First we need to enter the disk we want to make the partiton on:
sudo parted /dev/vdb GNU Parted 3.2 Using /dev/vdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted)
Next we need to print the disk to make sure we are using the right one:
(parted) print Error: /dev/vdb: unrecognised disk label Model: Virtio Block Device (virtblk) Disk /dev/vdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: unknown Disk Flags:
We now need to give the disk a GPT label name using the
(parted) sudo mklabel gpt (parted)
Now we have created the label for the disk, we need to use the
mkpart command to create a primary partition.:
(parted) mkpart Partition name? ? testvol File system type? [ext2]? ext4 Start? 1 End? 10700
*Note, the start and end units are in megabytes and as we are using a 10.7GB partition it will start from 1 and end at 10700 *
Now that is done we can quit the
parted manager and format our new partition in the ext4 file system using the
(parted) quit Information: You may need to update /etc/fstab.
mkfs.ext4 /dev/vdb1 mke2fs 1.42.13 (17-May-2015) Creating filesystem with 2441216 4k blocks and 610800 inodes Filesystem UUID: 3e71e9c7-96a6-4025-9c83-b4122c36ac42 Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done
Now we have created the filesystem, we can use the
parted command again to check it has worked and it has been formatted with the ex4 filesystem:
sudo parted /dev/vdb /dev/vdb GNU Parted 3.2 Using /dev/vdb Welcome to GNU Parted! Type 'help' to view a list of commands. (parted) print Model: Virtio Block Device (virtblk) Disk /dev/vdb: 10.7GB Sector size (logical/physical): 512B/512B Partition Table: gpt Disk Flags: Number Start End Size File system Name Flags 1 1049kB 10.0GB 9999MB ext4 testvol
Excellent! As we can see we have the correct size and the right filesystem type. We can now exit
parted and make a folder to mount our volume:
(parted) quit sudo mkdir /mnt/myfirstvol sudo mount /dev/vdb1 /mnt/myfirstvol
We should now have a mounted filesystem and we can test that it was successful by using the following command:
You should get a similar output as below:
TARGET SOURCE FSTYPE OPTIONS /mnt/myfirstvol /dev/vdb1 ext4 rw,relatime,data=ordered
Now we have a mounted filesystem we want to ensure it remains persistent during reboots of your instance. To do this we need to edit the
/etc/fstab and pass it some options to ensure the volume comes up on boot:
sudo vim /etc/fstab
You should get an output similar to below:
LABEL=cloudimg-rootfs / ext4 defaults 0 0
We can now add our volume so it is also mounted using the default values for the ext4 filesystem:
/dev/vdb1 /mnt/myfirstvol ext4 defaults 0 0
Once you have added the values, save and exit your editor. Hurray! Your volume will now automatically come up at boot time so you don't have to worry about mounting the filesystem manually every time you reboot your instance.
Resizing a volume can be done in a few easy steps and it will allow you to grow your volume easily as and when you require it. The steps we need to take are:
- Increase the volume size through the Civo dashboard.
- Login to your instance and make sure the volume isn't being written to by unmounting it.
- Adjust the partition table if the volume is partitioned
- Expand the filesystem on the instance
- Remount the volume on your instance
Login to your dashboard and select the
Volumes link. Once done click on the
Resize button and select the new size you want for your volume:
Now we need to login to our instance and unmount the volume using the
root@testvol:~# umount /mnt/myfirstvol
Now we have unmounted the volume, we can now resize the partiton table using the
root@testvol:~# growpart /dev/vdb 1 CHANGED: partition=1 start=2048 old: size=20895744 end=20897792 new: size=41940959,end=41943007
Now we have grown the partiton table and we are using the Ext4 filesystem, we can run a quick check on the partition using the
e2fsck command and then run
root@testvol:~# e2fsck -f /dev/vdb1 e2fsck 1.42.13 (17-May-2015) Pass 1: Checking inodes, blocks, and sizes Pass 2: Checking directory structure Pass 3: Checking directory connectivity Pass 4: Checking reference counts Pass 5: Checking group summary information /dev/vdb1: 11/654080 files (0.0% non-contiguous), 79565/2611968 blocks
root@testvol:~# resize2fs /dev/vdb1 resize2fs 1.42.13 (17-May-2015) Resizing the filesystem on /dev/vdb1 to 5242619 (4k) blocks. The filesystem on /dev/vdb1 is now 5242619 (4k) blocks long.
Almost there! Now we have successfully increased the filesystem, we simply need to remount your volume again and check the size:
root@testvol:~# mount /dev/vdb1 /mnt/myfirstvol/
root@testvol:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 25G 0 disk └─vda1 253:1 0 25G 0 part / vdb 253:16 0 20G 0 disk └─vdb1 253:17 0 20G 0 part /mnt/myfirstvol
Excellent! We have now successfully increased the volume size to 20G.
If you wish to remove your volume from your instance and fully delete it, this can be done in a few small steps which are:
- Unmount the volume from your instance
- Remove the path from the fstab on your instance
- Delete the volume from the Civo dashboard
Before you unmount your volume it is good practice to make sure nothing is still being written to it ( As the volume will not unmount ). SSH into your instance and once you are happy nothing is using the volume we can unmount it by using the
umount command. First we need to get the mount point back for your volume which you can do a number of ways. In this example we will us
root@testvol:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 25G 0 disk └─vda1 253:1 0 25G 0 part / vdb 253:16 0 10G 0 disk └─vdb1 253:17 0 10G 0 part /mnt/myfirstvol
Now we have the mount point
/mnt/myfirstvol we can unmount it using the
root@testvol:~# umount /mnt/myfirstvol
The mount point will now be unmounted and we can check again with
root@testvol:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT vda 253:0 0 25G 0 disk └─vda1 253:1 0 25G 0 part / vdb 253:16 0 10G 0 disk └─vdb1 253:17 0 10G 0 part
Success! As we can see there is no longer a mount point attached to the
Now we have unmounted the volume we can remove it from the fstab to ensure that your instance doesn't try to bring up the volume on boot. To do this we just need to remove the entry from
/etc/fstab using your favourite editor:
root@testvol:~# vim /etc/fstab LABEL=cloudimg-rootfs / ext4 defaults 0 0 /dev/vdb1 /mnt/myfirstvol ext4 defaults 0 0
Ensure that when removing any entry from the fstab, that you only remove any mount points that have been added in manually. If you were to remove the default mount point, your instance would not boot up after a reboot.
Now we have done all of the steps on the instance, the final step is to delete the volume from the Civo dashboard. Simply click on the volumes link and then select the
Delete volume button:
Excellent! The volume has now been deleted.