Ansible is an automation, configuration, and infrastructure management tool. My previous articles introduce Ansible and explain system roles. In this article, I demonstrate configuring Logical Volume Manager (LVM) using Ansible. Configuring LVM with Ansible helps system administrators perform their tasks more efficiently and spend less time working manually. You can create an Ansible playbook that creates a partition and initializes LVM.
[ You might also enjoy: Introduction to Logical Volume Manager ]
LVM Overview
As you know, the primary partition can't be extended and reduced. Such a scenario can create problems when you need extra space on a disk. Using LVM, you can overcome this problem because LVM lets you add and remove a new disk to a logical volume. LVM is part of the default installation of Red Hat Enterprise Linux (RHEL) since RHEL 7.
Here are a few essential items you need to understand before using LVM:
- PV—Physical Volume initialized on disk, partition, or loopback file. When you initialize a PV, it creates a label at the start of the device.
- VG—Volume Group is a collection of logical volumes (LVs). You create a VG inside a PV.
- LV—Logical Volume is just like a standard partition on a disk. You can create multiple LVs inside a single VG. You can resize an LV according to the space required.
Creating a Partition
In RHEL 8, you create a partition using the Parted utility. Parted gives you the flexibility to create a partition using MS-DOS or a GUID Partition Table (GPT) partition. In Ansible, you can use the Parted module for partitioning.
In this example, consider /dev/vdb
as the disk name. Create two 1 GB partitions. Simply using the Parted module, you can create partitions of any size.
Example:
---
- name: playbook for simple 1 GB partition
hosts: vm1.example.com
become: true
tasks:
- name: create partition
parted:
device: /dev/vdb
number: 1
flags: [ lvm ]
state: present
part_end: 2GB
Run this playbook using:
$ ansible-playbook partition.yml
You can use the lsblk
command to check that the partition now exists.
Initializing LVM and creating LVs
After creating the partition, initialize the LV. To initialize requires you to first create both a PV and a VG. Use the Ansible lvg module to create a PV and a VG with a Physical Extents (PE) size. The PE divides the VG into a fixed size. By default, the size of the PE is 4MB. You can change the default size while creating the VG. Generally, a larger PE size provides better performance.
Example:
- name: task for creating volume group
lvg:
vg: sample-vg
pvs: /dev/vdb1
pesize: 16
- name: Install lvm2 dependency
package:
name: lvm2
state: present
The next task creates the LV. The lvol module creates LVs. When creating an LV, you give options like VG name, size, and an LV name.
In this example, a 2GB VG creates the first LV with a size of 1GB.
Example:
- name: task for creating logical volume
lvol:
vg: sample-vg
lv: sample-lv
size: 1g
force: yes
To use this created LV, you have to mount that partition within the filesystem. Only you can access this LV for storing data. In Ansible, use the filesystem modules for formatting any block device with filesystem
. After formatting, you mount the partition at any directory. You can use the mount module in Ansible. Make sure that the directory (/data1
in this example) exists before executing the playbook.
Example:
- name: Create directory data1 if does not exist
file:
path: /data1
state: directory
mode: '0755'
- name: format the xfs filesystem
filesystem:
fstype: xfs
dev: /dev/sample-vg/sample-lv
- name: mount the lv on /data1
mount:
path: /data1
src: /dev/sample-vg/sample-lv
fstype: xfs
state: mounted
Example: Whole playbook:
---
- name: playbook for simple 1 GB partition
hosts: localhost
become: true
tasks:
- name: create partition
parted:
device: /dev/nvme1n1
number: 1
flags: [ lvm ]
state: present
part_end: 2GB
- name: Install lvm2 dependency
package:
name: lvm2
state: present
- name: task for creating volume group
lvg:
vg: sample-vg
pvs: /dev/nvme1n1p1
pesize: 16
- name: task for creating logical volume
lvol:
vg: sample-vg
lv: sample-lv
size: 1g
force: yes
- name: Create directory data1 if does not exist
file:
path: /data1
state: directory
mode: '0755'
- name: format the xfs filesystem
filesystem:
fstype: xfs
dev: /dev/sample-vg/sample-lv
- name: mount the lv on /data1
mount:
path: /data1
src: /dev/sample-vg/sample-lv
fstype: xfs
state: mounted
Run this playbook and check whether your LV gets created or use the lvs
command.
Remember that one of the features of LVM is that you can extend the size of the LV. Manually, you can use the lvextend
command. In Ansible, you can use the lvol module to extend the size of sample-lv.
Example:
- name: Extend the logical volume to take all remaining space of the PVs and resize the underlying filesystem
lvol:
vg: sample-vg
lv: sample-lv
size: 2g
resizefs: true
force: yes
Using the lvextend
command or the lvol module helps you to extend your LV. In this lvol volume, use the resizefs
parameter to enlarge an unmounted file system located on the device.
In order to shrink the size of an LV, the syntax is as follows:
- name: Extend the logical volume to take all remaining space of the PVs and resize the underlying filesystem
lvol:
vg: sample-vg
lv: sample-lv
size: 700m
shrink: yes
force: yes
[ Need more on Ansible? Take a free technical overview course from Red Hat. Ansible Essentials: Simplicity in Automation Technical Overview. ]
Wrap Up
This article showed you how to configure LVM using a simple Ansible playbook. Rather than using a simple playbook, you could create a role, using the same process and modules as above. Ansible helps you reduce manual tasks as well as increase efficiency for LVM configuration. Using the methods described in this article simplifies operations on multiple managed nodes.
저자 소개
Shiwani Biradar is an Associate Technical support Engineer in Red Hat. She loves contributing to open source projects and communities. Shiwani never stops exploring new technologies. If you don't find her exploring technologies then you will find her exploring food. She is familiar with Linux, Cloud, and DevOps tools and enjoys technical writing, watching TV series, and spending time with family.
채널별 검색
오토메이션
기술, 팀, 인프라를 위한 IT 자동화 최신 동향
인공지능
고객이 어디서나 AI 워크로드를 실행할 수 있도록 지원하는 플랫폼 업데이트
오픈 하이브리드 클라우드
하이브리드 클라우드로 더욱 유연한 미래를 구축하는 방법을 알아보세요
보안
환경과 기술 전반에 걸쳐 리스크를 감소하는 방법에 대한 최신 정보
엣지 컴퓨팅
엣지에서의 운영을 단순화하는 플랫폼 업데이트
인프라
세계적으로 인정받은 기업용 Linux 플랫폼에 대한 최신 정보
애플리케이션
복잡한 애플리케이션에 대한 솔루션 더 보기
오리지널 쇼
엔터프라이즈 기술 분야의 제작자와 리더가 전하는 흥미로운 스토리
제품
- Red Hat Enterprise Linux
- Red Hat OpenShift Enterprise
- Red Hat Ansible Automation Platform
- 클라우드 서비스
- 모든 제품 보기
툴
체험, 구매 & 영업
커뮤니케이션
Red Hat 소개
Red Hat은 Linux, 클라우드, 컨테이너, 쿠버네티스 등을 포함한 글로벌 엔터프라이즈 오픈소스 솔루션 공급업체입니다. Red Hat은 코어 데이터센터에서 네트워크 엣지에 이르기까지 다양한 플랫폼과 환경에서 기업의 업무 편의성을 높여 주는 강화된 기능의 솔루션을 제공합니다.