rendered paste body#!/bin/bashCAT=`type -p cat`GREP=`type -p grep`AWK=`type -p awk`SFDISK=`type -p sfdisk`PARTED=`type -p parted`MOUNT=`type -p mount`MKDIR=`type -p mkdir`SWAPON=`type -p swapon`MKFSEXT3=`type -p mkfs.ext3`MKFSXFS=`type -p mkfs.xfs`MKSWAP=`type -p mkswap`LS=`type -p ls`get_swap_size() { ramkb=`$CAT /proc/meminfo | $GREP MemTotal | $AWK {'print $2'}` let swap_size=2*$ramkb/1024+16}remove_removable() {revindex=0element_count=${#disks[@]}while [ "$revindex" -lt "$element_count" ] do s=${disks[$revindex]#/dev/} s=${s//:/} removable=`$CAT /sys/block/$s/removable` [ $removable -gt 0 ] && unset disks[$revindex] revindex+=1 done}get_devices() { get_swap_size disks=(`$SFDISK -s | $GREP dev | $AWK {'print $1'}`) remove_removable numdisks=0 sizes=() for disk in ${disks[@]};do numdisks=$((numdisks+1)) let sizes[$numdisks-1]=`$SFDISK -s | $GREP $disk | $AWK {'print $2'}`/1024 done[ ${#disks[@]} -eq 0 ] && echo 'No disc found :,( I am giving up'; exit 255[ ${#disks[@]} -gt 2 ] && echo 'More than 2 disks found, I can/will use only the first two :-('; exit 127let smallestdisk=2048+2048+100+$swap_size[ ${sizes[0]} -lt $smallestdisk ] && echo 'First disk size is smaller than $smallestdisk :-/ manual install required'; exit 13}wipe_device() { hd_part=${$1#/dev/} partitions=(`$LS /dev/ | $GREP $hd_part.`) if [[ ${#partitions[@]} -gt 0 ]] then index=1 elements=${#partitions[@]} while [ "$index" -lt "$elements"+1 ] do $PARTED -s $1 rm $index index+=1 done fi}partition_single() { exit dev=${disks[0]//:/} echo "Destroying partitions on device $dev ..." wipe_device $dev echo "Creating a new partition table on $dev ..." $SFDISK $dev -uM -L <<-EOT 0,100,L,* ,$swap_size,S ,2048,L ,,L EOT echo "Formating partitions on $dev ..." $MKFSEXT3 ${dev}1 $MKSWAP -v1 ${dev}2 $MKFSXFS -f ${dev}3 $MKFSXFS -f ${dev}4 echo "Mounting partitions on $dev ..." $MOUNT ${dev}3 /mnt/target $MKDIR -p /mnt/target/{boot,data} [ $double ] && $MKDIR -p /mnt/target/backup $MOUNT ${dev}1 /mnt/target/boot $MOUNT ${dev}4 /mnt/target/data $SWAPON ${dev}2 }partition_double() { double=1 partition_single dev2=${disks[1]//:/} echo "Creating a new partition table on $dev2 ..." $SFDISK $dev2 echo "Formating partitions on $dev2 ..." $MKFSXFS -f ${dev2}1 echo "Mounting partitions on $dev2 ..." $MOUNT ${dev2}1 /mnt/target/backup}main() { get_devices [ ${#disks[@]} -eq 1 ] && partition_single [ ${#disks[@]} -ge 2 ] && partition_double}main