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

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

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

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

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

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

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

Linux 自动分区、格式化、挂载脚本详解 Linux 第1张

脚本内容如下:

  #!/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  

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

参与评论