1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
| #!/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
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
ONLINE_SCSI_DISK_PRESENT=$(lsblk --all | grep disk | grep -v fd | awk '{print $1}' | 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 New Added SCSI Disk: $ONLINE_SCSI_DISK_NEWADD
# 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_DISK_NEWADD; 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
1
t
8e
w
eof
check_execution_result
LVM_OPERATION_DISK_FILENAME=$ONLINE_SCSI_DISK_NEWADD_FILENAME"1"
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
#[iyunv@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.
#[iyunv@hlc7172009 ~]#
#[iyunv@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
#[iyunv@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 ]]; 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
|