Configuring virtual disks¶
Plumbery has the ability to adjust virtual disks attached to a node, like in the following example:
nodes:
- myServer:
disks:
# resize system disk to 80 GB
#
- 0 80
# add a 100 GB disk for economy storage
#
- 1 100 economy
Components of each disks:
directive¶
Component | Required | Description |
---|---|---|
disk id | yes | An integer between 0 and 9. The value 0 designates the system disk |
size in GB | yes | An integer between 10 and 1000 |
class of storage | no | Either standard (default) or highperformance or economy |
How to partition and configure virtual disks?¶
Any change of virtual disks made at the infrastructure level has to be reflected into the operating system itself. For example, explicit decision is required on number and sizes of partitions. You may want to use one file system or another, depending of requirements for the storage sub-system. In case of storage virtualisation, there is also an option to combine multiple virtual disks in a single logical volume and file system.
Cloud-config can be a convenient Trojan horse to perform such tasks, as demonstrated in following examples.
How to resize system disk of a Linux server?¶
LVM is used for Ubuntu standard images, so the resizing of system disk is quite easy.
nodes:
- myServer:
appliance: 'Ubuntu 14'
# augment system disk
#
disks:
- 0 50 standard
cloud-config:
runcmd:
- echo "===== Growing LVM with expanded disk"
- lvextend -l +100%FREE /dev/mapper/rootvol00-rootlvol00
- resize2fs /dev/mapper/rootvol00-rootlvol00
How to add high-performance storage on Linux?¶
This case is a bit more complicated because of the partitioning, etc.
Hopefully cloud-config
can help us to push some scripts to the target
node and to execute them.
nodes:
- myServer:
appliance: 'Ubuntu 14'
# add a disk from high-performance tier of storage
#
disks:
- 1 100 highperformance
cloud-config:
write_files:
- path: /root/set_pdisk.sh
content: |
#!/usr/bin/env bash
if [ ! -b ${1}1 ]; then
echo "===== Partioning ${1}"
cat <<EOF | fdisk ${1}
n
p
1
t
8e
w
EOF
echo "===== Creating LVM physical disk ${1}1"
pvcreate ${1}1
fi
- path: /root/set_vdisk.sh
content: |
#!/usr/bin/env bash
if [ -z "$(blkid ${1})" ];
then
echo "===== Formatting ${1}"
mkfs -t ${2} ${1}
fi
UUID=$(blkid ${1} | sed -n 's/.*UUID=\"\([^\"]*\)\".*/\1/p')
if ! grep -q "${UUID}" /etc/fstab; then
echo "===== Adding ${1} to fstab"
LINE="UUID=\"${UUID}\"\t${3}\t${2}\tnoatime,nodiratime,nodev,noexec,nosuid\t1 2"
echo -e "${LINE}" >> /etc/fstab
fi
echo "===== Mounting ${3}"
[ -d "${3}" ] || mkdir -p "${3}"
mount "${3}"
runcmd:
- echo "===== Handling additional disk"
- chmod +x /root/set_pdisk.sh
- /root/set_pdisk.sh /dev/sdb
- echo "===== Configuring /dev/sdb1 for high-performance storage"
- vgcreate highperformancevg /dev/sdb1
- lvcreate -l 100%FREE -n highperformancelv highperformancevg
- chmod +x /root/set_vdisk.sh
- /root/set_vdisk.sh /dev/highperformancevg/highperformancelv ext4 /highperformance
After complete configuration, everything written to /highperformance
will benefit from best performance levels.