歡迎您光臨本站 註冊首頁

fdisk無人值守shell求助

←手機掃碼閱讀     火星人 @ 2014-03-03 , reply:0

fdisk無人值守shell求助

 

背景描述:通過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、以此類推)
《解決方案》

#!/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
《解決方案》

centos的/usr/bin/date這個目錄是/bin/date,所以我將腳本裡面的所有/usr/bin替換成了/bin。然後運行該腳本就報錯了下面是報錯信息

# ./fdisk.sh
./fdisk.sh: line 76: syntax error near unexpected token `}'
./fdisk.sh: line 76: ` }'
回復 2# liu850918


   
《解決方案》

回復 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
}        
《解決方案》

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
}  
《解決方案》

/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


   
《解決方案》

我這邊幫你看了下,感覺么啥問題! 我手上么環境,有環境還好幫你定位點~
《解決方案》

你先在最後加上這句:
##################################main#########################################

main | tee -a $LOG
cat /etc/fstab | uniq > /etc/fstab --->這行對fstab文件進行重新排序!
rm -rf /tmp/1
rm -rf /tmp/2
《解決方案》

建議用expect...
《解決方案》

繼續求助,腳本運行之後提示報錯了
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樓的腳本有問題嗎

[火星人 ] fdisk無人值守shell求助已經有598次圍觀

http://coctec.com/docs/service/show-post-691.html