From 9241d128dbcda25932bb2340fb29bf52cb3f4df7 Mon Sep 17 00:00:00 2001 From: hhf Date: Sat, 7 Dec 2024 12:00:25 +0530 Subject: [PATCH] Add resize_vm_disk.sh --- resize_vm_disk.sh | 112 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 112 insertions(+) create mode 100644 resize_vm_disk.sh diff --git a/resize_vm_disk.sh b/resize_vm_disk.sh new file mode 100644 index 0000000..c17d5fe --- /dev/null +++ b/resize_vm_disk.sh @@ -0,0 +1,112 @@ +#!/bin/bash + +# Script to resize LVM partition after expanding disk in Proxmox +# Must be run as root + +# Exit on any error +set -e + +# Function to check if running as root +check_root() { + if [ "$(id -u)" != "0" ]; then + echo "Error: This script must be run as root" >&2 + exit 1 + fi +} + +# Function to check if required tools are installed +check_requirements() { + local required_tools=("parted" "pvresize" "lvresize" "resize2fs") + + for tool in "${required_tools[@]}"; do + if ! command -v "$tool" >/dev/null 2>&1; then + echo "Error: Required tool '$tool' is not installed" >&2 + exit 1 + fi + done +} + +# Function to verify LVM setup +verify_lvm() { + if ! vgs ubuntu-vg >/dev/null 2>&1; then + echo "Error: Volume group 'ubuntu-vg' not found" >&2 + exit 1 + fi + + if ! lvs ubuntu-vg/ubuntu-lv >/dev/null 2>&1; then + echo "Error: Logical volume 'ubuntu-lv' not found" >&2 + exit 1 + fi +} + +# Function to backup partition table +backup_partition_table() { + local backup_file="/root/partition_backup_$(date +%Y%m%d_%H%M%S).bak" + echo "Creating partition table backup at $backup_file" + sfdisk -d /dev/sda > "$backup_file" +} + +# Main resize function +perform_resize() { + echo "Starting disk resize process..." + + # Resize partition using parted + echo "Resizing partition..." + parted -s /dev/sda resizepart 3 100% + + # Give system time to register new partition size + sleep 2 + + echo "Resizing physical volume..." + pvresize /dev/sda3 + + echo "Resizing logical volume..." + lvresize -l +100%FREE /dev/mapper/ubuntu--vg-ubuntu--lv + + echo "Resizing filesystem..." + resize2fs /dev/mapper/ubuntu--vg-ubuntu--lv +} + +# Function to verify successful resize +verify_resize() { + echo "Verifying resize operation..." + + # Check if filesystem is clean + if ! e2fsck -n /dev/mapper/ubuntu--vg-ubuntu--lv >/dev/null 2>&1; then + echo "Warning: Filesystem check recommended after resize" >&2 + fi + + # Display new size information + echo -e "\nNew disk space information:" + df -h / + lvs ubuntu-vg/ubuntu-lv +} + +# Main execution +main() { + echo "Starting LVM disk resize script..." + + # Run checks + check_root + check_requirements + verify_lvm + + # Create backup + backup_partition_table + + # Perform resize + perform_resize + + # Verify results + verify_resize + + echo -e "\nDisk resize completed successfully!" +} + +# Execute main function with error handling +if main; then + exit 0 +else + echo "Error: Resize process failed" >&2 + exit 1 +fi \ No newline at end of file