(10-16-2018, 11:48 AM)Infiltratr Wrote: These are the instructions I use for drive cloning in my octanes.
I use the dd section because its simple and it works for me.
http://www.cspry.co.uk/computing/Indy_ad...ackup.html
I am under the understanding that using dd is more dangerous because it doesn't deal with bad sectors/blocks in a robust way, and you may have data corruption issues or even an unbootable system depending on what is corrupted. This was always my understanding and why it was preferable to use xfsdump/xfsretore.
There was a disk clone script on Nekochan that I never got a chance to save (or at least now I Can't find it - can someone post it please?)
Here is a script I found a long time ago somewhere, it works fine
Code:
#!/bin/sh
# program to copy root & usr partitions and create a new bootable disk
# Note that this script is limited to SCSI drives, and only those
# on controller 2.
# It makes the root & usr filesystem on partition 0 & 6 for destination drive
# and install sash, ide & fx in the volume header of the destination drive.
if [ $# -eq 0 ]
then
echo "Usage $0 [disk_number]"
exit 1
elif [ $1 -eq 1 ]
then
echo "The disk number needs to be greater than 1."
exit 1
elif [ $1 -le 1 ]
then
echo "The disk number needs to be greater than 1."
exit 1
else
NUM=$1
fi
echo "\nSource SCSI (system)disk 1"
echo "\nDestination SCSI controller: \c"
read SCSI_C
echo "\nDestination SCSI Controller channel "$SCSI_C" disk "$NUM""
echo "\007OK? (n)\c"
read answer
case "$answer" {
y|Y|yes|Yes|YES) ;;
*) echo "\007\n\nAbort"; exit 1;;
}
echo "\nChecking SCSI disk"$NUM".."
hinv -c disk | grep -s "unit $NUM on SCSI controller $SCSI_C" > /dev/null 2>&1
if [ $? -ne 0 ]
then echo SCSI disk $NUM not found on controller $SCSI_C
exit 1
fi
(prtvtoc -s -h /dev/rdsk/dks"$SCSI_C"d"$NUM"vol | grep "0.*xfs" ) > /dev/null 2>&1
if [ $? != 0 ]
then
echo "reformat disk $NUM on SCSI controller $SCSI_C\n"
echo "for a system disk (no partition 0 found)"
exit 1
fi
/etc/fsstat /dev/dsk/dks"$SCSI_C"d"$NUM"s7 > /dev/null 2>&1
s7=$?
/etc/fsstat /dev/dsk/dks"$SCSI_C"d"$NUM"s6 > /dev/null 2>&1
s6=$?
/etc/fsstat /dev/dsk/dks"$SCSI_C"d"$NUM"s0 > /dev/null 2>&1
s0=$?
if [ $s7 -ne 3 -o $s6 -ne 3 -o $s0 -ne 3 ]
then
echo "\007SCSI controller $SCSI_C disk $NUM appears to\n"
echo "have a valid filesystem, overwrite it? (n)\c"
read answer
case "$answer" {
y|Y|yes|Yes|YES) ;;
*) echo Disk $NUM not added; exit 1;;
}
fi
#-------------------------------------------------
echo "\nStart disk clone..."
umount /d
mkdir /d
mkfs -d name=/dev/rdsk/dks"$SCSI_C"d"$NUM"s0 -l internal,size=2048b -b size=1k
labelit /dev/rdsk/dks"$SCSI_C"d"$NUM"s0 / sgi
mount /dev/dsk/dks"$SCSI_C"d"$NUM"s0 /d
df -k
echo "\ncopy root partition..."
cd /; xfsdump -l 0 -J - / | (cd /d; xfsrestore - .)
fsstat /dev/usr 1> /dev/null 2>&1
stat=$?
if [ $stat = 2 ]
then
mkdir /d/usr
mkfs -d name=/dev/rdsk/dks"$SCSI_C"d"$NUM"s6 -l internal,size=2048b -b
size=1k
labelit /dev/rdsk/dks"$SCSI_C"d"$NUM"s6 /usr sgi
mount /dev/dsk/dks"$SCSI_C"d"$NUM"s6 /d/usr
df -k
echo "\ncopy usr partition..."
cd /usr; xfsdump -l 0 -J - /usr | (cd /d/usr; xfsrestore - .)
fi
echo "\ninstalling sash, ide & fx in volume header....."
if [ ! -r /stand/sash ]; then /etc/dvhtool -v get sash /stand/sash /dev/rdsk/dks0d1vh ;fi
if [ ! -r /stand/fx ]; then /etc/dvhtool -v get fx /stand/fx /dev/rdsk/dks0d1vh ;fi
if [ ! -r /stand/ide ]; then /etc/dvhtool -v get ide /stand/ide /dev/rdsk/dks0d1vh ;fi
/etc/dvhtool -v c /stand/sash sash /dev/rdsk/dks"$SCSI_C"d"$NUM"vh
/etc/dvhtool -v c /stand/ide ide /dev/rdsk/dks"$SCSI_C"d"$NUM"vh
/etc/dvhtool -v c /stand/fx fx /dev/rdsk/dks"$SCSI_C"d"$NUM"vh
echo "\nNew disk number SCSI:"$SCSI_C" disk:"$NUM" ready to use."
echo "\nDONE....."
exit 0