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

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

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

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

 代码如下 复制代码

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

结果:

脚本内容如下:

 代码如下 复制代码

#!/bin/bash
# Author:  yeho <lj2007331 AT gmail.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 "\033[")
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

时间: 2024-09-08 09:11:08

linux中自动分区、格式化、挂载shell脚本的相关文章

一个Linux中用于监控的简易shell脚本

系统管理员的任务真的很艰难,因为他/她必须监控服务器.用户.日志,还得创建备份,等等等等.对于大多数重复性的任务,大多数管理员都会写一个自动化脚本来日复一日地重复这些任务.这里,我们已经写了一个shell脚本给大家,用来自动化完成系统管理员所要完成的常规任务,这可能在多数情况下,尤其是对于新手而言十分有用,他们能通过该脚本获取到大多数的他们想要的信息,包括系统.网络.用户.负载.内存.主机.内部IP.外部IP.开机时间等. 我们已经注意并进行了格式化输出(在一定程度上哦).此脚本不包含任何恶意内

Linux系统硬盘分区 格式化 挂载的方法

1. 添加磁盘,查看磁盘状况  代码如下 复制代码 [root@db1 /]# fdisk -l Disk /dev/sda: 10.7 GB, 10737418240 bytes 255 heads, 63 sectors/track, 1305 cylinders Units = cylinders of 16065 * 512 = 8225280 bytes    Device Boot      Start         End      Blocks   Id  System /de

linux中自动备份mysql数据库的脚本

在从库服务器给添加crontab任务,定时执行备份脚本  代码如下 复制代码 #crontab -e 添加以下内容:  代码如下 复制代码 1 1 * * * /data/task/backmysql.sh #vi /data/task/backupmysql.sh 在backupmysql.sh文件中添加以下脚本完成备份,并删除7天前的备份  代码如下 复制代码 #!/bin/bash backupdir=/data/backup/mysql mysql_bin_dir=/usr/local/

linux中MySQL慢日志监控shell脚本实例

针对脚本的注解和整体构思,我会放到脚本之后为大家详解. #!/bin/bash    MON_FILE="$2"   # 指定所要监控的脚本路径 SEC=60          # 指定所要监控的频率,即间隔多久去查看一次 MON_POINT_FILE=/tmp/mon_mysql_slow.point  # 指定MySQL慢日志的监控点存放的路径 DIFF_MON_FILE=/tmp/mon_mysql_slow.log     # 指定在监控频率内增加的MySQL慢日志信息存放路径

linux中简单备份mysql数据库shell脚本

 代码如下 复制代码 #!/bin/bash root_path=/data/backup #进入备份文件存放目录 cd $root_path #备份文件名,系统当前时间(年-月-日),注意'+'后边不留空格 file_name=$(date +"%Y-%m-%d").sql #username:用户名,password:密码,database:数据库名 mysqldump -uusername -ppassword database > $file_name echo &quo

Linux中fdisk分区使用方法

实例解说Linux中fdisk分区使用方法 一.fdisk 的介绍 fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具:本人译的不太好,也没有看中文文档:其实就是分区工具. fdsik 能划分磁盘成为若干个区,同时也能为每个分区指定分区的文件系统,比如linux .fat32. linux .linux swap .fat16 以及其实类Unix类操作系统的文件系统等:当然我们用fdisk 对磁盘操作分区时,并不是一个

linux如何在终端里输入shell脚本?

问题描述 linux如何在终端里输入shell脚本? 大家在公司里工作时写shell是在字符界面还是在图形界面的终端里写?我在图形界面的终端里写每写完一个命令就按回车然后命令就会执行我看其他人写的shell脚本写了好多行那么如何才能写很多行的脚本而不会每写一行换行按回车时就执行? 解决方案 http://blog.chinaunix.net/uid-20328094-id-95121.html 解决方案二: http://fanqiang.chinaunix.net/program/shell/

linux定期备份MySQL数据库的Shell脚本

   Shell脚本是我们写不同类型命令的一种脚本,这些命令在这一个文件中就可以执行.我们也可以逐 一敲入命令手动执行.如果我们要使用shell脚本就必须在一开始把这些命令写到一个文本文件中,以后 就可以随意反复运行这些命令了.       假定你已经知道shell scripting. mysqldump和crontab.首先给出完整的脚本,后面会对该脚 本做说明.       适用操作系统:任何Linux或UNIX. 1.创建脚本       该Shell脚本可以自动备份数据库.只要复制粘贴

Linux批量添加用户和组shell脚本

最近在定制ISO的时候,有个需求是特定的项目用特定的用户去运行,取消root权限.这样就需要根据项目默认创建一批用户.于是写了个简单的脚本在系统安装完成后自动添加用户 简单例子 umask 0002   #批量创建用户组 for groups in aa bb cc dd do groupadd $groups done   #批量创建相同用户组的用户   for users in aa bb do useradd -g aa $users done useradd -g cc cc usera