Unix and Linux network configuration. Multiple network interfaces. Bridged NICs. High-availability network configurations.


Reviews of latest Unix and Linux software. Helpful tips for application support admins. Automating application support.


Disk partitioning, filesystems, directories, and files. Volume management, logical volumes, HA filesystems. Backups and disaster recovery.


Distributed server monitoring. Server performance and capacity planning. Monitoring applications, network status and user activity.

Commands & Shells

Cool Unix shell commands and options. Command-line tools and application. Things every Unix sysadmin needs to know.

Home » Disks and Volumes, Scripts

Solaris boot disk copy

Submitted by on November 20, 2005 – 2:24 am 2 Comments

A handy script to copy boot (or any other) disk under Solaris. This script uses ufsdump/ufsrestore – unlike the usual dd approach – which allows to use two disks of different architecture, as long as the target disk has sufficient space to accommodate source partitions. This is very useful when upgrading from old disks to new, larger disks.

SUBJECT="Boot disk copy on `hostname`"

if [ "$#" != 2 ] ; then
  echo "usage: $0 sdisk tdisk"
  echo "where: sdisk is the source disk (e.g. c0t0d0)"
  echo "       tdisk is the target disk (e.g. c0t1d0)"
  echo "Note:  Please omit slice numbers!"
  exit 1

format/dev/null 2>&1 && S=$1
format/dev/null 2>&1 && T=$2
if [ -z "$S" ] ; then
  echo "ERROR: Source disk $1 does not exist -- exit!" ; exit 2
elif [ -z "$T" ] ; then
  echo "ERROR: Target disk $2 does not exist -- exit!" ; exit 3

clear ; echo "
  ATTENTION: This script will copy the whole disk $S to $T
             If this is NOT what you intended to do, abort
             by pressing Ctrl-C now!

  Are you ready now [N] ? c"
read ans mist ; echo ""
[ "$ans" != "J" -a "$ans" != "j" -a "$ans" != "Y" -a "$ans" != "y" ] && exit 1

prtvtoc /dev/rdsk/${S}s2|fmthard -s - /dev/rdsk/${T}s2     # copy VTOC
for i in `tail -r /etc/mnttab|grep /a|awk '{print $2}'`     # make sure nothing is
  do umount -f $i >/dev/null 2>&1               # mounted under /a ...
[ -d /a ] || mkdir /a                         # create /a if not here

SD=/dev/rdsk/$S ; TD=/dev/rdsk/$T               # the raw disk devices
fs=`df -kl | grep `echo $SD | sed -e 's/rdsk/dsk/'` | grep /dsk/ | sed -e 's/^.*(s[0-9]* ).*/1/'`     # fs on boot disk used

for i in $fs;do
  echo "creating file system on ${TD}$i ...c"
  echo y | newfs ${TD}$i >/dev/null 2>&1 ; echo ""     # create filesystems

for i in $fs ; do                         # mount new disk under
 echo "copying all data from slice $S$i to $T$i ..."     # /a and copy all data
 M=/a`df -kl|grep ${S}$i|awk '{print $6}'|sed -e 's!/$!!'`
 F=`df -kl|grep ${S}$i|awk '{print $6}'`          # from source disk
 mount `echo ${TD}$i|sed -e 's/rdsk/dsk/'` $M          # to target disk
 ( /etc/init.d/xntpd stop ; sleep 30 ; /etc/init.d/xntpd start ) &
 ufsdump 0f - `fssnap -F ufs -o raw,bs=$M,unlink ${F}`| ( cd $M ; ufsrestore rf - ) >/dev/null 2>&1          # (using ufsdump
 fssnap -F ufs -d ${F} >/dev/null 2>&1               # with UFS snapshot)
 echo ""

# Okay, now let's make the new disk bootable:
installboot /usr/platform/`uname -m`/lib/fs/ufs/bootblk `df -kl /a | sed -ne 's/(/dev/)(dsk/[^      ]*).*/1r2/p'`

# and modify the mount entries in /etc/vfstab on new disk:
sed -e "s/${S}/${T}/g" /etc/vfstab > /a/etc/vfstab

# send e-mail
echo "Boot disk copy $S to $T complete on `hostname`" | mailx -s "$SUBJECT" $EMAIL


Print Friendly, PDF & Email


  • Bernard A. Badger says:

    This code is corrupted! All of the less-than characters (&) have been lost. The code-view feature is the same. Who know what else is wrong.

  • louisewoods1984 says:

    This is The erroe i am getting now after i did some reformat of Unused NTFS space in Win 7.
    I am trying to copy from Live CD, but i am getting many Errors, like can not open Image. map file and etc. Now i am not able to use my lap top. last 3 days i am playing with linux with the Help of Yahoo Friends. Plz, help me now also..
    What i must to do to get my Win and Linux back without reinstalling ?
    I am not familiar With Linux terminal Command also..

    This is my Hard Disk Structure;

    /dev/sda1 66 MB FAT De Dell utility
    /dev/sda2 * 105 GB NTFS 7 HPFS/NTFS
    /dev/sda3 1 GB Linux 82 Swap / Solaris
    /dev/sda4 3 gb EXT3 f Linux
    /dev.sda5 10 GB EXT4 / 83 Linux
    and so on……..

    So plz help me

1 Pingbacks »

Leave a Reply

%d bloggers like this: