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

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

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

执行方法:以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 
  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 "33[")
  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

评论

目前评论:0   

点击加载更多评