Liang Ke

自动分区、格式化、挂载脚本
功能:自动检测是否有尚未分区的数据盘,格式化新的数据盘并自动挂载解决了什么问题:一键式检测是否有尚未分区的数据盘,...
扫描右侧二维码阅读全文
10
2018/12

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

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

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

执行方法:以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.  
  11. export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  12. clear
  13. printf "
  14. #######################################################################
  15. #       OneinStack for CentOS/RadHat 5+ Debian 6+ and Ubuntu 12+      #
  16. #                             Auto fdisk                              #
  17. #       For more information please visit http://oneinstack.com       #
  18. #######################################################################
  19. "
  20.  
  21. echo=echo
  22. for cmd in echo /bin/echo; do
  23.         $cmd >/dev/null 2>&1 || continue
  24.         if ! $cmd -e "" | grep -qE '^-e'; then
  25.                 echo=$cmd
  26.                 break
  27.         fi
  28. done
  29. CSI=$($echo -e "\033[")
  30. CEND="${CSI}0m"
  31. CDGREEN="${CSI}32m"
  32. CRED="${CSI}1;31m"
  33. CGREEN="${CSI}1;32m"
  34. CYELLOW="${CSI}1;33m"
  35. CBLUE="${CSI}1;34m"
  36. CMAGENTA="${CSI}1;35m"
  37. CCYAN="${CSI}1;36m"
  38. CSUCCESS="$CDGREEN"
  39. CFAILURE="$CRED"
  40. CQUESTION="$CMAGENTA"
  41. CWARNING="$CYELLOW"
  42. CMSG="$CCYAN"
  43.  
  44. # Check if user is root
  45. [ $(id -u) != "0" ] && { echo "${CFAILURE}Error: You must be root to run this script${CEND}"; exit 1; }
  46.  
  47. MOUNT_DIR=/data
  48. FSTAB_FILE=/etc/fstab
  49.  
  50. count=0
  51. TMP1=/tmp/.tmp1
  52. TMP2=/tmp/.tmp2
  53.  
  54. > $TMP1
  55. > $TMP2
  56.  
  57. # check lock file, one time only let the script run one time 
  58. LOCKfile=/tmp/.$(basename $0)
  59. if [ -f "$LOCKfile" ];then
  60.     echo
  61.     echo "${CWARNING}The script is already exist, please next time to run this script${CEND}"
  62.     echo
  63.     exit
  64. else
  65.     echo
  66.     echo "${CMSG}Step 1.No lock file, begin to create lock file and continue${CEND}"
  67.     echo
  68.     touch $LOCKfile
  69. fi
  70.  
  71. # check disk partition
  72. check_disk() {
  73.     > $LOCKfile
  74.     for i in `fdisk -l | grep "Disk" | grep "/dev" | awk '{print $2}' | awk -F: '{print $1}' | grep "vd"`
  75.     do
  76.         DEVICE_COUNT=$(fdisk -l $i | grep "$i" | awk '{print $2}' | awk -F: '{print $1}' | wc -l)
  77.         NEW_MOUNT=$(df -h)
  78.         if [ $DEVICE_COUNT -lt 2 ];then
  79.             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
  80.                 echo "${CWARNING}The $i disk is mounted${CEND}"
  81.             else
  82.                 echo $i >> $LOCKfile
  83.                 echo "You have a free disk, Now will fdisk it and mount it"
  84.             fi
  85.         fi
  86.     done
  87.     DISK_LIST=$(cat $LOCKfile)
  88.     if [ "X$DISK_LIST" == "X" ];then
  89.         echo
  90.         echo "${CWARNING}No free disk need to be fdisk. Exit script${CEND}"
  91.         echo
  92.         rm -rf $LOCKfile
  93.         exit 0
  94.     else
  95.         echo "${CMSG}This system have free disk :${CEND}"
  96.         for i in `echo $DISK_LIST`
  97.         do
  98.             echo "$i"
  99.             count=$((count+1))
  100.         done
  101.         [ $count -gt 1 ] && { echo "${CWARNING}This system has at least two free disk, You must manually mount it${CEND}"; exit 0; }
  102.     fi
  103. }
  104.  
  105. # check os
  106. check_os() {
  107.     os_release=$(grep "Aliyun Linux release" /etc/issue 2>/dev/null)
  108.     os_release_2=$(grep "Aliyun Linux release" /etc/aliyun-release 2>/dev/null)
  109.     if [ "$os_release" ] && [ "$os_release_2" ];then
  110.         if echo "$os_release" | grep "release 5" >/dev/null 2>&1;then
  111.             os_release=aliyun5
  112.             modify_env
  113.         fi
  114.     fi
  115. }
  116.  
  117. # install ext4
  118. modify_env() {
  119.     modprobe ext4
  120.     yum -y install e4fsprogs
  121. }
  122.  
  123. # fdisk ,formating and create the file system
  124. fdisk_fun() {
  125. fdisk -S 56 $1 << EOF
  126. n
  127. p
  128. 1
  129.  
  130.  
  131. wq
  132. EOF
  133.  
  134. sleep 5
  135. mkfs.ext4 ${1}1
  136. }
  137.  
  138. # make directory
  139. make_dir() {
  140.     echo "${CMSG}Step 4.Begin to make directory${CEND}"
  141.     [ -d "$MOUNT_DIR" ] && mv ${MOUNT_DIR}{,_bk}
  142.     mkdir -p $MOUNT_DIR
  143.     echo "$MOUNT_DIR" >> $TMP1
  144. }
  145.  
  146. # config /etc/fstab and mount device
  147. main() {
  148.     for i in `echo $DISK_LIST`
  149.     do
  150.         echo
  151.         echo "${CMSG}Step 3.Begin to fdisk free disk${CEND}"
  152.         [ -n "`df -h | grep ${i}1`" ] && { echo "${CFAILURE}The ${i}1 already mount${CEND}"; echo; exit 0; }
  153.         fdisk_fun $i > /dev/null 2>&1
  154.         echo
  155.         echo "${i}1" >> $TMP2
  156.     done
  157.     make_dir
  158.     > $LOCKfile
  159.     paste $TMP2 $TMP1 > $LOCKfile
  160.     echo
  161.     echo "${CMSG}Step 5.Begin to write configuration to /etc/fstab and mount device${CEND}"
  162.     while read a b
  163.     do
  164.         [ -z "`grep ^${a} $FSTAB_FILE`" -a -z "`grep ${b} $FSTAB_FILE`" ] && echo "${a} $b      ext4    defaults      0 0" >> $FSTAB_FILE
  165.     done < $LOCKfile
  166.     mount -a
  167.     echo
  168. }
  169.  
  170. # start script
  171. echo "${CMSG}Step 2.Begin to check free disk${CEND}"
  172. #service mysqld stop
  173. #mv /data /root
  174. check_os
  175. check_disk
  176. main
  177. df -h
  178. #mv /root/data/* /data
  179. #service mysqld start
  180. rm -rf $LOCKfile $TMP1 $TMP2

转自:https://blog.linuxeye.cn/433.html

Last modification:January 21st, 2019 at 10:30 pm

Leave a Comment