#!/bin/bash ############################################################## # File Name: fdisk.sh # Version: V1.0 # Author: sanshi # Organization: https://www.9133w.cn # Created Time : 2019-02-22 11:35:11 # Description: ############################################################## [ $EUID -ne 0 ] && echo "need root privileges" && exit 0 lock_file=/tmp/.$(basename $0) # new lv func function new_lv() { disk_n="$1" [ -z "$disk_n" ] && echo "absent args!" && exit 1 if ! fdisk -l $disk_n &> /dev/null then echo "there no such $disk_n !" exit 1 fi vg_list="`vgdisplay | awk '/VG Name/{print $3}'|sed ':t;N;s/\n/ /;b t'`" lv_list="`lvdisplay | awk '/LV Name/{print $3}'|sed ':t;N;s/\n/ /;b t'`" echo -e "volumn groups lists:\n\033[35m$vg_list\033[0m" && sleep 1 echo "Input which vg to add the lv:" read vgname echo -e "logic volumns lists:\n\033[35m$lv_list\033[0m" && sleep 1 echo "Input a new lv name:" read lvname if ! echo $vg_list | grep -q $vgname &> /dev/null then echo "volume group name false!" exit 1 elif echo $lv_list | grep -q $lvname &> /dev/null then echo "logic volume name exists!" exit 1 fi echo "creating $lvname ....." sleep 1 pvcreate ${disk_n} && sleep 1 && \ vgextend $vgname ${disk_n} && sleep 1 && \ lvcreate -n $lvname -l 100%FREE /dev/$vgname [ $? -ne 0 ] && echo "$lvname create failure!" && exit 2 echo "please input file system:(ext?/xfs?...)" read file_sys mkfs -t $file_sys /dev/$vgname/$lvname [ $? -ne 0 ] && echo "$lvname create failure!" && exit 2 echo "new lv: $lvname create success!" echo "please input the data path to mount the disk!" read -t 60 mount_dir [ -z "$mount_dir" ] && echo "you input nothing!" && exit 1 if [ ! -d $mount_dir ] then mkdir -p $mount_dir elif [ `du -s $mount_dir | awk '{print $1}'` -gt 0 ] then echo "There some files in $mount_dir!" echo "Are you sure to mount forse to $mount_dir ?(y/n)" read ansW if [ "$ansW" = "n" ] then exit 1 fi fi mount /dev/$vgname/$lvname $mount_dir [ $? -ne 0 ] && echo "mount $disk_n failure!" && exit 1 echo "mount $disk_n success!" } # extend func function lv_extend() { disk_lv="$1" [ -z "$disk_lv" ] && echo "absent args!" && exit 1 if ! fdisk -l $disk_lv &> /dev/null then echo "there no such $disk_lv !" exit 1 fi vg_list="`vgdisplay | awk '/VG Name/{print $3}'|sed ':t;N;s/\n/ /;b t'`" lv_list="`lvdisplay | awk '/LV Name/{print $3}'|sed ':t;N;s/\n/ /;b t'`" echo -e "volumn groups lists:\n\033[35m$vg_list\033[0m" && sleep 1 echo "Input which vg to extend:" read vgname echo -e "logic volumns lists:\n\033[35m$lv_list\033[0m" && sleep 1 echo "Input which lv to extend:" read lvname if ! echo $vg_list | grep -q $vgname &> /dev/null then echo "volume group name false!" exit 1 elif ! echo $lv_list | grep -q $lvname &> /dev/null then echo "logic volume name false!" exit 1 fi echo "extending $lvname ....." sleep 1 pvcreate ${disk_lv} && sleep 1 && \ vgextend $vgname ${disk_lv} && sleep 1 && \ lvextend -l +100%FREE /dev/$vgname/$lvname [ $? -ne 0 ] && echo "lv extend failure!" && exit 2 fs_disk=`df -T | awk 'NR!=1{print $1,$2}'| grep $lvname |awk '{print $2}'` if [ "$fs_disk" = "xfs" ] then xfs_growfs /dev/$vgname/$lvname [ $? -ne 0 ] && echo "format lv failure!" && exit 3 echo "extend $lvname success!" elif [[ "$fs_disk" =~ "ext" ]] then resize2fs /dev/$vgname/$lvname [ $? -ne 0 ] && echo "format lv failure!" && exit 3 echo "extend $lvname success!" else echo "unknown file system!" exit 1 fi } # fdisk func function fdisk_sh() { disk_in="$1" [ -z $disk_in ] && echo "there be absent args!" && exit 1 disk_unit=`fdisk -l $disk_in | grep Disk | grep "/dev" | awk 'split($4,l,"B"){print l[1]}'` disk_size=`fdisk -l $disk_in | grep Disk | grep "/dev" | awk 'split($3,t,"."){print t[1]}'` if [ $disk_size -le 2048 -a "$disk_unit" = "G" ] || [ "$disk_unit" = "M" ] then echo "n p 1 w " | fdisk $disk_in && partprobe $disk_in else parted -s $disk_in mklabel gpt && sleep 1 && \ parted -s $disk_in mkpart primary 0 -1 && \ partprobe $disk_in fi [ $? -ne 0 ] && echo "format $disk_in failure,check it!" && exit 1 echo "$disk_in format success!" sleep 1 echo "please select option:" select action_disk in "extend lv" "new lv" "new part" do if [ "$action_disk" = "extend lv" ] then lv_extend ${disk_in}1 && break elif [ "$action_disk" = "new part" ] then echo "please input file system:(ext?/xfs?...)" read file_sys mkfs -t $file_sys ${disk_in}1 [ $? -ne 0 ] && echo "mkfs $disk_in failure!" && exit 1 echo "mkfs $disk_in success,format: $file_sys" echo "please input the data path to mount the disk!" read -t 60 mount_dir [ -z "$mount_dir" ] && echo "you input nothing!" && exit 1 if [ ! -d $mount_dir ] then mkdir -p $mount_dir elif [ `du -s $mount_dir | awk '{print $1}'` -gt 0 ] then echo "There some files in $mount_dir!" echo "Are you sure to mount forse to $mount_dir ?(y/n)" read ansW if [ "$ansW" = "n" ] then exit 1 fi fi mount ${disk_in}1 $mount_dir [ $? -ne 0 ] && echo "mount ${disk_in}1 failure!" && exit 1 echo "mount ${disk_in}1 success!" && break elif [ "$action_disk" = "new lv" ] then new_lv ${disk_in}1 && break else echo "please input number!" fi done } # check disk func function check_disk() { disk_list=(`fdisk -l | \ grep 'Disk' | \ awk '{print $2}' | \ grep -E '/dev/[hsxv]d' | \ awk -F: '{print $1}' | \ sed ':t;N;s/\n/ /;b t'`) for disks in ${disk_list[@]} do format_num=`fdisk -l $disks | grep -c "${disks}[1-9]"` if [ $format_num -lt 1 ] then echo "$disks need to mkfs to format!" fdisk_sh $disks else echo "$disks has been mounted!" fi done } if [ -f $lock_file ] then echo "the script locked now!" exit 0 else echo "the script will run now!" touch $lock_file check_disk fi rm -f $lock_file exit 0