Pages

Your Ad Here

This Blog is not to read or go through

because, I have never been such a mess


Search the blog instead

Sunday, December 16, 2007

Partitioning by script

Source: Lissot.net
A reader requested a demonstration of automatic partitioning. The task was to create partitions of fixed size and allow the last partition to consume remaining space. Since the calculations used in this exercise are revelatory of partitioning issues, the first version of the script is included below, in the hopes that it might be of use. This section will be expanded in Version 4 of this HOWTO.

#!/bin/sh

partitionSizes=( 1000000000 256000000 NA ) ; # size in bytes, NA=unspecified
partitionTypes=( 83 82 83 ) ; # see available types: sfdisk -T
partitionFlags=( bootable NA NA )
blockSize=1024
start=1

#---------------------------------------------------------------#
# Do not modify contents below this line
#---------------------------------------------------------------#


function GetGeometry ()
{
numberOfBlocks=`sfdisk -s $1` || exit 1
bytes=$(($numberOfBlocks * 1024))

geometry=(`sfdisk -g $1`) || exit 1
cylinders=${geometry[1]}
heads=${geometry[3]}
sectors=${geometry[5]}


cylinderSize=`echo "scale=4; $numberOfBlocks / $cylinders" | bc` || exit 1
}


function WritePartitionInfo
{
let partitionNumber=$index+1

partitionFlag=${partitionFlags[$index]}
[ $partitionFlag != NA ] || partitionFlag=

partitionType=${partitionTypes[$index]}
[ $partitionType != NA ] || partitionType=

if [ ${partitionSizes[$index]} = "NA" ]
then
cylindersNeeded=
else
cylindersNeeded=`echo "${partitionSizes[$index]} / ( $cylinderSize * $blockSize )" | bc`
fi

echo "${1}$partitionNumber : start= $start, size= $cylindersNeeded, Id= $partitionType, $partitionFlag"
echo "${1}$partitionNumber : start= $start, size= $cylindersNeeded, Id= $partitionType, $partitionFlag" >> $outputFile

[ -z "$start" ] && start=0
[ -z "$cylindersNeeded" ] && cylindersNeeded=0
start=`echo "scale=4; $start + $cylindersNeeded + 1" | bc` || exit 1
}


# ---------------------------------------------------------------------- #
# ------------------------ MAIN ------------------------------ #
# ---------------------------------------------------------------------- #


[ $# -eq 1 ] || { echo "usage: auto_partition.sh device (e.g. /dev/hda)"; exit 1;}
[ -b $1 ] || { echo "$1 not a block device"; exit 1;}
outputFile=${1#/dev/}_proposed


GetGeometry $1

echo "bytes: $bytes"
echo "blocks: $numberOfBlocks"
echo "cylinders: $cylinders"
echo "heads: $heads"
echo "sectors: $sectors"



#echo "unit: cylinders" > $outputFile
> $outputFile

for index in `jot ${#partitionSizes[@]} 0`
do
WritePartitionInfo
done


# This is it! Write the partition table
sfdisk /dev/sda --no-reread < sda_proposed

No comments:

Your Ad Here