u/Abdullah715279

▲ 4 r/redhat

About the length of the answer

Write a bash script to create XFS, ext4, and vfat file system structures in the logical volumes, respectively. Create mount points /mnt/xfs, /mnt/ext4, and /mnt/vfat, and mount the file systems. Include the df command with -h in the script to list the mounted file systems. (From Ghori's book)

The answer with the help of AI:

-------------

#!/bin/bash

set -euo pipefail

# Configuration

VG_NAME="vgscript"

LV_NAMES=("lvscript1" "lvscript2" "lvscript3")

MOUNT_POINTS=("/mnt/xfs" "/mnt/ext4" "/mnt/vfat")

FS_TYPES=("xfs" "ext4" "vfat")

# Colors for output

GREEN='\033[0;32m'

YELLOW='\033[1;33m'

RED='\033[0;31m'

NC='\033[0m'

print_status() {

echo -e "${GREEN}[INFO]${NC} $1"

}

print_warning() {

echo -e "${YELLOW}[WARN]${NC} $1"

}

print_error() {

echo -e "${RED}[ERROR]${NC} $1"

}

# Check root privileges

if [[ $EUID -ne 0 ]]; then

print_error "This script must be run as root"

exit 1

fi

# Verify logical volumes exist

print_status "Checking logical volumes..."

for lv in "${LV_NAMES[@]}"; do

lv_path="/dev/$VG_NAME/$lv"

if [[ ! -L "$lv_path" ]]; then

print_error "Logical volume $lv_path not found!"

print_error "Run the LVM creation script first."

exit 1

fi

print_status "Found: $lv_path ($(lvs --noheadings -o size "$lv_path" | tr -d ' '))"

done

# Create filesystems

print_status "\n=== Creating File Systems ==="

for i in "${!LV_NAMES[@]}"; do

lv_path="/dev/$VG_NAME/${LV_NAMES[$i]}"

fs_type="${FS_TYPES[$i]}"

print_status "Creating $fs_type filesystem on ${LV_NAMES[$i]}..."

case "$fs_type" in

xfs)

mkfs.xfs -f "$lv_path"

;;

ext4)

mkfs.ext4 -F "$lv_path"

;;

vfat)

mkfs.vfat -F 32 "$lv_path"

;;

esac

print_status "Created $fs_type on ${LV_NAMES[$i]}"

done

# Create mount points

print_status "\n=== Creating Mount Points ==="

for mp in "${MOUNT_POINTS[@]}"; do

if [[ ! -d "$mp" ]]; then

mkdir -p "$mp"

print_status "Created mount point: $mp"

else

print_warning "Mount point $mp already exists"

fi

done

# Mount filesystems

print_status "\n=== Mounting File Systems ==="

for i in "${!LV_NAMES[@]}"; do

lv_path="/dev/$VG_NAME/${LV_NAMES[$i]}"

mount_point="${MOUNT_POINTS[$i]}"

fs_type="${FS_TYPES[$i]}"

# Check if already mounted

if mountpoint -q "$mount_point"; then

print_warning "$mount_point is already mounted. Unmounting first..."

umount "$mount_point"

fi

mount "$lv_path" "$mount_point"

print_status "Mounted $lv_path ($fs_type) on $mount_point"

done

# Display results

print_status "\n=========================================="

print_status "FILE SYSTEMS CREATED AND MOUNTED."

print_status "=========================================="

echo -e "\n--- Filesystem Details ---"

for i in "${!LV_NAMES[@]}"; do

lv_path="/dev/$VG_NAME/${LV_NAMES[$i]}"

echo -e "\n${LV_NAMES[$i]}:"

blkid "$lv_path"

df -h "$lv_path"

done

echo -e "\n--- Mount Points ---"

mount | grep -E "xfs|ext4|vfat" | grep "/mnt/"

echo -e "\n--- Disk Free Space (df -h) ---"

df -h | grep -E "Filesystem|/mnt/xfs|/mnt/ext4|/mnt/vfat"

echo -e "\n--- Complete df -h Output ---"

df -h

print_status "\n=========================================="

print_status "Script completed successfully!"

print_status "=========================================="

print_status "Summary:"

print_status " /mnt/xfs -> lvscript1 (XFS)"

print_status " /mnt/ext4 -> lvscript2 (ext4)"

print_status " /mnt/vfat -> lvscript3 (VFAT)"

print_status "\n/etc/fstab has been updated for persistence."

print_status "Backup saved as /etc/fstab.backup.*"

-----------

Will we get the time to write such a long answer? What are the things here you think could have been avoided to make it shorter?

TIA

reddit.com
u/Abdullah715279 — 21 hours ago