一个专业运
维技术分享!

自动分区、格式化、挂载脚本

功能:自动检测是否有尚未分区的数据盘,格式化新的数据盘并自动挂载

解决了什么问题:一键式检测是否有尚未分区的数据盘,并能对其格式化和自动挂载,省去了复杂的命令和步骤

执行方法:以root身份执行命令

  1. 复制脚本
  2. chmod +x auto_fdisk.sh
  3. ./auto_fdisk.sh

结果:出现如下即自动分区、格式化、挂载成功:

自动分区、格式化、挂载脚本

脚本内容如下:

#!/bin/bash
# Notes: OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+
# Project home page:

export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin

clear

printf "

#######################################################################

#       OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+      #

#                             Auto fdisk                              #

#       For more information please visit http://oneinstack.com       #

#######################################################################

"


echo=echo

for cmd in echo /bin/echo; do

        $cmd >/dev/null 2>&1 || continue

        if ! $cmd -e "" | grep -qE '^-e'; then

                echo=$cmd

                break

        fi

done

CSI=$($echo -e "\033[")

CEND="${CSI}0m"

CDGREEN="${CSI}32m"

CRED="${CSI}1;31m"

CGREEN="${CSI}1;32m"

CYELLOW="${CSI}1;33m"

CBLUE="${CSI}1;34m"

CMAGENTA="${CSI}1;35m"

CCYAN="${CSI}1;36m"

CSUCCESS="$CDGREEN"

CFAILURE="$CRED"

CQUESTION="$CMAGENTA"

CWARNING="$CYELLOW"

CMSG="$CCYAN"


# Check if user is root

[ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }



MOUNT_DIR=/data

FSTAB_FILE=/etc/fstab



count=0

TMP1=/tmp/.tmp1

TMP2=/tmp/.tmp2



> $TMP1

> $TMP2




# check lock file, one time only let the script run one time 

LOCKfile=/tmp/.$(basename $0)

if [ -f "$LOCKfile" ];then

    echo

    echo "${CWARNING}The script is already exist, please next time to run this script${CEND}"

    echo

    exit

else

    echo

    echo "${CMSG}Step 1.No lock file, begin to create lock file and continue${CEND}"

    echo

    touch $LOCKfile

fi




# check disk partition

check_disk() {

    > $LOCKfile

    for i in `fdisk -l | grep "Disk" | grep "/dev" | awk '{print $2}' | awk -F: '{print $1}' | grep "vd"`

    do

        DEVICE_COUNT=$(fdisk -l $i | grep "$i" | awk '{print $2}' | awk -F: '{print $1}' | wc -l)

        NEW_MOUNT=$(df -h)

        if [ $DEVICE_COUNT -lt 2 ];then

            if [ -n "$(echo $NEW_MOUNT | grep -w "$i")" -o "$(grep -v '^#' $FSTAB_FILE | grep -v ^$ | awk '{print $1,$2,$3}' | grep -w "$i" | awk '{print $2}')" == '/' -o "$(grep -v '^#' $FSTAB_FILE | grep -v ^$ | awk '{print $1,$2,$3}' | grep -w "$i" | awk '{print $3}')" == 'swap' ];then

                echo "${CWARNING}The $i disk is mounted${CEND}"

            else

                echo $i >> $LOCKfile

                echo "You have a free disk, Now will fdisk it and mount it"

            fi

        fi

    done

    DISK_LIST=$(cat $LOCKfile)

    if [ "X$DISK_LIST" == "X" ];then

        echo

        echo "${CWARNING}No free disk need to be fdisk. Exit script${CEND}"

        echo

        rm -rf $LOCKfile

        exit 0

    else

        echo "${CMSG}This system have free disk :${CEND}"

        for i in `echo $DISK_LIST`

        do

            echo "$i"

            count=$((count+1))

        done

        [ $count -gt 1 ] && { echo "${CWARNING}This system has at least two free disk, You must manually mount it${CEND}"; exit 0; }

    fi

}




# check os

check_os() {

    os_release=$(grep "Aliyun Linux release" /etc/issue 2>/dev/null)

    os_release_2=$(grep "Aliyun Linux release" /etc/aliyun-release 2>/dev/null)

    if [ "$os_release" ] && [ "$os_release_2" ];then

        if echo "$os_release" | grep "release 5" >/dev/null 2>&1;then

            os_release=aliyun5

            modify_env

        fi

    fi

}




# install ext4

modify_env() {

    modprobe ext4

    yum -y install e4fsprogs

}




# fdisk ,formating and create the file system

fdisk_fun() {

fdisk -S 56 $1 << EOF

n

p

1







wq

EOF




sleep 5

mkfs.ext4 ${1}1

}




# make directory

make_dir() {

    echo "${CMSG}Step 4.Begin to make directory${CEND}"

    [ -d "$MOUNT_DIR" ] && mv ${MOUNT_DIR}{,_bk}

    mkdir -p $MOUNT_DIR

    echo "$MOUNT_DIR" >> $TMP1

}




# config /etc/fstab and mount device

main() {

    for i in `echo $DISK_LIST`

    do

        echo

        echo "${CMSG}Step 3.Begin to fdisk free disk${CEND}"

        [ -n "`df -h | grep ${i}1`" ] && { echo "${CFAILURE}The ${i}1 already mount${CEND}"; echo; exit 0; }

        fdisk_fun $i > /dev/null 2>&1

        echo

        echo "${i}1" >> $TMP2

    done

    make_dir

    > $LOCKfile

    paste $TMP2 $TMP1 > $LOCKfile

    echo

    echo "${CMSG}Step 5.Begin to write configuration to /etc/fstab and mount device${CEND}"

    while read a b

    do

        [ -z "`grep ^${a} $FSTAB_FILE`" -a -z "`grep ${b} $FSTAB_FILE`" ] && echo "${a} $b      ext4    defaults      0 0" >> $FSTAB_FILE

    done < $LOCKfile

    mount -a

    echo

}




# start script

echo "${CMSG}Step 2.Begin to check free disk${CEND}"

#service mysqld stop

#mv /data /root

check_os

check_disk

main

df -h

#mv /root/data/* /data

#service mysqld start

rm -rf $LOCKfile $TMP1 $TMP2
赞(4) 打赏
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《自动分区、格式化、挂载脚本》
文章链接:https://www.xlsys.cn/1408.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途,否则法律问题自行承担。

评论 抢沙发

评论前必须登录!

 

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