免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 4865 | 回复: 11
打印 上一主题 下一主题

fdisk无人值守shell求助 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-07-05 17:33 |只看该作者 |倒序浏览
本帖最后由 lynnteng0 于 2012-07-05 17:52 编辑

背景描述:通过kickstart安装完操作系统之后,需要格式化数据盘并挂载。第一步先先用fdisk 设备 进行分区,第二步Mkfs 格式发分区,第三步,修改fstab 。
需求:用fdisk进行分区的时候需要手动选择,因为服务器数量较多,所以想将此步骤通过脚本实现无人值守。1.我想先通过  fdisk -l | grep "Disk /dev" | awk '{print $2}' | sed '1d' | sed 's#:##g'  这条命令查找本机除了/dev/sda之外还有哪些磁盘。2.然后用fdisk对这些磁盘进行分区,每个磁盘只分一个区(例如sda1、sdb1、sdc1)
求牛人写一个fdisk分区的时候,可以无人值守的脚本,分区完之后再把所有新加的分区格式化,并添加到fstab(把新的分区名称命名为/data1、/data2、以此类推)

论坛徽章:
0
2 [报告]
发表于 2012-07-06 10:50 |只看该作者
#!/bin/bash

################################################################################
#Title: fdisk.sh
#Description: fdisk disk
#Platform: SuSE 10
#Copyright: Copyright (c) 2012
#Company: unknown:
#Author: liujixuan lkf62347
#Version: 1.0
#Date: 2012.07.06
################################################################################

################################################################################
#
#  variable
#
###############################################################################

YEAR=`/usr/bin/date +%Y`
MONTH=`/usr/bin/date +%m`
DAY=`/usr/bin/date +%d`
HOUR=`/usr/bin/date +%H`
MIN=`/usr/bin/date +%M`
SEC=`/usr/bin/date +%S`

TOOL_DIR="/tmp"

LOGDIR="${TOOL_DIR}/log_1"
if [ ! -d $LOGDIR ]
then
    /usr/bin/mkdir -p $LOGDIR
fi
LOG="${LOGDIR}/fdisk.${YEAR}-${MONTH}-${DAY}_${HOUR}${MIN}${SEC}"
/usr/bin/touch $LOG
chmod 644 $LOG
#########################fdisk operation########################################

echo "n
p
1
1

w" >/tmp/2

###########################fdisk disk###########################################

fdisk_disk()
{
          fdisk -l | grep -w "Disk" | awk '{print $2}' | sed '1d' | sed 's#:##g' > /tmp/1
    y=`cat /tmp/1 | wc -l`
    i=1
    while [ "$i" -le "$y" ]
    do
       fdisk `sed -n "${i}"p /tmp/1`  < /tmp/2
       echo "y" | mkfs.ext3 `sed -n "${i}"p /tmp/1`1   2>/dev/null
       sleep 5
       i=`expr $i + 1`
#       let i+=1
    done
}       

mkdir_dir()
{
          fdisk -l | grep -w "Disk" | awk '{print $2}' | sed '1d' | sed 's#:##g' > /tmp/1
          a=`cat /tmp/1 | wc -l`
          b=1
          while [ "$b" -le "$a" ]
          do
          mkdir -p /root/data"$b"
          b=`expr $b + 1 `
          done
}       

mount_data()
}
   z=`cat /tmp/1 | wc -l`
   x=1
   while [ "$x" -le "$z" ]
   do
       mount `sed -n "${x}"p /tmp/1`1 data"$x"
       echo "`sed -n "${x}"p /tmp/1`1 data"$x"                ext3       acl,user_xattr        1 2" >> /etc/fstab
       i=`expr $x + 1 `
   done
}       

main()
{
    mkdir_dir
    fdisk_disk
    mount_data
}       

##################################main#########################################

main | tee -a $LOG
rm -rf /tmp/1
rm -rf /tmp/2

论坛徽章:
0
3 [报告]
发表于 2012-07-06 11:36 |只看该作者
centos的/usr/bin/date这个目录是/bin/date,所以我将脚本里面的所有/usr/bin替换成了/bin。然后运行该脚本就报错了下面是报错信息

[root@localhost ~]# ./fdisk.sh
./fdisk.sh: line 76: syntax error near unexpected token `}'
./fdisk.sh: line 76: ` }'
回复 2# liu850918


   

论坛徽章:
0
4 [报告]
发表于 2012-07-06 11:40 |只看该作者
回复 3# lynnteng0


   呵呵,符号敲反了!你把红色的地方改成:{

mount_data()
}   z=`cat /tmp/1 | wc -l`
   x=1
   while [ "$x" -le "$z" ]
   do
       mount `sed -n "${x}"p /tmp/1`1 data"$x"
       echo "`sed -n "${x}"p /tmp/1`1 data"$x"                ext3       acl,user_xattr        1 2" >> /etc/fstab
       i=`expr $x + 1 `
   done
}        

