#!/bin/sh
# 说明: 格式化数据盘
# 用法: bash parted.sh parted 10
set -e
# 定义颜色输出
function _color(){
key=$1
shift
case $key in
-g)
echo -e "\033[32m$@\033[0m">&1
;;
-r)
echo -e "\033[31m$@\033[0m" 2>&1
;;
-e)
echo -e "\033[31m\033[5m$@\033[0m" 2>&1 && exit 1
;;
-w)
echo -e "\033[33m$@\033[0m">&1
;;
*)
echo "$@"
;;
esac
}
# 格式化硬盘
function format_disk(){
_color -w "++++++++++++++++++++开始磁盘初始化++++++++++++++++++++"
#获取需要格式化的磁盘
disk=$(fdisk -l|grep "/dev/[xv|v|s]d[b-z]"| tail -n 1 | tr ":" ":" | awk -F":" '{print $1}'|cut -d '/' -f3)
if [ -z $disk ];then
_color -e "未找到需要格式化的磁盘,请检查!"
else
_color -g "获取需要格式化的磁盘是: $disk"
fi
#判断磁盘大小
if (locale | grep LANG | grep -qi zh_CN); then
disk_size_bytes=$(fdisk -l | grep -E "^Disk|^磁盘" | grep $disk | grep -E "字节|bytes" | grep -o -E "[0-9]+.[0-9]+ 字节" | grep -o -E "[0-9]+.[0-9]+")
else
disk_size_bytes=$(fdisk -l | grep -E "^Disk|^磁盘" | grep $disk | grep bytes | grep -o -E "[0-9]+.[0-9]+ bytes" | grep -o -E "[0-9]+.[0-9]+")
fi
disk_size_gb=$(expr "$disk_size_bytes" / 1000000000)
if [ "$disk_size_gb" -gt "$check_disk_size" ];then
_color -g "$disk 磁盘大小为 $disk_size_gb GB"
else
_color -e "$disk 磁盘大小小于 $check_disk_size GB,脚本退出"
fi
# 检查是否已有文件系统
set +e
blkid /dev/$disk >/dev/null 2>&1
if [ $? -eq 0 ]; then
_color -e "/dev/$disk 已有文件系统,脚本退出!"
fi
set -e
#判断获取的磁盘是否已经格式化 --script不阻塞进程
disk_num=$(parted /dev/$disk print --script | awk '/^Number/{getline; print}' | wc -l)
if [ "$disk_num" -eq 0 ];then
_color -g "$disk 磁盘未格式化,脚本继续"
else
_color -e "$disk 磁盘已经格式化,脚本退出"
fi
df -Th | grep ${disk} | grep ext && _color -e "$disk 磁盘已经ext格式化,脚本退出" # 新增,确保磁盘没有被ext格式化
#创建文件系统
_color -w "格式化进行中......"
mkfs.ext4 -v -F /dev/${disk} && _color -g "创建文件系统成功" || _color -e "创建文件系统失败"
#挂载磁盘分区
mount_path="/data"
mkdir -p "${mount_path}"
mount /dev/${disk} "${mount_path}" && _color -g "$mount_path 挂载成功" || _color -e "$mount_path 挂载失败"
set +e
#设置开机启动挂载硬盘
cat /etc/fstab | grep /dev/${disk} | grep ${mount_path}
if [ $? -eq 0 ];then
_color -w "$mount_path fstab已经存在"
else
echo "/dev/${disk} ${mount_path} ext4 defaults 0 0" >> /etc/fstab
_color -g "$mount_path fstab设置成功"
fi
set -e
#检查磁盘是否已经挂载
df -h | grep /dev/${disk} && _color -g "硬盘初始化成功" || _color -e "硬盘初始化失败"
_color -g "++++++++++++++++++++磁盘初始化成功++++++++++++++++++++"
}
USAGE="USAGE: $0 parted check_disk_size
check_disk_size 类型为数字,单位为GB,用于检查磁盘大小是否大于该值"
if [ $# -lt 2 ];then
_color -g "$USAGE"
exit 1
else
case $1 in
parted)
check_disk_size=`expr $2 + 0` || _color -e "check_disk_size请输入数字!" # 判断磁盘最小容量GB
which parted || _color -e "parted命令未安装,请先安装parted命令!" # 判断parted命令是否存在
format_disk
;;
*)
_color -g "$USAGE"
exit 1
esac
fi
赏
使用支付宝打赏
使用微信打赏
若你觉得我的文章对你有帮助,欢迎点击上方按钮对我打赏