免费注册 查看新帖 |

Chinaunix

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

[嵌入式] 怎么写格式化硬盘的shell脚本 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-10-31 21:40 |只看该作者 |倒序浏览
我要把一个最小系统做到一张安装光盘上,在安装之前要求格式化硬盘并分区,该用什么工具,fdisk吗,问题是
fdisk是交互式的,有什么办法把它写成非交互式的吗。或者还有其他比fdisk更好的工具,听说
parted可以,但对它不熟悉。

[ 本帖最后由 coocal 于 2006-11-1 09:21 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2006-10-31 22:40 |只看该作者
如果只是格式化,不用分区,那么用mkfs就可以

parted 并不复杂

论坛徽章:
0
3 [报告]
发表于 2006-11-01 00:24 |只看该作者
可以用shell脚本实现



  1. fdisk /dev/sda <<End
  2. o
  3. n
  4. p
  5. 1


  6. t
  7. c
  8. w
  9. End

复制代码

论坛徽章:
0
4 [报告]
发表于 2006-11-01 09:19 |只看该作者
谢谢楼上两位回答,我试一下三楼的脚本
to sakulagi :要求分区

[ 本帖最后由 coocal 于 2006-11-1 09:27 编辑 ]

论坛徽章:
0
5 [报告]
发表于 2006-11-01 13:29 |只看该作者

我用的脚本, autodisk /dev/hdc /Data 自动分区格式化 mount 到 /Data

#!/bin/sh
echo "is this right?  $0 $1 $2"
FDISK=/sbin/fdisk
GREP=/bin/grep
PARTED=/sbin/parted
TUNE2FS=/sbin/tune2fs
MKREISERFS=/sbin/mkreiserfs
CUT=/bin/cut
SEQ=/bin/seq
MOUNT_POINT=$2
PARTITIONNAME=$11
FILE_FLAG=$MOUNT_POINT/.formated.ok
FLAG_STRING="init ok"
HDA="/dev/hda"


if [ "$HDA" = "$1" ]; then
    echo dont use $1 please;
    exit 0;
fi

if mount|grep $MOUNT_POINT; then
    echo $MOUNT_POINT has been mounted, please umount it first!
    exit 0;
fi

if $FDISK -l $1| $GREP $1>/dev/null; then
    echo disk $1 found !
else
    echo no disk $1 !
    exit 0;
fi

function mount_and_init {
    if mount $PARTITIONNAME $MOUNT_POINT; then
        echo "$FLAG_STRING">$FILE_FLAG
        echo partition $PARTITIONNAME mount to $MOUNT_POINT is ready now!
    else
        echo mount failed!
    fi
}

function mkpart_ext2 {
    echo $PARTED $1 mkpartfs primary ext2 $2 $3
    $PARTED $1 mkpartfs primary ext2 $2 $3
    mount_and_init $1
}
function mkpart_ext3 {
    echo $PARTED $1 mkpartfs primary ext2 $2 $3
    $PARTED $1 mkpartfs primary ext2 $2 $3
    $TUNE2FS -j -c 0 -i 0 $PARTITIONNAME
    mount_and_init $1
}

function mkpart_reiserfs {
    echo $PARTED $1 mkpart primary $2 $3
    $PARTED $1 mkpart primary $2 $3>/dev/null
    echo y|$MKREISERFS $PARTITIONNAME>/dev/null
    mount_and_init $1
}

function mkpart {
    mkpart_reiserfs $1 $2 $3
}

function remkpart {
    echo repartition it now...
    for i in `$SEQ 20 1`; do
        $PARTED $1 rm $i>/dev/null
    done
    mkpart $1 $2 $3
}

echo "check partion $11, if not exist, create a temp partion"
if $FDISK -l $1| $GREP $11; then
    echo "find partion $11">/dev/null
else
    echo "make a temp partion so parted can get disk size"
    $PARTED $1 mkpart primary 0 100 >/dev/null
fi

STARTSIZE=0
# for old parted, output is like : Disk geometry for /dev/hdc: 0.000-38901.125 megabytes
# for new parted, output is like : Disk /dev/hdc: 40.1GB
#STOPSIZE=`$PARTED $1 print | $GREP  megabytes | $CUT -d: -f 2| $CUT -d- -f2|$CUT -d' ' -f1`
STOPSIZE=`$PARTED $1 unit MB print | $GREP $1 | $CUT -d: -f 2| $CUT -dM -f1`

echo $1 size is $STOPSIZE MB
echo mount $PARTITIONNAME to /Data , and check if has file $FILE_FLAG
echo if so, everything is ok
echo or remove all partitions on it, and create one ext2 partition,
echo and mount it to /Data, and write "$FLAG_STRING" to $FILE_FLAG
echo now check $PARTITIONNAME

if $FDISK -l $1| $GREP $11; then
    echo $11 exist, mount it to $MOUNT_POINT and check it
    if mount $PARTITIONNAME $MOUNT_POINT; then
        if $GREP "$FLAG_STRING" $FILE_FLAG; then
            echo partition is ok!
        else
            echo no $FILE_FLAG or no "$FLAG_STRING" in $FILE_FLAG, maybe not seye disk
            umount $MOUNT_POINT
            remkpart $1 $STARTSIZE $STOPSIZE
         fi
    else
        echo mount $11 to $MOUNT_POINT failed, maybe bad partition.
        remkpart $1 $STARTSIZE $STOPSIZE
    fi
else
    echo no partition $11 , now create partition $11;
    mkpart $1 $STARTSIZE $STOPSIZE
fi

论坛徽章:
0
6 [报告]
发表于 2006-11-02 01:00 |只看该作者
谢谢楼上哥哥
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP