#!/bin/bash
# Usage:create_vmdk
# Copyright@PSS Tento Italy
if [ $# -ne 1 ]
then
echo "USAGE $0 <image file>"
exit 1
fi
FILENAME=$1
LOOPDEVICE=""
TOTOLESECTORS=""
TRACKSECTORS=""
CYLINDERS=""
HEADS=""
for i in `seq 9 -1 0`
do
/sbin/losetup /dev/loop$i > /dev/null 2>&1
if [ $? -eq 1 ]
then
LOOPDEVICE=/dev/loop$i
fi
done
if [ "$LOOPDEVICE" = "" ]
then
echo "FATAL: no loop devices available!"
exit 1
fi
echo "Using $LOOPDEVICE for image geometry scanning..."
/sbin/losetup $LOOPDEVICE $FILENAME
if [ $? -ne 0 ]
then
echo "FATAL:cannot set \"$FILENAME\" on \"$LOOPDEVICE\""
exit 1
fi
echo "scanning geometry..."
FDISKOUTPUT=`/sbin/fdisk -lu $LOOPDEVICE 2>/dev/null | grep cylinder`
echo "Releasing $LOOPDEVICE..."
/sbin/losetup -d $LOOPDEVICE
echo "Parsing" geometry..."
TOTALSECTORS=`echo "$FDISKOUTPUT" |awk '{print $8}'`
TRACKSECTORS=`echo "$FDISKOUTPUT" |awk '{print $3}'`
CYLINDERS=`echo "$FDISKOUTPUT" |awk '{print $5}'`
HEADS=`echo "$FDISKOUTPUT" |awk '{print $1}'`
if [ "$TOTALSECTORS" = "" -o $TOTALSECTORS -eq 0 ]
then
echo "FATAL: invalid sectors value"
exit 1
fi
if [ "$TRACKSECTORS" = "" -O $TRACKSECTORS -eq 0 ]
then
echo "FATAL: invalid track/sectors value"
exit 1
fi
if [ "$CYLINDERS" = "" -o $CYLINDERS -eq 0 ]
then
echo "FATAL: invalid cylinders value"
exit 1
fi
if [ "$HEADS" = "" -o $HEADS -eq 0 ]
then
echo "FATAL: invalid heads value"
exit 1
fi
# building the vmdk file
echo "Writing $FILENAME.vmdk..."
cat << VWMDK_EOF > $FILENAME.vmdk
version=1
CID=76805586
parentCID=ffffffff
createType="monolichicFlat"
RW $TOTALSECTORS FLAT "$FILENAME" 0
##DDB
ddb.adapterType = "ide"
ddb.geometry.sectors = "$TRACKSECTORS"
ddb.geometry.heads = "$HEADS"
ddb.geometry.cylinders = "$CYLINDERS"
ddb.virtualHWVersion = "4"
ddb.toolsVersion = "0"
VWMDK_EOF
echo "Done!"
# Usage:create_vmdk
# Copyright@PSS Tento Italy
if [ $# -ne 1 ]
then
echo "USAGE $0 <image file>"
exit 1
fi
FILENAME=$1
LOOPDEVICE=""
TOTOLESECTORS=""
TRACKSECTORS=""
CYLINDERS=""
HEADS=""
for i in `seq 9 -1 0`
do
/sbin/losetup /dev/loop$i > /dev/null 2>&1
if [ $? -eq 1 ]
then
LOOPDEVICE=/dev/loop$i
fi
done
if [ "$LOOPDEVICE" = "" ]
then
echo "FATAL: no loop devices available!"
exit 1
fi
echo "Using $LOOPDEVICE for image geometry scanning..."
/sbin/losetup $LOOPDEVICE $FILENAME
if [ $? -ne 0 ]
then
echo "FATAL:cannot set \"$FILENAME\" on \"$LOOPDEVICE\""
exit 1
fi
echo "scanning geometry..."
FDISKOUTPUT=`/sbin/fdisk -lu $LOOPDEVICE 2>/dev/null | grep cylinder`
echo "Releasing $LOOPDEVICE..."
/sbin/losetup -d $LOOPDEVICE
echo "Parsing" geometry..."
TOTALSECTORS=`echo "$FDISKOUTPUT" |awk '{print $8}'`
TRACKSECTORS=`echo "$FDISKOUTPUT" |awk '{print $3}'`
CYLINDERS=`echo "$FDISKOUTPUT" |awk '{print $5}'`
HEADS=`echo "$FDISKOUTPUT" |awk '{print $1}'`
if [ "$TOTALSECTORS" = "" -o $TOTALSECTORS -eq 0 ]
then
echo "FATAL: invalid sectors value"
exit 1
fi
if [ "$TRACKSECTORS" = "" -O $TRACKSECTORS -eq 0 ]
then
echo "FATAL: invalid track/sectors value"
exit 1
fi
if [ "$CYLINDERS" = "" -o $CYLINDERS -eq 0 ]
then
echo "FATAL: invalid cylinders value"
exit 1
fi
if [ "$HEADS" = "" -o $HEADS -eq 0 ]
then
echo "FATAL: invalid heads value"
exit 1
fi
# building the vmdk file
echo "Writing $FILENAME.vmdk..."
cat << VWMDK_EOF > $FILENAME.vmdk
version=1
CID=76805586
parentCID=ffffffff
createType="monolichicFlat"
RW $TOTALSECTORS FLAT "$FILENAME" 0
##DDB
ddb.adapterType = "ide"
ddb.geometry.sectors = "$TRACKSECTORS"
ddb.geometry.heads = "$HEADS"
ddb.geometry.cylinders = "$CYLINDERS"
ddb.virtualHWVersion = "4"
ddb.toolsVersion = "0"
VWMDK_EOF
echo "Done!"