(01-03-2022, 06:50 AM)mamed Wrote: Easier than pie with the below script I just did this actually. After fx my drive to root I just loaded the script everything and I mean everything is automatic after it’s done you can just swap it or even out it in a different machine.
insert second disk, "fx" it to be a root disk, run this script (as in save it, name it "clone", as root do "./clone 2" if your new disk will have scsi id of 2, then type 0 if its on scsi controller 0):
#!/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
Only small comments I have are:
1. Please either probe or prompt for XFS block size as small disks should be using 512 while larger disks use 4096.
2. See about using DVHTOOL to also bring along IDE (diags) correctly.