#!/bin/sh

set -x
exec 2>&1 

device=$(sed -n 's|.*[0-9]\s\+\([^ ]\+[^0-9]\)$|\1|p;s#.*[0-9]\s\+\(\(rd\|ida\|cciss\|i2o\)/.*[^0-9p][0-9]\+\)$#\1#p' /proc/partitions | head -1)

if [ -n "$device" ]
then
    sfdisk -d /dev/$device > /tmp/oldparts
    sed 's/Id=8[32]/Id=fd/' /tmp/oldparts > /tmp/newparts

    mkdir /mnt/tmp
    for part in $(awk '/^\/dev\/.*Id=8[23]/{ print $1 }' /tmp/oldparts)
    do
	md=/dev/md$(echo $part | sed 's|^.*[^0-9]||')

	if grep -q "^$part .*Id=83" /tmp/oldparts
	then
	    e2fsck -f -C0 $part
	    partsize=$(resize2fs -f $part 2>&1| sed -n 's|.* \([0-9]\+\) blocks long.*|\1|p')
	    resize2fs -fp $part $(($partsize-72))
	fi

	mdadm -C $md -l 1 -n 2 -R $part missing

	if grep -q "^$part .*Id=83" /tmp/oldparts
	then
	    e2fsck -f -C0 $md
	    resize2fs -fp $md

	    mount $md /mnt/tmp
	    [ -r /mnt/tmp/etc/fstab ] && sed -i "s|/dev/$device\([0-9]\+\)|/dev/md\1|" /mnt/tmp/etc/fstab
	    umount /mnt/tmp


	elif grep -q "^$part .*Id=82" /tmp/oldparts
	then
	    mkswap $md
	fi
    done
    rmdir /mnt/tmp

    mdadm --stop --scan
    sfdisk --force /dev/$device < /tmp/newparts
fi
