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

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

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

  1. wget http://mirrors.linuxeye.com/scripts/auto_fdisk.sh

  2. chmod +x auto_fdisk.sh

  3. ./auto_fdisk.sh

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

e333be41-3789-4246-abad-db2ba0e67593

脚本内容如下:

  1. #!/bin/bash

  2. # Author:  yeho <lj2007331 AT gmail.com>

  3. # BLOG:  https://blog.linuxeye.com

  4. #

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

  6. #

  7. # Project home page:

  8. #       http://oneinstack.com

  9. #       https://github.com/lj2007331/oneinstack


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

  11. clear

  12. printf "

  13. #######################################################################

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

  15. #                             Auto fdisk                              #

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

  17. #######################################################################

  18. "


  19. echo=echo

  20. for cmd in echo /bin/echo; do

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

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

  23.                 echo=$cmd

  24. break

  25.         fi

  26. done

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

  28. CEND="${CSI}0m"

  29. CDGREEN="${CSI}32m"

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

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

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

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

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

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

  36. CSUCCESS="$CDGREEN"

  37. CFAILURE="$CRED"

  38. CQUESTION="$CMAGENTA"

  39. CWARNING="$CYELLOW"

  40. CMSG="$CCYAN"


  41. # Check if user is root

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


  43. MOUNT_DIR=/data

  44. FSTAB_FILE=/etc/fstab


  45. count=0

  46. TMP1=/tmp/.tmp1

  47. TMP2=/tmp/.tmp2


  48. > $TMP1

  49. > $TMP2


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

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

  52. if [ -f "$LOCKfile" ];then

  53.     echo

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

  55.     echo

  56.     exit

  57. else

  58.     echo

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

  60.     echo

  61.     touch $LOCKfile

  62. fi


  63. # check disk partition

  64. check_disk() {

  65.     > $LOCKfile

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

  67.     do

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

  69.         NEW_MOUNT=$(df -h)

  70. if [ $DEVICE_COUNT -lt 2 ];then

  71. 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

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

  73. else

  74.                 echo $i >> $LOCKfile

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

  76.             fi

  77.         fi

  78.     done

  79.     DISK_LIST=$(cat $LOCKfile)

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

  81.         echo

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

  83.         echo

  84.         rm -rf $LOCKfile

  85.         exit 0

  86. else

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

  88. for i in `echo $DISK_LIST`

  89.         do

  90.             echo "$i"

  91. count=$((count+1))

  92.         done

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

  94.     fi

  95. }


  96. # check os

  97. check_os() {

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

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

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

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

  102.             os_release=aliyun5

  103.             modify_env

  104.         fi

  105.     fi

  106. }


  107. # install ext4

  108. modify_env() {

  109.     modprobe ext4

  110.     yum -y install e4fsprogs

  111. }


  112. # fdisk ,formating and create the file system

  113. fdisk_fun() {

  114. fdisk -S 56 $1 << EOF

  115. n

  116. p

  117. 1



  118. wq

  119. EOF


  120. sleep 5

  121. mkfs.ext4 ${1}1

  122. }


  123. # make directory

  124. make_dir() {

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

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

  127.     mkdir -p $MOUNT_DIR

  128.     echo "$MOUNT_DIR" >> $TMP1

  129. }


  130. # config /etc/fstab and mount device

  131. main() {

  132. for i in `echo $DISK_LIST`

  133.     do

  134.         echo

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

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

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

  138.         echo

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

  140.     done

  141.     make_dir

  142.     > $LOCKfile

  143.     paste $TMP2 $TMP1 > $LOCKfile

  144.     echo

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

  146. while read a b

  147.     do

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

  149.     done < $LOCKfile

  150.     mount -a

  151.     echo

  152. }


  153. # start script

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

  155. #service mysqld stop

  156. #mv /data /root

  157. check_os

  158. check_disk

  159. main

  160. df -h

  161. #mv /root/data/* /data

  162. #service mysqld start

  163. rm -rf $LOCKfile $TMP1 $TMP2

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