Managing Host Storage
StorageOS uses the storage available on the nodes where it is installed to present as available for volumes.
In order to mitigate against problems caused by filling the host root disk, we
recommend mounting a separate device into the /var/lib/storageos directory.
StorageOS is agnostic to the type of filesystem mounted in
/var/lib/storageos.
Extending Available Storage
StorageOS uses subdirectories of /var/lib/storageos/data to hold user data.
By default, the directory /var/lib/storageos/data/dev1 will be created when a
node is bootstrapped, and used for pool data. It is possible to shard the data
by creating more directories into this structure. StorageOS will save data in
any directory that conforms to the pattern /var/lib/storageos/data/dev[0-9]+,
such as /var/lib/storageos/data/dev2 or /var/lib/storageos/data/dev5. This
functionality enables operators to mount different devices into devX
directories and StorageOS will recognise them as available storage
automatically.
There are two possible options to expand the available disk space for StorageOS to allocate:
- Mount filesystem in
/var/lib/storageos/data/devX - Use LVM to expand the logical volume available to StorageOS
Option 1: Mount Additional Devices
This option enables operators to expand the cluster’s available space at any time without having to stop applications or forcing operational downtime. The expansion of disk is transparent for applications and StorageOS Volumes. StorageOS will use the new available space to create new data files.
-
Context
We assume that there is a disk available in our Linux system without formatting in addition to the root filesystem. StorageOS data dir dev1 (
/var/lib/storageos/data/dev1) is using/dev/xvda1. We will use the device/dev/xvdfto expand StorageOS available space.List available block devices in the host.
root@node0:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 128G 0 disk `-xvda1 202:1 0 128G 0 part / xvdf 202:80 0 100G 0 diskCheck StorageOS cluster’s available capacity.
$ storageos get node -ojson | jq -r '.[] | { name: .name, capacity: .capacity.total }' "node0" 137,438,953,472 "node1" 137,438,953,472 "node2" 137,438,953,472 -
Format device
root@node0:/var/lib/storageos/data# mkfs -t ext4 /dev/xvdf mke2fs 1.42.12 (29-Aug-2014) Creating filesystem with 26214400 4k blocks and 6553600 inodes Filesystem UUID: 380712fa-6f82-477a-81a5-d7466d4c6b7f Superblock backups stored on blocks: 32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 4096000, 7962624, 11239424, 20480000, 23887872 Allocating group tables: done Writing inode tables: done Creating journal (32768 blocks): done Writing superblocks and filesystem accounting information: done -
Mount filesystem
root@node0:~# mkdir -p /var/lib/storageos/data/dev2 root@node0:~# mount /dev/xvdf /var/lib/storageos/data/dev2 -
Verify available storage
In less than 30 seconds, StorageOS will see the new available capacity.
$ storageos get node -ojson | jq -r '.[] | { name: .name, capacity: .capacity.total }' "node0" 244,491,013,324 "node1" 137,438,953,472 "node2" 137,438,953,472Note that the node node0 has increased the TOTAL capacity in 100Gi.
Persist the mount at boot by adding the mount endpoint to
/etc/fstab
Option 2: Expand Existing Devices Backed by LVM
This option enables operators to take advantage of LVM to manage disks.
-
Context
We assume that
/var/lib/storageosis mounted onto an LVM volume. We are using a volumegroup namedstorageosand logical volume calleddata. There is a second physical disk/dev/xvdgunused.List available block devices in the host.
root@node2:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT xvda 202:0 0 128G 0 disk `-xvda1 202:1 0 128G 0 part / xvdf 202:80 0 100G 0 disk `-storageos-data 254:0 0 99G 0 lvm /var/lib/storageos xvdg 202:96 0 100G 0 diskCheck StorageOS cluster’s available capacity.
$ storageos get node -ojson | jq -r '.[] | { name: .name, capacity: .capacity.total }' "node0" 137,438,953,472 "node1" 137,438,953,472 "node2" 107,696,304,947 # --> LVM storageos/data volume -
Add physical disk to LVM
root@node2:~# vgextend storageos /dev/xvdg Volume group "storageos" successfully extendedThe volume group
storageosmust have 2 physical volumes (#PV)root@node2:~# vgs VG #PV #LV #SN Attr VSize VFree storageos 2 1 0 wz--n- 199.99g 104.99g -
Extend logical volume
dataroot@node2:~# lvextend -L+100G /dev/storageos/data Size of logical volume storageos/data changed from 95.00 GiB (24320 extents) to 195.00 GiB (49920 extents). Logical volume data successfully resized -
Resize the FileSystem
Your filesystem must support the option to be expanded, and to do so while in use. Otherwise, you need to unmount first.
root@node2:~# resize2fs /dev/storageos/data resize2fs 1.42.12 (29-Aug-2014) Filesystem at /dev/storageos/data is mounted on /var/lib/storageos; on-line resizing required old_desc_blocks = 6, new_desc_blocks = 13 The filesystem on /dev/storageos/data is now 51118080 (4k) blocks long. -
Check new available space
The mounted file system to
/var/lib/storageoshas increased its size.root@node2:~# df -h /dev/mapper/storageos-data Filesystem Size Used Avail Use% Mounted on /dev/mapper/storageos-data 192G 60M 183G 1% /var/lib/storageosStorageOS available storage has increased too.
$ storageos get node -ojson | jq -r '.[] | { name: .name, capacity: .capacity.total }' "node0" 137,438,953,472 "node1" 137,438,953,472 "node2" 206,158,430,208 # --> 100G more available
Persist the mount at boot by adding the mount point to
/etc/fstab