您的位置:首页 > 运维架构 > Shell

Shell脚本编程之--硬盘分区管理

2014-06-10 14:22 148 查看
本文目的为介绍Linux下硬盘分区的编程技巧,重点分析控制流结构的使用和命令在shell脚本编程里的组合使用:
1、要做硬盘分区,首先需呀先了解系统究竟有多少块硬盘可用,具体方法如下:
用 fdisk -l 查看系统硬盘的个数和分区情况,然后找出硬盘设备列举出来

上面列出了硬盘设备和每个硬盘的分区情况,然后要做的就是从中找出Linux的硬盘设备,有下列方法
fdisk -l 2> /dev/null | grep -o "Disk /dev/[sh]d[a-z]" 或者 fdisk -l 2> /dev/null | grep "Disk /dev/[sh]d[a-z]" | awk '{print $1}'即可列出如下磁盘设备



做到这里大多数人都能够完成一半了

2、要知道如何分区,这也是用shell控制硬盘分区的重要工作,下面大家来看下这段代码:
#!/bin/bash
#
echo 'n
p
1

+120M

n
p
2

+512M

n
p
3

+128M

t
3
82
w' | fdisk /dev/sdb
这段代码的功能很简单,就是用规定好的数据通过管道传递给fdisk命令让其逐行读取执行,实现用规定数据对硬盘分区,到了这里相信很多人都能知道怎么在shell脚本里控制分区了。
3、但是到这里还不行,进行分区之前还的对磁盘进行格式化,删除磁盘上面的所有分区,命令很简单,用dd 就可以完成,命令如下
dd if=/dev/zero of=/dev/sdb bs=512 count=1
命令实现方法为把分区列表清除完成删除分区的功能
4、到这里就可以组织语言进行编写了下面给出我写的范例
#!/bin/bash
#
echo  "Initial a disk..."
echo -e "\033[31mWarning: Then operation may damage the disk data.\033[0m"
read -p "Are you sure?(y/n)" SURE
if [ $SURE == 'n' ];then
echo "quit"
exit 7
fi
fdisk -l 2> /dev/null | grep -o "Disk /dev/[sh]d[a-z]"
read -p "Your choice:" PARTDISK
if [ $PARTDISK == 'quit' ];then
echo "quit"
exit 6
fi

until fdisk -l 2> /dev/null | grep -o "Disk /dev/[sh]d[a-z]" | grep "Disk $PARTDISK" &> /dev/null;do
read -p "Wrong option,You choice again:" PARTDISK
done

read -p "Will destroy all data,continue?(y/n)" CHOICE

until [ $CHOICE == 'y' -o $CHOICE == 'n' ];do
read -p "Wrong choice,again your choice.(y/n)" CHOICE
done

if [ $CHOICE == 'n' ];then
echo "quit"
exit 9
else
echo "Start partition your disk...."
for I in `mount | grep "${PARTDISK}[1-9]"`;do
fuser -km $I
umount $I
echo "$I umount finish.."
done
dd if=/dev/zero of=$PARTDISK bs=512 count=1 &> /dev/null
sync
sleep 3
echo 'n
p
1

+120M

n
p
2

+512M

n
p
3

+128M

t
3
82
w' | fdisk $PARTDISK &> /dev/null
partprobe $PARTDISK
sync
sleep 3
mke2fs -j ${PARTDISK}1 &> /dev/null
echo "partition ${PARTDISK}1 ok"
mke2fs -j ${PARTDISK}2 &> /dev/null
echo "partition ${PARTDISK}2 ok"
mkswap ${PARTDISK}3 &> /dev/null
echo "partition ${PARTDISK}3 ok"
fi
上面代码给出了磁盘分区的具体数值,可以灵活运用。还要注意一点,在对磁盘进行分区格式化之前,一定要确定没有用户正在访问该磁盘(即做dd之前要先卸载挂载的磁盘),上面脚本已给出了,有兴趣的可以具体分析下怎么实现的。
最后,仅以此文献给Linux的爱好者,希望能给你们学习shell编程带来帮助。

本文出自 “SilenceWolf” 博客,请务必保留此出处http://silencewolf.blog.51cto.com/5009737/1424536
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: