目 录CONTENT

文章目录

lvm一键扩容根目录脚本

所念皆星河
2020-01-03 / 0 评论 / 0 点赞 / 14 阅读 / 5673 字

创建lvm_part.sh脚本:

vim lvm_part.sh
#!/bin/bash
# Usage: Automatic expand lv with LVM managed disk
#  Setp 1: Add Hard Disk or Storage to Computing unit
#   Setp 2: Execute this script with root privilege
#   Setp 3: Mind info of this script execution result
# Open the refrigerator door, get the shell script execution environment ready
# Put the elephant into the refrigerator, how the shell scripts works
# Close the refrigerator door, check out the result of execution
# Simetimes, we have to pull new elephant or elephant dung out here, unset variables of shell script
set -x
function check_execution_result(){
        if [[ ! -z $RETVAL ]]; then
                unset RETVAL
        fi
        RETVAL=$?
        if [[ $RETVAL -ne 0 ]]; then
                echo execution failed! 
                exit $RETVAL
        else
                echo execution successfully! 
        fi
        unset RETVAL
}
 
# lsblk --scsi
# lsblk --all
# NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
# fd0               2:0    1    4K  0 disk 
# sda               8:0    0   40G  0 disk 
# ├─sda1            8:1    0  500M  0 part /boot
# └─sda2            8:2    0 39.5G  0 part 
#   ├─centos-swap 253:0    0  3.9G  0 lvm  [SWAP]
#   └─centos-root 253:1    0 35.6G  0 lvm  /
# sdb               8:16   0   16G  0 disk 
# sr0              11:0    1  6.6G  0 rom  

# Show present scsi disk online
# Q: Why use "xargs" here?
# A: Convert the text from multi-line single-column into single-line multi-column, for sed operation
# Select the first disk
ONLINE_SCSI_FIRST_DISK=$(lsblk --all | grep disk | grep -v fd | awk 'NR==1{print $1}' )
PARTED_DISK_OLD=$(lsblk --all | grep part | awk -F '─| ' '{print $2}' | xargs)
# TODO
# For execution this script beyond twice
# ONLINE_SCSI_DISK_PRESENT=sda
# Find new scsi disk online
# TODO figure it out why there is host0? 
echo "- - -" >/sys/class/scsi_host/host0/scan
echo "- - -" >/sys/class/scsi_host/host1/scan
echo "- - -" >/sys/class/scsi_host/host2/scan
# Show new added scsi disk online
# ONLINE_SCSI_DISK_NEWADD=$(lsblk --all | grep disk | grep -v fd | awk '{print $1}' | xargs echo | sed "s/$ONLINE_SCSI_DISK_PRESENT//g")
# Construct disk file with full path
echo Partition SCSI Disk: $ONLINE_SCSI_FIRST_DISK
# Get VG Name
VG_Name=$(vgdisplay | grep 'VG Name' | awk '{print $NF}')
VG_PATH_TO_EXTEND=$(lvdisplay | grep 'LV Path' | awk '{print $NF}' | grep root)
for BLOCK in $ONLINE_SCSI_FIRST_DISK; do
    ONLINE_SCSI_DISK_NEWADD_FILENAME="/dev/"$BLOCK
    # end-of-file contents and eof mark must start row1
    fdisk $ONLINE_SCSI_DISK_NEWADD_FILENAME >/dev/null 2>&1<<eof
n
p
3
20807
 
 
t
3
8e
w
eof
# partprobe
partx -v -a $ONLINE_SCSI_DISK_NEWADD_FILENAME
    check_execution_result
    echo old parted disks: $PARTED_DISK_OLD
    PARTED_DISK_NEW=$(lsblk --all | grep part | awk -F '─| ' '{print $2}' | xargs echo | sed "s/$PARTED_DISK_OLD//g")
    echo new parted disks: $PARTED_DISK_NEW
    PARTED_DISK_NEW=$(echo $PARTED_DISK_NEW)
    LVM_OPERATION_DISK_FILENAME="/dev/"$PARTED_DISK_NEW
    pvcreate $LVM_OPERATION_DISK_FILENAME >/dev/null 2>&1
    check_execution_result
    vgextend $VG_Name $LVM_OPERATION_DISK_FILENAME >/dev/null 2>&1
    check_execution_result
    lvresize -l +100%FREE $VG_PATH_TO_EXTEND >/dev/null 2>&1
    check_execution_result
 
# resize2fs - ext2/ext3/ext4 file system resizer
# xfs_growfs, xfs_info - expand an XFS filesystem
 
#[root@hlc7172009 ~]# resize2fs /dev/mapper/centos-root
#resize2fs 1.42.9 (28-Dec-2013)
#resize2fs: Bad magic number in super-block while trying to open /dev/mapper/centos-root
#Couldn't find valid filesystem superblock.
#[root@hlc7172009 ~]#



 
#[root@hlc7172009 ~]# xfs_growfs $VG_PATH_TO_EXTEND
#meta-data=/dev/mapper/centos-root isize=256    agcount=4, agsize=2334208 blks
#         =                       sectsz=512   attr=2, projid32bit=1
#         =                       crc=0
#data     =                       bsize=4096   blocks=9336832, imaxpct=25
#         =                       sunit=0      swidth=0 blks
#naming   =version 2              bsize=4096   ascii-ci=0 ftype=0
#log      =internal               bsize=4096   blocks=4559, version=2
#         =                       sectsz=512   sunit=0 blks, lazy-count=1
#realtime =none                   extsz=4096   blocks=0, rtextents=0
#data blocks changed from 9336832 to 13530112
#[root@hlc7172009 ~]#
 
    # Check xfs_info if is installed 
    which xfs_info >/dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        yum install xfsprogs -y >/dev/null 2>&1
    fi
    # end Check xfs_info if is installed
 
    # Check VG_PATH_TO_EXTEND if is xfs filesystem
    xfs_info $VG_PATH_TO_EXTEND >/dev/null 2>&1
    if [[ $? -ne 0 ]]; then
        # is not xfs
        VG_PATH_TO_EXTEND_IS_NOT_XFS=0
    else
        # is xfs
        VG_PATH_TO_EXTEND_IS_NOT_XFS=1
    fi
    # end Check VG_PATH_TO_EXTEND if is xfs filesystem
 
    # TODO CentOS7 default filesystem is xfs, so we can check it out by OS if is CentOS7
 
    if [ $VG_PATH_TO_EXTEND_IS_NOT_XFS != 0 ]; then
        # is xfs
        xfs_growfs $VG_PATH_TO_EXTEND >/dev/null 2>&1
    else
        # is not xfs
        resize2fs $VG_PATH_TO_EXTEND >/dev/null 2>&1
    fi
    check_execution_result
    df -h
    lsblk --all
done

添加执行权限:

chmod +x lvm_part.sh

执行扩容:

source lvm_part.sh
0

评论区