reinstall/resize.sh
2024-03-06 00:10:15 +08:00

61 lines
1.7 KiB
Bash
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/bin/bash
PATH="/usr/sbin:/usr/bin"
update_part() {
partx -u "$1"
udevadm trigger
udevadm settle
}
# el 自带 fdisk parted (el7的part不支持在线扩容)
# ubuntu 自带 fdisk growpart
# 删除分区用
# el/ubuntu fdisk
# 扩容分区用
# el7 grownparted 额外安装
# el8/9/fedora parted
# ubuntu grownpart
# 找出主硬盘
root_drive=$(mount | awk '$3=="/" {print $1}')
xda=$(lsblk -r --inverse "$root_drive" | grep -w disk | awk '{print $1}')
# 删除 installer 分区
installer_num=$(readlink -f /dev/disk/by-label/installer | grep -o '[0-9]*$')
if [ -n "$installer_num" ]; then
# 要添加 LC_NUMERIC 或者将%转义成\%才能在cron里正确运行
# locale -a 不一定有"en_US.UTF-8",但肯定有"C.UTF-8"
LC_NUMERIC="C.UTF-8"
printf "d\n%s\nw" "$installer_num" | fdisk "/dev/$xda"
update_part "/dev/$xda"
fi
# 找出现在的最后一个分区,也就是系统分区
# el7 的 lsblk 没有 --sort所以用其他方法
# shellcheck disable=2012
part_num=$(ls -1v "/dev/$xda"* | tail -1 | grep -o '[0-9]*$')
part_fstype=$(lsblk -no FSTYPE "/dev/$xda"*"$part_num")
# 扩容分区
# ubuntu 和 el7 用 growpart其他用 parted
# el7 不能用parted在线扩容而fdisk扩容会改变 PARTUUID所以用 growpart
if grep -E -i 'centos:7|ubuntu' /etc/os-release; then
growpart "/dev/$xda" "$part_num"
else
printf 'yes\n100%%' | parted "/dev/$xda" resizepart "$part_num" ---pretend-input-tty
fi
update_part "/dev/$xda"
# 扩容最后一个分区的文件系统
case $part_fstype in
xfs) xfs_growfs / ;;
ext*) resize2fs "/dev/$xda"*"$part_num" ;;
btrfs) btrfs filesystem resize max / ;;
esac
update_part "/dev/$xda"
# 删除脚本自身
rm -f /resize.sh /etc/cron.d/resize