rendered paste body#!/bin/bashset -eexport LC_ALL=Ce2fslv="$1"blocks_to_add="$2"if ! [ -b "$e2fslv" ] || ! [ "$blocks_to_add" -gt 0 ] ; then echo "Usage: $0 LogicalVolumePath blocks_to_add" >&2 exit 255fi# Get logical volume infolvinfo=`lvdisplay -c "$e2fslv"`# Volume group namevgname=`echo "$lvinfo" | cut -d: -f2`# Number of physical extents (PE) in the logical volumeorig_num_pe=`echo "$lvinfo" | cut -d: -f8`# Get volume group infovginfo=`vgdisplay -c "$vgname"`# PE Sizepesize=$(( `echo "$vginfo" | cut -d: -f13` * 1024 ))dumpe2fs -h "$e2fslv" | perl -e ' $blocks_to_add = $ARGV[0]; $pe_size = $ARGV[1]; $block_size = undef; $block_count = undef; while(<STDIN>) { if (/^Block count:\s*(\d+)$/) { $block_count = $1; } elsif (/^Block size:\s*(\d+)$/) { $block_size = $1; } } if (!defined($block_size) or !defined($block_count)) { exit(1); } $total_blocks = $block_count + $blocks_to_add; $total_pe = int(($total_blocks * $block_size) / $pe_size); $total_pe++ if ((($total_blocks * $block_size) % $pe_size) > 0); print "$block_size $block_count $total_blocks $total_pe\n"; exit(0); ' -- "$blocks_to_add" "$pesize" \| { read block_size orig_num_blocks new_num_blocks new_num_pe if ! [ "$orig_num_blocks" -gt 0 ] || ! [ "$new_num_blocks" -gt "$orig_num_blocks" ] || ! [ "$blocks_to_add" -gt 0 ] || ! [ "$block_size" -gt 0 ] || ! [ -b "$e2fslv" ] || ! [ "$new_num_pe" -ge "$orig_num_pe" ] then echo "Safety check failed. Aborting." exit 1 fi set -x [ "$new_num_pe" -gt "$orig_num_pe" ] && lvresize -l "$new_num_pe" "$e2fslv" resize2fs "$e2fslv" "$new_num_blocks"}exit $?# vim:set ts=4 sw=4 sts=4 expandtab: