Adding a PV Second Disk to CentOS 7 on a Scale HC3 with LVM and XFS
-
These directions are done on a Scale HC3 which utilizes KVM and VirtIO paravirtualized block devices for performance with CentOS 7 and RHEL 7. While the directions are mostly general, the specific names and enumeration of the block devices is specific to KVM, VirtIO and CentOS/RHEL. If you change any of these factors you will need to alter the directions or the block device names may be incorrect. This is assuming that we are adding a new block device after the initial one on which the system has been installed.
In the example here, I am using a standard CentOS 7 install, using all VirtIO high performance paravirtualized block device drivers. The goal here is not to alter the installation location (which we manage via a cloned template with a 16GB base image) but to add a second disk, 200GB in this example but you can choose whatever size makes sense to you. We use LVM here so that we have maximum control over the device and XFS as the filesystem as it is extremely fast, stable and common. For the majority of use cases, this combination will be what you will want to use.
Because we are using the full block device and LVM, we don't have to worry about things like partitioning with fdisk or parted making this process even easier and more repeatable.
pvcreate /dev/vdb pvscan vgcreate vol_data1 /dev/vdb lvcreate -l 100%FREE -n lv_data1 vol_data1 mkfs.xfs /dev/mapper/vol_data1-lv_data1 mkdir /data echo "/dev/mapper/vol_data1-lv_data1 /data xfs defaults 0 0" >> /etc/fstab mount /data
That's it! We have additional space now. Just do
df -h
to see it available to you.And for those that want it super easy:
pvcreate /dev/vdb; pvscan; vgcreate vol_data1 /dev/vdb; lvcreate -l 100%FREE -n lv_data1 vol_data1; mkfs.xfs /dev/mapper/vol_data1-lv_data1; mkdir /data;echo "/dev/mapper/vol_data1-lv_data1 /data xfs defaults 0 0" >> /etc/fstab; mount /data
-
Here is what fdisk reports that our disks look like before we begin. This is after installation and after the second block device has been added. What we can see from the output of fdisk -l is that the /dev/vda device is used for the base installation and is of 16GB in size. The base installation, swap space and everything that we normally use is located on this single block device which has been partitioned into two partitions, /dev/vda1 and /dev/vda2.
We can see that /dev/vdb is the name of our as yet unused newly added block device of 200.0 GB (in my example.)
KVM VirtIO block devices get the /dev/vd* naming convention in CentOS and RHEL. If you use any other type of block device you will get a different device name, such as /dev/sd*. So be sure to double check this.
[root@lab-lnx-centos ~]# fdisk -l Disk /dev/vda: 16.0 GB, 16000221184 bytes, 31250432 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x0006c441 Device Boot Start End Blocks Id System /dev/vda1 * 2048 1026047 512000 83 Linux /dev/vda2 1026048 31250431 15112192 8e Linux LVM Disk /dev/vdb: 200.0 GB, 200000143360 bytes, 390625280 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/centos_lab--lnx--centos-root: 13.8 GB, 13828620288 bytes, 27009024 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/centos_lab--lnx--centos-swap: 1602 MB, 1602224128 bytes, 3129344 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes
-
If you wish to use the parted command, you can learn more about Parted on Tecmint for interactive usages.
-
Some additional resultant LVM info for those that may be interested:
pvs PV VG Fmt Attr PSize PFree /dev/vda2 centos_lab-lnx-centos lvm2 a-- 14.41g 40.00m /dev/vdb vol_data1 lvm2 a-- 186.26g 0 vgs VG #PV #LV #SN Attr VSize VFree centos_lab-lnx-centos 1 2 0 wz--n- 14.41g 40.00m vol_data1 1 1 0 wz--n- 186.26g 0 lvs LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert root centos_lab-lnx-centos -wi-ao---- 12.88g swap centos_lab-lnx-centos -wi-ao---- 1.49g lv_data1 vol_data1 -wi-ao---- 186.26g
-
Here is what df looks like...
df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos_lab--lnx--centos-root 13G 1.6G 12G 12% / devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.4M 2.0G 1% /run tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/vda1 497M 184M 313M 38% /boot tmpfs 396M 0 396M 0% /run/user/0 tmpfs 396M 0 396M 0% /run/user/1101 /dev/mapper/vol_data1-lv_data1 187G 33M 187G 1% /data
-
Not really all that specific to XFS, switching to ext4 or something else would be easy.
-
Yes, just need to alter the mkfs command and the settings in /etc/fstab.
-
Is there a good reason to be using the raw device rather than making partitions on it like you normally would with parted?
-
Very nice.
-
-
@StrongBad said:
Is there a good reason to be using the raw device rather than making partitions on it like you normally would with parted?
It makes things more flexible in case you decide to change the size of the underlying block device. LVM will grow more easily and can do the partioning that you need on top using new LVs instead of needing to create hard partitions.
-
I just used this myself to make a new block device in a single line. Awesome