diff options
author | Lucas Affonso Xavier de Morais | 2014-07-10 17:47:47 +0200 |
---|---|---|
committer | Michael Pereira Neves | 2014-10-28 14:14:49 +0100 |
commit | 08479c79bb325fc99bac25126901dc0bcba43242 (patch) | |
tree | b82774f4dbe1fa4d9e8d0a0c70e94de760cd1666 | |
parent | [partitioner] using extended partitions (diff) | |
download | tm-scripts-08479c79bb325fc99bac25126901dc0bcba43242.tar.gz tm-scripts-08479c79bb325fc99bac25126901dc0bcba43242.tar.xz tm-scripts-08479c79bb325fc99bac25126901dc0bcba43242.zip |
[partitioner] adapting script to the new config file. not working yet.
-rw-r--r-- | remote/modules/partitioner/config | 26 | ||||
-rwxr-xr-x | remote/modules/partitioner/partitioner.sh | 214 |
2 files changed, 105 insertions, 135 deletions
diff --git a/remote/modules/partitioner/config b/remote/modules/partitioner/config index bb69d43e..2d547e1e 100644 --- a/remote/modules/partitioner/config +++ b/remote/modules/partitioner/config @@ -1,16 +1,10 @@ -#PARTITIONER - -PARTITIONTYPE=GPT -CHOSENDISK=sda - -SCRATCHID=44 -SCRATCHSIZE=1 - -HOMEID=45 -HOMESIZE=2 - -DNBD3ID=46 -DNBD3SIZE=3 - -BOOTID=47 -BOOTSIZE=4
\ No newline at end of file +#Partitions +SLX_PARTITION_TYPE={GPT|msdos} #Create GPT or msdos style partition table +SLX_CHOOSEN_DISK={sda} #Choose disk to partition +SLX_AUTOMATIC_PARTITIONING={yes|no} #Don't be interactive, use carefully +SLX_OVERRIDE_PARTITIONS={yes|no} #Override existing partitions +SLX_PARTITION_TABLE=' #Partition table in the format: ID,Size,Mountpoint,Bootable +44,10G,/tmp +43,10G,/boot,bootable +42,10G,/cache +41,10G,/home'
\ No newline at end of file diff --git a/remote/modules/partitioner/partitioner.sh b/remote/modules/partitioner/partitioner.sh index 122eabd6..6f0a76e1 100755 --- a/remote/modules/partitioner/partitioner.sh +++ b/remote/modules/partitioner/partitioner.sh @@ -2,68 +2,31 @@ PARTITIONSPATH="/proc/partitions" CONFIGPATH="./config" -DEFPARTSIZE=2 #in GB -DEFSCRATCHID=44 -DEFHOMEID=45 -DEFDNBD3ID=46 -DEFBOOTID=47 # BLOCKSIZE=$(sfdisk -l /dev/$CHOSENDISK | grep -o -e "blocks of [0-9]* bytes" | cut -d ' ' -f3) BLOCKSIZE=1024 . $CONFIGPATH # testing if the sizes and ID's of the disk is defined in the config file -test $SCRATCHID -if [ $? -eq 1 ]; then - SCRATCHID=$DEFSCRATCHID -fi -test $SCRATCHSIZE -if [ $? -eq 1 ]; then - SCRATCHSIZEGB=$DEFPARTSIZE - SCRATCHSIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - SCRATCHSIZEGB=$SCRATCHSIZE - SCRATCHSIZE=$(($SCRATCHSIZE*1024*1024*1024)) -fi - -test $HOMEID -if [ $? -eq 1 ]; then - HOMEID=$DEFHOMEID -fi -test $HOMESIZE -if [ $? -eq 1 ]; then - HOMESIZEGB=$DEFPARTSIZE - HOMESIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - HOMESIZEGB=$HOMESIZE - HOMESIZE=$(($HOMESIZE*1024*1024*1024)) -fi -test $DNBD3ID -if [ $? -eq 1 ]; then - DNBD3ID=$DEFDNBD3ID -fi -test $DNBD3SIZE -if [ $? -eq 1 ]; then - DNBD3SIZEGB=$DEFPARTSIZE - DNBD3SIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - DNBD3SIZEGB=$DNBD3SIZE - DNBD3SIZE=$(($DNBD3SIZE*1024*1024*1024)) +declare -A PARTTBL +COUNTER=1 +if [ -n "$SLX_PARTITION_TABLE" ]; then + for PARTITION in $SLX_PARTITION_TABLE; do + IFS=, + set $PARTITION + if [ $COUNTER -eq 4 ]; then + COUNTER=$((COUNTER+1)) + fi + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/id"]=$1 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/size"]=$(echo $2 | egrep -o "[0-9]*") + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/mountpoint"]=$3 + PARTTBL["$SLX_CHOOSEN_DISK$COUNTER/bootable"]=$4 + COUNTER=$(($COUNTER+1)) + done fi -test $BOOTID -if [ $? -eq 1 ]; then - BOOTID=$DEFBOOTID -fi -test $BOOTSIZE -if [ $? -eq 1 ]; then - BOOTSIZEGB=$DEFPARTSIZE - BOOTSIZE=$(($DEFPARTSIZE*1024*1024*1024)) -else - BOOTSIZEGB=$BOOTSIZE - BOOTSIZE=$(($BOOTSIZE*1024*1024*1024)) -fi +NPARTS=$(($COUNTER-1)) # picking disk that will be used DISKS=$(cat $PARTITIONSPATH | tr -s ' ' | cut -d ' ' -f5 | grep -e "[a-z]$") @@ -72,8 +35,8 @@ if [ $? -eq 1 ]; then dialog --msgbox "ERROR: Can't find an hard disk." 5 40 return 1 fi -test $CHOSENDISK -if [ $? -eq 1 ]; then + +if [ -z "$SLX_CHOOSEN_DISK" ]; then DIALOGSTR="This computer has the following partitions:\n" for disk in $DISKS; do DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $disk$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) @@ -97,138 +60,151 @@ if [ $? -eq 1 ]; then if [ $(echo $DISKS | tr ' ' \\n | wc -l) -gt 1 ]; then DIALOGSTR=$DIALOGSTR"Which of these disks you want to use?\n" - CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then return 1; fi - echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null + echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null while [ $? -ne 0 ]; do dialog --msgbox "Invalid option.\nTry again." 0 0 - CHOSENDISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) + SLX_CHOOSEN_DISK=$(dialog --no-collapse --cr-wrap --inputbox "$DIALOGSTR" 0 0 $(echo $DISKS | cut -d ' ' -f1) 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then return 1; fi - echo $DISKS | tr ' ' \\n | grep -e ^$CHOSENDISK$ > /dev/null 2>/dev/null + echo $DISKS | tr ' ' \\n | grep -e ^$SLX_CHOOSEN_DISK$ > /dev/null 2>/dev/null done # ask a confirmation (all your data will be lost etc) elif [ $(echo $DISKS | tr ' ' \\n | wc -l) -eq 1 ]; then - CHOSENDISK=$(echo $DISKS | tr ' ' \\n | head -n1) + SLX_CHOOSEN_DISK=$(echo $DISKS | tr ' ' \\n | head -n1) else dialog --msgbox "ERROR: Can't find an hard disk." 5 40 return 1 fi fi -DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $CHOSENDISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) -echo "$DISKSIZE -lt $(($SCRATCHSIZE+$HOMESIZE+$DNBD3SIZE+$BOOTSIZE+4*1024*1024))" -if [ $DISKSIZE -lt $(($SCRATCHSIZE+$HOMESIZE+$DNBD3SIZE+$BOOTSIZE+4*1024*1024)) ]; then - dialog --msgbox "ERROR: Insufficient space in disk /dev/$CHOSENDISK." 6 40 +DISKSIZE=$(($(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) +PARTSSIZE=0 +for (( i = 1; i <= $NPARTS; i++ )); do + PARTSSIZE=$PARTSSIZE+$PARTTBL["$SLX_CHOOSEN_DISK$i/size"] +done + +echo "$DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$NPARTS*1024*1024))" +if [ $DISKSIZE -lt $(($PARTSSIZE*1024*1024*1024+$NPARTS*1024*1024)) ]; then + dialog --msgbox "ERROR: Insufficient space in disk /dev/$SLX_CHOOSEN_DISK." 6 40 return 1 fi # choosing the partition type (MSDOS or GPT) if it wasn't set in config file -test $PARTITIONTYPE -if [ $? -eq 1 ]; then +if [ -z "$SLX_PARTITION_TYPE" ]; then + SLX_PARTITION_TYPE=msdos ANS=$(dialog --no-tags --menu "Choose the partitions type" 0 0 0 "1" " MSDOS " "2" " GPT " 3>&1 1>&2 2>&3) if [ $? -eq 1 ]; then return 1 fi if [ $ANS -eq 1 ]; then - PARTITIONTYPE=MSDOS + SLX_PARTITION_TYPE=msdos else - PARTITIONTYPE=GPT + SLX_PARTITION_TYPE=GPT fi fi # asking confirmation to create the partitions -GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) -DIALOGSTR="$CHOSENDISK $DISKSIZE Bytes ($GBSIZE GB)\n" -PARTS=$(cat $PARTITIONSPATH | grep -e $CHOSENDISK[0-9] | tr -s ' ' | cut -d ' ' -f5) -USED=0 -for PART in $PARTS; do - PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) - USED=$(($USED+$PARTSIZE)) - GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) - DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" -done -DIALOGSTR=$DIALOGSTR" ----------\n" -FREESPACE=$(($DISKSIZE-$USED)) -GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" -GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) -DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" -DIALOGSTR=$DIALOGSTR"All /dev/$CHOSENDISK partitions will be deleted, ok?" - -dialog --defaultno --yesno "$DIALOGSTR" 0 0 -if [ $? -eq 1 ]; then - return 1 +if [ $SLX_AUTOMATIC_PARTITIONING = "no" ]; then + GBSIZE=$(echo "scale=2; $DISKSIZE/1024/1024/1024" | bc -l) + DIALOGSTR="$SLX_CHOOSEN_DISK $DISKSIZE Bytes ($GBSIZE GB)\n" + PARTS=$(cat $PARTITIONSPATH | grep -e $SLX_CHOOSEN_DISK[0-9] | tr -s ' ' | cut -d ' ' -f5) + USED=0 + for PART in $PARTS; do + PARTSIZE=$(($(cat $PARTITIONSPATH | grep -e $PART$ | tr -s ' ' | cut -d ' ' -f4)*$BLOCKSIZE)) + USED=$(($USED+$PARTSIZE)) + GBSIZE=$(echo "scale=2; $PARTSIZE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" $PART $PARTSIZE ($GBSIZE GB)\n" + done + DIALOGSTR=$DIALOGSTR" ----------\n" + FREESPACE=$(($DISKSIZE-$USED)) + GBSIZE=$(echo "scale=2; $USED/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" Used $USED ($GBSIZE GB)\n" + GBSIZE=$(echo "scale=2; $FREESPACE/1024/1024/1024" | bc -l) + DIALOGSTR=$DIALOGSTR" Free $FREESPACE ($GBSIZE GB)\n\n" + DIALOGSTR=$DIALOGSTR"All /dev/$SLX_CHOOSEN_DISK partitions will be deleted, ok?" + + dialog --defaultno --yesno "$DIALOGSTR" 0 0 + if [ $? -eq 1 ]; then + return 1 + fi fi # pick the size of a sector (usually 512 bytes) -# SECTORSIZE=$(sfdisk /dev/$CHOSENDISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) +# SECTORSIZE=$(sfdisk /dev/$SLX_CHOOSEN_DISK -l -u S 2> /dev/null | grep Units | cut -d ' ' -f5) SECTORSIZE=512 # delete partition table -sgdisk -Z /dev/$CHOSENDISK > /dev/null 2> /dev/null +if [ $SLX_OVERRIDE_PARTITIONS = "yes" ]; then + sgdisk -Z /dev/$SLX_CHOOSEN_DISK > /dev/null 2> /dev/null +fi # constructing the sfdisk input file -START1=$((1*1024*1024/$SECTORSIZE)) -SIZE1=$(($SCRATCHSIZE/$SECTORSIZE)) - START2=$(($START1+$SIZE1)) SIZE2=$(($HOMESIZE/$SECTORSIZE)) -START3=$(($START2+$SIZE2)) -SIZE3=$(($DNBD3SIZE/$SECTORSIZE)) - -START4=$(($START3+$SIZE3)) - -START5=$(($START4+$START1)) -SIZE5=$(($BOOTSIZE/$SECTORSIZE)) - echo "unit: sectors -/dev/"$CHOSENDISK"1 : start= "$START1", size= "$SIZE1", Id= "$SCRATCHID" -/dev/"$CHOSENDISK"2 : start= "$START2", size= "$SIZE2", Id= "$HOMEID" -/dev/"$CHOSENDISK"3 : start= "$START3", size= "$SIZE3", Id= "$DNBD3ID" -/dev/"$CHOSENDISK"4 : start= "$START4", size= "$(($DISKSIZE/512-1))", Id= 5 -/dev/"$CHOSENDISK"4 : start= "$START5", size= "$SIZE5", Id= "$BOOTID", bootable - "> /tmp/partitiontable.tmp -sfdisk -q -f /dev/$CHOSENDISK < /tmp/partitiontable.tmp > /dev/null +"> /tmp/partitiontable.tmp + +START=$((1*1024*1024/$SECTORSIZE)) +for (( i = 1; i < $NPARTS; i++ )); do + if [ $i -ne 4 ]; then + SIZE=$((${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]}*1024*1024*1024/$SECTORSIZE)) + ID=${PARTTBL["$SLX_CHOOSEN_DISK$i/size"]} + if [ -n ${PARTTBL["$SLX_CHOOSEN_DISK$i/bootable"]} ]; then + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID", bootable + " >> /tmp/partitiontable.tmp + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$SIZE", Id= "$ID" + " >> /tmp/partitiontable.tmp + fi + START=$(($START+$SIZE+1*1024*1024/$SECTORSIZE)) + else + echo "/dev/"$SLX_CHOOSEN_DISK$i" : start= "$START", size= "$(($DISKSIZE/$SECTORSIZE-1))", Id= "5" + " >> /tmp/partitiontable.tmp + START=$(($START+1*1024*1024/$SECTORSIZE)) + fi +done +sfdisk -q -f /dev/$SLX_CHOOSEN_DISK < /tmp/partitiontable.tmp > /dev/null rm -f /tmp/partitiontable.tmp -if [ $PARTITIONTYPE = GPT ]; then - sgdisk -g /dev/$CHOSENDISK\ +if [ $SLX_PARTITION_TYPE = GPT ]; then + sgdisk -g /dev/$SLX_CHOOSEN_DISK\ -t 1:"$SCRATCHID"000000-0000-0000-0000-000000000000\ -t 2:"$HOMEID"000000-0000-0000-0000-000000000000\ -t 3:"$DNBD3ID"000000-0000-0000-0000-000000000000\ -t 4:"$BOOTID"000000-0000-0000-0000-000000000000 > /dev/null DIALOGSTR="New partitions created:\n\n" - DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" + DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$SLX_CHOOSEN_DISK"1)\n" DIALOGSTR=$DIALOGSTR" GUID: "$SCRATCHID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" + DIALOGSTR=$DIALOGSTR"HOME ("/dev/$SLX_CHOOSEN_DISK"2)\n" DIALOGSTR=$DIALOGSTR" GUID: "$HOMEID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" + DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$SLX_CHOOSEN_DISK"3)\n" DIALOGSTR=$DIALOGSTR" GUID: "$DNBD3ID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" + DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$SLX_CHOOSEN_DISK"4)\n" DIALOGSTR=$DIALOGSTR" GUID: "$BOOTID"000000-0000-0000-0000-000000000000\n" DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" else DIALOGSTR="New partitions created:\n\n" - DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$CHOSENDISK"1)\n" + DIALOGSTR=$DIALOGSTR"SCRATCH ("/dev/$SLX_CHOOSEN_DISK"1)\n" DIALOGSTR=$DIALOGSTR" ID: $SCRATCHID\n" DIALOGSTR=$DIALOGSTR" Size: $SCRATCHSIZE Bytes ($SCRATCHSIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"HOME ("/dev/$CHOSENDISK"2)\n" + DIALOGSTR=$DIALOGSTR"HOME ("/dev/$SLX_CHOOSEN_DISK"2)\n" DIALOGSTR=$DIALOGSTR" ID: $HOMEID\n" DIALOGSTR=$DIALOGSTR" Size: $HOMESIZE Bytes ($HOMESIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$CHOSENDISK"3)\n" + DIALOGSTR=$DIALOGSTR"DNBD3 ("/dev/$SLX_CHOOSEN_DISK"3)\n" DIALOGSTR=$DIALOGSTR" ID: $DNBD3ID\n" DIALOGSTR=$DIALOGSTR" Size: $DNBD3SIZE Bytes ($DNBD3SIZEGB GB)\n" - DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$CHOSENDISK"4)\n" + DIALOGSTR=$DIALOGSTR"BOOT ("/dev/$SLX_CHOOSEN_DISK"4)\n" DIALOGSTR=$DIALOGSTR" ID: $BOOTID\n" DIALOGSTR=$DIALOGSTR" Size: $BOOTSIZE Bytes ($BOOTSIZEGB GB)\n" fi |