I am creating 1GB and storing it as a single file.
You can also choose to store it as multiple files but if you need more performance we can go for single virtual files also maintaining multiple file disk becomes complex.
You can opt to save this disk file in separate location or with the vm also and name it on your style. I am going with default name and location which is with the vm.
Once completed you can click ok and proceed.
We have now successfully added the 1GB disk onto the server and we need to login to guest vm and make it visible inside guest os to use it.
Login to the server and scan the scsi host adapters to refresh and list the attached devices.
If you have added the disks with vm power off state then you will not require to scan as it will be scanned when server is powered on.
Scanning SCSI Disk from Linux vm
My server has 3 host adapters host{0,1,2} So i will scan for 3 adapters to see which adapter has the disk.
Host adapters will be listed under /sys/class/scsi_host/
[root@nfsserver ~]# ls /sys/class/scsi_host/
host0 host1 host2
[root@nfsserver ~]#
I will be executing below commands to scan the newly added disks
echo "- - -" > /sys/class/scsi_host/host0/scan
echo "- - -" > /sys/class/scsi_host/host1/scan
echo "- - -" > /sys/class/scsi_host/host2/scan
For me new disk was attached to host2. Once scan is done - you can see newly added disk with lsblk command.
Partitioning the Disk
I am using fdisk -l command to create disk partition table and mark it as LVM as i am familiar with it.
You can also use parted.
Execute fdisk -l /dev/sdb to see details of the disk.
Here you can see there is no partition table created and it is 1GB in size which is what i have added from workstation.
[root@nfsserver scsi_host]# fdisk -l /dev/sdb
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 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
[root@nfsserver scsi_host]#
Execute fdisk /dev/sdb to create partition table
Once in the fdisk console
To create GPT disk label issue "g"
To Print the created table issue "p"
To create new partition issue "n"
You will need to provide partition number, First sector and Last sector. I am providing defaults and
Partition number (1-128, default 1):
First sector (2048-2097118, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097118, default 2097118):
To mark the partition type issue "t"
To mark the partition as LVM issue "31" -- This might vary in older release of centos it was 8e
To save created partition and exit console issue "w"
[root@nfsserver ~]# fdisk /dev/sdb
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Command (m for help): g
Created a new GPT disklabel (GUID: 696462B2-DD16-384D-8745-D4E2514F3B7F).
Command (m for help): p
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 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
Disklabel type: gpt
Disk identifier: 696462B2-DD16-384D-8745-D4E2514F3B7F
Command (m for help): n
Partition number (1-128, default 1):
First sector (2048-2097118, default 2048):
Last sector, +sectors or +size{K,M,G,T,P} (2048-2097118, default 2097118):
Created a new partition 1 of type 'Linux filesystem' and of size 1023 MiB.
Command (m for help): p
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 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
Disklabel type: gpt
Disk identifier: 696462B2-DD16-384D-8745-D4E2514F3B7F
Device Start End Sectors Size Type
/dev/sdb1 2048 2097118 2095071 1023M Linux filesystem
Command (m for help):
Command (m for help): t
Selected partition 1
Partition type (type L to list all types): 31
Changed type of partition 'Linux filesystem' to 'Linux LVM'.
Command (m for help): p
Disk /dev/sdb: 1 GiB, 1073741824 bytes, 2097152 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
Disklabel type: gpt
Disk identifier: 696462B2-DD16-384D-8745-D4E2514F3B7F
Device Start End Sectors Size Type
/dev/sdb1 2048 2097118 2095071 1023M Linux LVM
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@nfsserver ~]#
Issue lsblk to see the partition created
[root@nfsserver ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 40G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 39G 0 part
├─cl_test-root 253:0 0 37G 0 lvm /
└─cl_test-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 1G 0 disk
└─sdb1 8:17 0 1023M 0 part
sr0 11:0 1 723M 0 rom
[root@nfsserver ~]#
Still you dont have a filesystem mounted df -h will not list you the newly created partition.
[root@nfsserver ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 877M 0 877M 0% /dev
tmpfs 896M 0 896M 0% /dev/shm
tmpfs 896M 8.7M 887M 1% /run
tmpfs 896M 0 896M 0% /sys/fs/cgroup
/dev/mapper/cl_test-root 37G 1.7G 36G 5% /
/dev/sda1 1014M 195M 820M 20% /boot
tmpfs 180M 0 180M 0% /run/user/0
[root@nfsserver ~]#
Creating Logical volume
First we need to create a physical volume command syntax is
Syntax: pvcreate partition_name
partition_name=/dev/sdb1
Once created you can list it using pvdisplay comand
[root@nfsserver ~]# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created.
[root@nfsserver ~]#
[root@nfsserver ~]# pvdisplay /dev/sdb1
"/dev/sdb1" is a new physical volume of "1022.98 MiB"
--- NEW Physical volume ---
PV Name /dev/sdb1
VG Name
PV Size 1022.98 MiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID WZrfHl-fR33-W1sX-La0W-ZDRH-gXQS-HEYwTk
[root@nfsserver ~]#
Once PV is created we can create a Volume group on top of it.
Syntax: vgcreate vg_name pv_name
vg_name=vgdata
pv_name=/dev/sdb1
[root@nfsserver ~]# vgcreate vgdata /dev/sdb1
Volume group "vgdata" successfully created
[root@nfsserver ~]#
[root@nfsserver ~]# vgdisplay vgdata
--- Volume group ---
VG Name vgdata
System ID
Format lvm2
Metadata Areas 1
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 1
Act PV 1
VG Size 1020.00 MiB
PE Size 4.00 MiB
Total PE 255
Alloc PE / Size 0 / 0
Free PE / Size 255 / 1020.00 MiB
VG UUID 1ErkXI-EhVp-224p-KHT7-7opk-fjlV-N9X4HD
[root@nfsserver ~]#
Now we have a PV and VG on top of it, Lets create a LV now
syntax: lvcreate --size size --name lv_name vg_name
lv_name=lvdata
vg_name=vgdata
size=1020MiB
[root@nfsserver ~]# lvcreate --size 1020MiB --name lvdata vgdata
Logical volume "lvdata" created.
[root@nfsserver ~]# lvdisplay /dev/vgdata/lvdata
--- Logical volume ---
LV Path /dev/vgdata/lvdata
LV Name lvdata
VG Name vgdata
LV UUID vPPTZN-MTPO-AiAP-Osfg-yzls-lRwR-Zw7wot
LV Write Access read/write
LV Creation host, time nfsserver.jk.com, 2021-08-10 15:12:19 +0530
LV Status available
# open 0
LV Size 1020.00 MiB
Current LE 255
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
[root@nfsserver ~]#
Once we have created LV we can create a filesystem like ext2/3/4, xfs whatever we require from there.
I am using XFS filesystem.
syntax: mkfs.xfs lv_name
lv_name= /dev/vgdata/lvdata
[root@nfsserver ~]# mkfs.xfs /dev/vgdata/lvdata
meta-data=/dev/vgdata/lvdata isize=512 agcount=4, agsize=65280 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1
data = bsize=4096 blocks=261120, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=1566, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@nfsserver ~]#
Mounting LV
Create a new directory where you want to mount this newly create filesystem.
Directory name = /datanew
Mount syntax: mount lv_name directory_name
lv_name = /dev/vgdata/lvdata
directory_name = /datanew
[root@nfsserver ~]# mkdir /datanew
[root@nfsserver ~]# mount /dev/vgdata/lvdata /datanew/
[root@nfsserver ~]#
Once mounted you can see the filesystem with df -h
[root@nfsserver ~]# df -h /datanew/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgdata-lvdata 1014M 40M 975M 4% /datanew
[root@nfsserver ~]#
Set Mount to be persistent after reboot.
Add the mount entry to /etc/fstab
You can provide the lv name or its UUID in the fstab file.
I prefer to use UUID
syntax: UUID="ID" mount_directory Filesystem_type defaults 0 0
mount_directory=/datanew
UUID= cd8f30ed-d938-4deb-8eec-0e72ed4c9810
You can get UUID number of a lv using blkid as below
[root@nfsserver ~]# blkid /dev/mapper/vgdata-lvdata
/dev/mapper/vgdata-lvdata: UUID="cd8f30ed-d938-4deb-8eec-0e72ed4c9810" BLOCK_SIZE="512" TYPE="xfs"
[root@nfsserver ~]#
[root@nfsserver ~]# cat /etc/fstab | grep datanew
UUID=cd8f30ed-d938-4deb-8eec-0e72ed4c9810 /datanew xfs defaults 0 0
[root@nfsserver ~]#
[root@nfsserver ~]# mount -a
[root@nfsserver ~]# df -h /datanew/
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/vgdata-lvdata 1014M 40M 975M 4% /datanew
[root@nfsserver ~]#
We have successfully added 1GB disk and mounted it as a xfs filesystem with LVM.
Next time i will try to extend this LVM disk with another 1GB in another blog.