AWS运维常用工具脚本手册

记录常用脚本或命令

脚本

EC2快速初始化

无额外磁盘

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
sudo su -
yum update -y
USER="appadmin"
CFG="/etc/ssh/sshd_config"
PASS=$(openssl rand -hex 16)
IP=$(ip a|grep inet| grep 10\.| awk '{print $2}'|awk -F '/' '{print $1}')
useradd ${USER}
sed -E -i 's/^#?( ?)*PasswordAuthentication.*$/PasswordAuthentication yes/' ${CFG}
service sshd restart
echo ${PASS} | passwd ${USER} --stdin
echo "${USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${USER}
# 配置默认AWS客户端信息
cat << EOF > /tmp/aws.command


cn-north-1
json
EOF

aws configure < /tmp/aws.command

# 安装dhclient服务
yum install -y dhclient
# 添加本地DNS到默认配置
echo "supersede domain-name-servers 10.1.0.1;" >> /etc/dhcp/dhclient.conf
# 修改eth0默认配置
CFG="/etc/sysconfig/network-scripts/ifcfg-eth0"
cp ${CFG} ${CFG}.bak
if grep "PEERDNS" ${CFG};then sed -E -i "s/^#?( ?)*PEERDNS=.*$/PEERDNS=yes/" ${CFG}; else echo "PEERDNS=yes" >> ${CFG};fi
# 重启网络服务
service network restart
cat << EOF
初始化完毕, 连接信息:
ssh ${USER}@${IP}
${PASS}
EOF

有额外磁盘

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
sudo su -
yum update -y
USER="appadmin"
CFG="/etc/ssh/sshd_config"
PASS=$(openssl rand -hex 16)
IP=$(ip a|grep inet| grep 10\.| awk '{print $2}'|awk -F '/' '{print $1}')
useradd ${USER}
sed -E -i 's/^#?( ?)*PasswordAuthentication.*$/PasswordAuthentication yes/' ${CFG}
service sshd restart
echo ${PASS} | passwd ${USER} --stdin
echo "${USER} ALL=(ALL) NOPASSWD:ALL" > /etc/sudoers.d/${USER}
# 配置默认AWS客户端信息
cat << EOF > /tmp/aws.command


cn-north-1
json
EOF

aws configure < /tmp/aws.command

# 安装dhclient服务
yum install -y dhclient
# 添加本地DNS到默认配置
echo "supersede domain-name-servers 10.1.0.1;" >> /etc/dhcp/dhclient.conf
# 修改eth0默认配置
CFG="/etc/sysconfig/network-scripts/ifcfg-eth0"
cp ${CFG} ${CFG}.bak
if grep "PEERDNS" ${CFG};then sed -E -i "s/^#?( ?)*PEERDNS=.*$/PEERDNS=yes/" ${CFG}; else echo "PEERDNS=yes" >> ${CFG};fi
# 重启网络服务
service network restart

# 如需挂载额外磁盘, 执行如下命令
DISK="/dev/nvme1n1"
cat << EOF > /tmp/fdisk.command
g
n



w
q
EOF
fdisk /dev/nvme1n1 < /tmp/fdisk.command
partprobe
mkfs.ext4 ${DISK}p1
P_UUID=$(blkid |grep "${DISK}p1"| awk '{print $2}')
mkdir -p /data
echo "${P_UUID} /data ext4 defaults,noatime 1 1" >> /etc/fstab
mount -a
cat << EOF
初始化完毕, 连接信息:
ssh ${USER}@${IP}
${PASS}
EOF

EC2扩容磁盘

调整卷大小后扩展 Linux 文件系统 - Amazon Elastic Compute Cloud

ext4

1
2
3
4
5
6
7
8
9
10
11
12
13
DISK="nvme0n1"
PART_NUM=${DISK_NUM:-1}
TMP_LOG=/tmp/disk_extend.log

echo "扩容前状态" > ${TMP_LOG}
lsblk >> ${TMP_LOG}
echo "将扩容: /dev/${DISK}${PART_NUM}号分区" >> ${TMP_LOG}
sudo growpart /dev/${DISK} ${PART_NUM} >> ${TMP_LOG}
sudo resize2fs /dev/${DISK} >> ${TMP_LOG}
echo "扩容后状态" >> ${TMP_LOG}
lsblk >> ${TMP_LOG}
cat ${TMP_LOG}
rm ${TMP_LOG}

xfs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
DISK="nvme0n1"
PART_NUM=${DISK_NUM:-1}
TMP_LOG=/tmp/disk_extend.log

sudo yum install -y xfsprogs
echo "扩容前状态" > ${TMP_LOG}
lsblk >> ${TMP_LOG}
echo "将扩容: /dev/${DISK}${PART_NUM}号分区" >> ${TMP_LOG}
sudo growpart /dev/${DISK} ${PART_NUM} >> ${TMP_LOG}
MOUNT_POINT=$(lsblk |grep ${DISK}| awk '{print $7}'|grep -v ^$)
sudo xfs_growfs -d ${MOUNT_POINT} >> ${TMP_LOG}
echo "扩容后状态" >> ${TMP_LOG}
lsblk >> ${TMP_LOG}
cat ${TMP_LOG}
rm ${TMP_LOG}

通用扩容方法

Resize an ext2/3/4 and XFS root partition without LVM | ComputingForGeeks

How to Extend XFS Filesystem in Linux Without LVM

What is growpart utility and how to use it ? - Red Hat Customer Portal

当前情况
扩充底层硬件后

可以看到底层扩容后, parted命令通过修复可以看到磁盘已扩容(9G), 但磁盘仍旧是8G, 需要安装额外包解决

1
2
3
4
# For CentOS/RHEL/Fedora
sudo yum -y install cloud-utils-growpart gdisk
# For Ubuntu/Debain
sudo apt -y install cloud-guest-utils gdisk

安装完成后, 按照上面的EC2扩容方法执行即可, 不过需要注意上面引用链接中RedHat1官方解决方案描述中的重要信息:

  1. growpart is one of the utility to extend the last partition of the disk to fill the available free space on the disk. It changes the sector position to the end sector of the disk.
  2. It only extends the last partition. It doesn't create or delete any existing partition.
  3. It can be run online. Dry run test can also be done to check the same.

重要的事说三遍:

只能扩展最后一个分区!

只能扩展最后一个分区!

只能扩展最后一个分区!

Q&A

磁盘已满(100%), 无法执行扩容操作

No space left on deviceds

No space left on deviceds
  1. 尝试删除/tmp/var/log等目录下无用文件

    删除无用日志等
  2. 再次执行扩容命令即可


  1. What is growpart utility and how to use it ? - Red Hat Customer Portal↩︎