zoukankan      html  css  js  c++  java
  • 自动分区、格式化、挂载脚本

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

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

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

    wget http://mirrors.linuxeye.com/scripts/auto_fdisk.sh
    chmod +x auto_fdisk.sh
    ./auto_fdisk.sh

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

    脚本内容如下:

    #!/bin/bash
    # Author:  yeho <lj2007331 AT gmail.com>
    # BLOG:  https://blog.linuxeye.com
    #
    # Notes: OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+
    #
    # Project home page:
    #       http://oneinstack.com
    #       https://github.com/lj2007331/oneinstack
    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 "33[")
    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

    参考:http://help.aliyun.com/knowledge_detail/6689611.html

  • 相关阅读:
    CF 461B Appleman and Tree
    POJ 1821 Fence
    NOIP 2012 开车旅行
    CF 494B Obsessive String
    BZOJ2337 XOR和路径
    CF 24D Broken robot
    POJ 1952 BUY LOW, BUY LOWER
    SPOJ NAPTIME Naptime
    POJ 3585
    CF 453B Little Pony and Harmony Chest
  • 原文地址:https://www.cnblogs.com/clarke/p/5447265.html
Copyright © 2011-2022 走看看