Path: utzoo!utgpu!water!watmath!clyde!att!pacbell!ames!pasteur!ucbvax!NIHKLMB.BITNET!GHC
From: GHC@NIHKLMB.BITNET
Newsgroups: comp.os.vms
Subject: BITNET Mail follows
Message-ID: <8806230957.AA12827@ucbvax.Berkeley.EDU>
Date: 16 Jun 88 16:26:00 GMT
Sender: daemon@ucbvax.BERKELEY.EDU
Organization: The Internet
Lines: 155

Date: 16-JUN-1988 09:24:45.28
From: Gerson H Cohen 
To  : 
Original To: GATEWAY::"info-vax@kl.sri.com"
Subj: RE: Moving users to a new Vax

In reply to a query from SYSMAN@NMSUNM1.BITNET Re: Moving users to a new Vax
I have suggested the following.  I am reposting it to the list because of the
usefull command procedure which I included in the response.
============================================================================
From:   VGER::GHC          "Gerson H Cohen" 16-JUN-1988 09:16
To:     GATEWAY::"sysman@nmsuvm1",GHC
Subj:   Re: Moving users to a new Vax

I have done almost exactly what you require, excepting that several of my
drives came along onto the new system.  If you don't bring any drives,
you'll have to copy the system disk (image mode) onto tape and restore it
on the new machine.  As for copying quotas, I have a procedure (originally
from a DECUS symposium tape which I am attaching.  Execute it on each of
your current drives and then execute to resultant command file on the new
machine.  BTW - I use it from time to time to record tha quotas on each on
my devices in case I loose a drive and have to recreate what was there on
a new pack.

GHC
---------------------------------------------------------------------------
$ verify = 'F$VERIFY(0)'
$ GOTO L1$
$!
$! DISKQUOTA.COM
$!
$! This command procedure will extract the currently set disk quotas for
$! a disk volume and prepare a command file to be used to restore those quotas.
$! The two parameters give the disk name with the volume whose quotas are to
$! be scanned and the file name for the command file to be used to restore the
$! quotas.  This command procedure is used because the BACKUP utility will not
$! allow the QUOTA.SYS file to be saved online.
$!+ DISKQUOTA
$! The DISKQUOTA command procedure will create a command file to
$! restore the current disk quota settings (using the DISKQUOTA program).
$! Execute the command procedure by doing:
$!
$!      @D$:DISKQUOTA  device[:]  [file_spec]
$!
$! The output file specification defaults are taken from
$! SYS$DISK:QUOTAS.COM.
$!-
$! Created:     Frank J. Nagy   9-Oct-81        Fermilab Accelerator Controls
$!
$! Modifications:
$!  11-Apr-82   FJN     Cleaned up use of VER_MODE
$!  30-Aug-82   FJN     Use VMS V3 features
$!  03-Sep-82   FJN     Remove ";" added by F$PARSE
$!  21-Jul-87   GHC     Check for UIC by character string
$!=============================================================================
$L1$:
$!
$! If no P1 parameter specified, exit.  If p1 is given, remove any trailing
$! colons.
$!
$ IF p1 .EQS. "" THEN $ EXIT    F$VERIFY(verify).OR.1
$ p1 = p1 - ":"
$!
$! Set default for file specification parameter.
$!
$ p2 = F$PARSE(p2,"SYS$DISK:QUOTAS.COM") - ";"
$!
$! Create temporary command file to run DISKQUOTA
$!
$ OPEN/WRITE  OUT:  DISKQUOTA.TMP
$ WRITE OUT: "$ RUN SYS$SYSTEM:DISKQUOTA"
$ WRITE OUT: "USE ",p1
$ WRITE OUT: "SHOW [*,*]"
$ WRITE OUT: "EXIT"
$ CLOSE OUT:
$!
$! Run DISKQUOTA to get disk space allocated by UIC
$!
$@DISKQUOTA.TMP/OUTPUT=DISKSPACE.TMP
$ DELETE DISKQUOTA.TMP;*
$!
$! Sort into order by UIC
$!
$ SORT/KEY=(POS:2,SIZE:6,NUMBER:1)/KEY=(POS:9,SIZE:6,NUMBER:2) -
        DISKSPACE.TMP   DISKSPACE.TMP
$ PURGE DISKSPACE.TMP
$!
$! Now read the DISKQUOTA output file and setup the restoring command file.
$!
$ OPEN/READ/ERR=ERR_NO_DISK  SPACE:  DISKSPACE.TMP
$ OPEN/WRITE/ERR=ERR_NO_WRITE  RESTORER:  'P2'
$ ON CONTROL_Y THEN $ GOTO EXIT_ALL
$ ON ERROR THEN $ GOTO EXIT_ALL
$!
$!  Skip first record in disk space file
$!
$ READ  SPACE:  DUMMY
$!
$! First lines of restorer are to RUN DISKQUOTA and USE the disk and to
$! CREATE the QUOTA.SYS file.
$!
$ WRITE RESTORER: "$ RUN SYS$SYSTEM:DISKQUOTA"
$ WRITE RESTORER: "USE ",P1
$ WRITE RESTORER: "CREATE"
$!
$! Loop reading the DISKQUOTA output file and writing the restorer file
$!
$LOOP:
$       READ/END=EOF_SPACE  SPACE:  space_buf
$       uic_space = F$EXTRACT(0,16,space_buf)
$!
$! Check for [0,0].  If so then operation is "MOD", else operation is "ADD"
$!
$       op_type = "ADD"                         !Default operation type
$       IF F$EXTRACT(0,5,uic_space) .EQS. "[0,0]" THEN -
                op_type = "MOD"
$!
$! Get quota values from input
$!
$       uic_perm = F$EXTRACT(31,10,space_buf)
$       uic_over = F$EXTRACT(49,10,space_buf)
$       WRITE RESTORER: -
                op_type," ",uic_space,"/PERM=",uic_perm,"/OVER=",uic_over
$       GOTO LOOP
$!
$! All done with input
$!
$ EOF_SPACE:
$!
$ EXIT_ALL:
$ CLOSE SPACE:
$!
$!  End the restorer command file.
$!
$ WRITE RESTORER: "REBUILD"
$ WRITE RESTORER: "EXIT"
$ CLOSE RESTORER:
$!
$! Cleanup
$!
$ DELETE DISKSPACE.TMP;*
$ PURGE 'P2'
$ EXIT  F$VERIFY(verify).OR.1
$!
$!  Error Messages
$!
$!
$ ERR_NO_DISK:
$ WRITE SYS$OUTPUT "%DISKUSAGE-F-NO_DISK, no disk space file found."
$ GOTO EXIT_ALL
$!
$ ERR_NO_WRITE:
$ WRITE SYS$OUTPUT "%DISKUSAGE-F-NOWRITE, restorer command file not opened."
$ GOTO EXIT_ALL
$!