论坛徽章:
0
5 [报告]
发表于 2012-07-06 11:41 |只看该作者
mount_data()
}   --改成 {

   z=`cat /tmp/1 | wc -l`
   x=1
   while [ "$x" -le "$z" ]
   do
       mount `sed -n "${x}"p /tmp/1`1 data"$x"
       echo "`sed -n "${x}"p /tmp/1`1 data"$x"                ext3       acl,user_xattr        1 2" >> /etc/fstab
       i=`expr $x + 1 `
   done
}  

论坛徽章:
0
6 [报告]
发表于 2012-07-06 15:03 |只看该作者
/data*目录需要挂载,所以将/data*,创建在了根目录下面,磁盘格式从ext3改成了ext4
现在运行脚本会提示设备占用  提示如下
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
  

修改过的脚本如下

#!/bin/bash

################################################################################
#Title: fdisk.sh
#Description: fdisk disk
#Platform: SuSE 10
#Copyright: Copyright (c) 2012
#Company: unknown:
#Author: liujixuan lkf62347
#Version: 1.0
#Date: 2012.07.06
################################################################################

################################################################################
#
#  variable
#
###############################################################################

YEAR=`/bin/date +%Y`
MONTH=`/bin/date +%m`
DAY=`/bin/date +%d`
HOUR=`/bin/date +%H`
MIN=`/bin/date +%M`
SEC=`/bin/date +%S`

TOOL_DIR="/tmp"

LOGDIR="${TOOL_DIR}/log_1"
if [ ! -d $LOGDIR ]
then
     /bin/mkdir -p $LOGDIR
fi
LOG="${LOGDIR}/fdisk.${YEAR}-${MONTH}-${DAY}_${HOUR}${MIN}${SEC}"
/bin/touch $LOG
chmod 644 $LOG
#########################fdisk operation########################################

echo "n
p
1
1

w" >/tmp/2

###########################fdisk disk###########################################

fdisk_disk()
{
           fdisk -l | grep -w "Disk" |grep dev | awk '{print $2}' | sed '1d' | sed 's#:##g' > /tmp/1
     y=`cat /tmp/1 | wc -l`
     i=1
     while [ "$i" -le "$y" ]
     do
        fdisk `sed -n "${i}"p /tmp/1`  < /tmp/2
        echo "y" | mkfs.ext3 `sed -n "${i}"p /tmp/1`1   2>/dev/null
        sleep 5
       i=`expr $i + 1`
#       let i+=1
     done
}

mkdir_dir()
{
           fdisk -l | grep -w "Disk" |grep dev | awk '{print $2}' | sed '1d' | sed 's#:##g' > /tmp/1
           a=`cat /tmp/1 | wc -l`
           b=1
           while [ "$b" -le "$a" ]
           do
           mkdir -p /data"$b"
           b=`expr $b + 1 `
           donemount_data()
{
    z=`cat /tmp/1 | wc -l`
    x=1
    while [ "$x" -le "$z" ]
    do
        mount `sed -n "${x}"p /tmp/1`1 /data"$x"
        echo "`sed -n "${x}"p /tmp/1`1 /data"$x"                ext4       acl,user_xattr        1 2" >> /etc/fstab
        i=`expr $x + 1 `
    done
}

main()
{
     mkdir_dir
     fdisk_disk
     mount_data
}

##################################main#########################################

main | tee -a $LOG
rm -rf /tmp/1
rm -rf /tmp/2
}

回复 5# liu850918


   

论坛徽章:
0
7 [报告]
发表于 2012-07-06 15:31 |只看该作者
我这边帮你看了下,感觉么啥问题! 我手上么环境,有环境还好帮你定位点~

论坛徽章:
0
8 [报告]
发表于 2012-07-06 15:43 |只看该作者
你先在最后加上这句:
##################################main#########################################

main | tee -a $LOG
cat /etc/fstab | uniq > /etc/fstab --->这行对fstab文件进行重新排序!
rm -rf /tmp/1
rm -rf /tmp/2

论坛徽章:
2
午马
日期:2015-01-27 11:22:392015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2012-07-06 16:29 |只看该作者
建议用expect...

论坛徽章:
0
10 [报告]
发表于 2012-07-06 16:57 |只看该作者
继续求助,脚本运行之后提示报错了
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
mount: /dev/sdc1 already mounted or /data1 busy
mount: according to mtab, /dev/sdc1 is already mounted on /data1
这个报错信心会不停运行,同时会不停的在/etc/fstab里面添加以下信息
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
/dev/sdc1 /data1                ext4       acl,user_xattr        1 2
运行df -h  显示sdc1已经挂载成功
文件系统              容量  已用  可用 已用%% 挂载点
/dev/sda1             267G  1.1G  253G   1% /
tmpfs                 3.9G     0  3.9G   0% /dev/shm
/dev/sdc1             275G  192M  261G   1% /data1
现在不停的提示报错,但是第一块硬盘已经挂载上去了,不挂载第二块硬盘,求助6楼的脚本有问题吗
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP