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

  • A+
所属分类:Linux

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

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

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

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

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

脚本内容如下:

  1. #!/bin/bash
  2. # Author:  yeho <lj2007331 AT gmail.com>
  3. # BLOG:  https://blog.linuxeye.cn
  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

Wed Nov 11 10:54:41 CST 2015
avatar

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: