Solaris boot disk copy using dd
The following Korn shell script will make a bootable copy of the boot disk on a Solaris system. The script uses dd and requires that the source disk and destination disk have the same geometry.
#!/bin/ksh
#### Set some variables ####
HOST=`hostname`
ROOT_USR=server_dudes
MAIL_SUB="Root disk copy on $HOST"
#### Set some flags ####
MAIL_MSG=0
RETURN=0
LOOP=""
DD_DEVICE="0" # for DD_DEVICE, 0 = do not issue the dd command to
# duplicate the partition configuration of SRC_DRV to
# DEST_DRV; 1 = issue dd command - assumes the SRC_DRV
# and DEST_DRV are identical disks
EDIT_VFSTAB=0 # for EDIT_VFSTAB, 0 = edit the vfstab file on
# DEST_DRV so system will boot off of that drive in
# that scsi location; 1 = don't edit the vfstab file
# (disks locations are swapped on those systems to
# boot off alternate)
#--------------------------------
# Define the source and destination devices for each system; set flags
#--------------------------------
if [ $HOST = "bobby" ]
then
SRC_DRV="c1t1d0s"
DEST_DRV="c1t2d0s"
DD_DEVICE="1"
fi
#--------------------------------
# Define a couple of procedures
#--------------------------------
#### Send completion messages ####
mail_msg() {
case $MAIL_MSG in
0) MESSAGE="Root copy successfully completed on `hostname`" ;;
1) MESSAGE="Error copying $mp partition" ;;
2) MESSAGE="Unable to remove root copy mount point. Still mounted." ;;
3) MESSAGE="Destination Drive in use. Copy aborted. See /var/tmp/DEST_DRV" ;;
esac
/usr/ucb/mail -s "$MAIL_SUB" $ROOT_USR << END
$MESSAGE
END
}
#### Exit code on completion ####
get_out() {
exit $RETURN
}
#--------------------------------
# Check that none of the DEST_DRV partitions are mounted. Unmount if true.
# Check it twice in case two different temp mount points were used.
# If DEST_DRV still in use, record, abort and notify.
#--------------------------------
for count in 1 2
do
for i in `df -kl | grep $DEST_DRV | awk '{print $6}' | sort -r`
do
umount $i
done
done
df -kl | grep $DEST_DRV > /var/tmp/DEST_DRV
if [ $? -eq 0 ]
then
MAIL_MSG=3 ; RETURN=3
mail_msg
get_out
fi
#--------------------------------
# Duplicate the partition information if disk geometries match:
#--------------------------------
if [ $DD_DEVICE -eq 1 ]
then
echo "Running dd to create partition layout ..."
# dd if=/dev/rdsk/${SRC_DRV}2 of=/dev/rdsk/${DEST_DRV}2 bs=1024k
prtvtoc /dev/rdsk/${SRC_DRV}2 | fmthard -s - /dev/rdsk/${DEST_DRV}2
fi
#--------------------------------
# create the temporary alt root mount point if it doesn't exist
#--------------------------------
if [ ! -d /newroot ]
then
echo "Creating mount point for root disk copy ..."
mkdir /newroot
fi
#--------------------------------
# get the filesystems on the root drive & duplicate on the alt drive
#--------------------------------
for i in `df -kl | grep $SRC_DRV | grep ^/dev | awk '{print (substr($1,length($1),1))"."(substr($6,2))}' | sort`
do
part=`echo $i | awk -F. '{print $1}'` # disk slice to copy
mp=`echo $i | awk -F. '{print $2}'` # mount point
echo "making filesystem for /newroot/$mp ..."
echo y | newfs /dev/rdsk/$DEST_DRV$part
if [ "$mp" != "" -a ! -d /newroot/$mp ]
then
mkdir /newroot/$mp
fi
mount /dev/dsk/$DEST_DRV$part /newroot/$mp
echo "copying files for /newroot/$mp ..."
cd /$mp ; find . -mount ! -type s | cpio -pmud /newroot/$mp
# for some reason, the /dev/fd directory is not being transferred
# so do it manually
if [ "$mp" = "" -o "$mp" = "/" ]
then
mkdir /newroot/dev/fd
chmod 555 /newroot/dev/fd
touch /newroot/reconfigure # we have to populate the new /dev/fd
fi
if [ $? != 0 ]
then
MAIL_MSG=1 ; RETURN=1
mail_msg
get_out
fi
done
#--------------------------------
# install a boot block so this drive can boot
#--------------------------------
installboot /usr/platform/`uname -i`/lib/fs/ufs/bootblk /dev/rdsk/${DEST_DRV}0
mkdir /newroot/tmp ; chmod 777 /newroot/tmp
mkdir /newroot/proc
#--------------------------------
# if geometries are different we have to use the new disk in it's
# current location to boot from, so edit the vfstab file
#--------------------------------
if [ $EDIT_VFSTAB -eq 0 ]
then
sed s/$SRC_DRV/$DEST_DRV/g /etc/vfstab > /newroot/etc/vfstab
fi
#--------------------------------
# make the directory structure on the alternate root
#--------------------------------
for LOOP in `df -k | grep $SRC_DRV | awk '{print $6}' | sort -r`
do
if [ "x$LOOP" != "x" ]
then
mkdir -p /newroot$LOOP
if [ $? != 0 ]
then
mkdir /newroot$LOOP
fi
fi
done
#--------------------------------
# create mount points for any additional filesystems
#--------------------------------
for other_mount in `df -kl | grep -v $DEST_DRV | grep -v $SRC_DRV | grep ^/dev | awk '{print $6}'`
do
if [ "$other_mount" ]
then
mkdir -p /newroot$other_mount
fi
done
#--------------------------------
# unmount all the alt root filesystems & delete the temporary mount point
#--------------------------------
for i in `df -kl | grep -v vx | grep newroot | awk '{print $6}' | sort -r`
do
umount $i
done
df -kl | grep newroot > /dev/null 2>&1
if [ $? -ne 0 ]
then
rmdir /newroot
else
MAIL_MSG=2 ; RETURN=2
mail_msg
get_out
fi
mail_msg
get_out


I want to install my network adapter, while running a backtrack 2 boot disk. I tried saving it to a USB stick, but couldn’t figure out how to access the drive, I’m very new to Backtrack.
So i just thought a little definition might help.
This “shell” term might refer to alot of different meanings on a computer.
Here’s just an example .
What actually does this mean when its refering to the “Shell”
QUOTE
A F0 entry corresponds to the Shell= statement, under the [Boot] section, of the System.ini file. The Shell= statement in the system.ini file is used to designate what program would act as the shell for the operating system. UNQUOTE
I know this might be a little hard to explain in a few paragraphs, but is it possible to define this a little
to explain what it means by the word or the term “shell”
i googled it but i didnt find any….. it would be very helpful if there is because im too lazy to insert shapes in word
Write the script so that it will do the following, no matter in which directory it is run. (To test your script while you’re developing it, you’ll need to create some files to test it with in the “unixtest” directory. However, when we check your work, we’ll test it with different files in a different directory.) Suppose that your script is being run in a directory D:
* Cat every file (in D) whose name starts with “test” into a file (in D) called “bigtest” (you’ll have to redirect output). (Hint: You might want to review the “Wildcards” section in the “Unix Shell Commands” lesson.)
* Copy every line of a file (in D) called “dogfile.txt” that has the word “dog” (lower-case letters only) in it into a file (in D) called “doglines.txt”.
* Write every line containing the word “delete” produced by “man mail” into a file called “delete”
My test directory is: /home/unixtest
input directory is same
What I have so far:
#!/bin/csh -f
set DIR=”/home/unixtest”
cp $DIR/test* > $DIR/bigtest.txt
grep dog $DIR/dogfile.txt > $DIR/doglines.txt
man mail | grep delete > $DIR/delete
The delete one is working but the other two files it produces ‘bigtest’ and ‘doglines’ do not have results in them.
perhaps I have the wrong syntax somewhere?
I am using the C-cash syntax
with:
#!/bin/csh -f
at the beginning
For example, $? returns the success/failure state of the last executed unix commands.
What other symbols can be used (apart from the question mark) along with the dollar sign (except when it is used for retrieving environment variables). Is the behaviour same between different flavours of unix, like LINUX, Solaris etc.
I need to learn the basics such as;
chmod
ls
rmdir
Redirection (‘>’, ‘<‘, ), pipes (‘|’) and filters (grep, egrep, cat, wc)
Does anyone know where I can find out what these all mean? A website etc. Thanx.