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樓的腳本有問題嗎