


This code might be a little choppy because I had to do a lot to trim it down and convert it for more of a demo kind of purpose. The SHOLIBSIZ command can be used to call the SHOLIBSIZ program, or the program can be called directly.
The program calls the Retrieve Library Description (QLIRLIBD) API requesting two elements to be returned. The two keys are key 6 for the Library size information structure and key 7 for the Number of objects in library.
The elements are returned in a structure of variable-length "records". The program steps through the structure using an offset to to extract substrings. The substrings are determined by looking at which key is identified in the part of the structure being examined.
After the values are extracted, the size of the *LIB object itself is retrieved by running RTVOBJD. That value is formatted along with all the others into a message that is sent back out to *PRV -- previous call level. That's different from sending to *EXT as can be seen by running the command from the command line of the MAIN system menu, from the QCMD display or from a PDM command line. PDM knows to resend the message to *EXT; but QCMD will ignore it as will a basic system menu.
Also note that the final message is sent as *NOTIFY. That can be important if you have the program run inside of another CLP, whether by running the command or calling the program, and you use MONMSG for MsgID CPF9897.
You can modify the code to send the info out any way you wish. Run it from QCMD and have the detailed messages shown or just run it from PDM; you should see the message easily enough.
Finally note that the CL is from a source file that has 112-byte records. Some lines will probably be truncated if you put it into an older 92-byte QCLSRC file.
The SHOLIBSIZE *CMD:
/* CRTCMD CMD( MYLIB/SHOLIBSIZ ) +
PGM( MYLIB/SHOLIBSIZ ) +
SRCFILE( mylib/QCMDSRC ) +
SRCMBR( SHOLIBSIZ ) +
REPLACE( *NO ) +
*/
SHOLIBSIZ: CMD PROMPT('Show Library Size')
PARM KWD(LIBNAM) TYPE(*NAME) LEN(10) MIN(1) +
PROMPT('Library name')
The command is simple. Create it wherever you want it and point it at the program. That's all there is for that piece.
The SHOLIBSIZ *PGM:
/*---------------------------------------------------------------------------*/
/* SHOLIBSIZ: Retrieves library size and displays it in a message... */
/*---------------------------------------------------------------------------*/
pgm ( +
&Lib +
)
dcl &Lib *char 10
/* QLIRLIBD returns variable records into this field. We'll process the */
/* two records returned to extract the data we need... */
dcl &LibDta *char 256
/* Each variable record is extracted in turn and various descriptive data */
/* is set up... */
dcl &VarRcd *char 64
dcl &VarRcdRtn *int /* Number of variable records returned */
dcl &VarRcdLen *int /* Length of the current VARRCD... */
dcl &offsVarRcd *int /* Offset into the current VARRCD... */
dcl &KeyID *int /* Key ID of the current VARRCD... */
dcl &SizFld *int /* Size of current VARRCD data field... */
/* Loop counter... */
dcl &CNT *int
/* *dec and binary representations of the *LIB object size and the reported */
/* "library size" from QLIRLIBD... */
dcl &LO_Size *dec ( 15 0 ) /* Size of the LIB object itself... */
dcl &LibObjSiz *char 4 /* Size of the LIB object itself... */
dcl &Size *char 4 /* Size of all objects... */
dcl &OB_Mult *char 4 /* Multiplier of the object sizes... */
dcl &InfStat *char 1 /* Information status... */
/* Binary representations of number of objects in the library... */
dcl &ObjNbr *char 4
/* Used for formatting final message... */
dcl &msgdta *char 26 /* Message data to format... */
dcl &msg *char 100 /* Final message text... */
/* Verify that the requested library exists... */
chkobj QSYS/&Lib objtype( *LIB )
monmsg ( CPF9801 ) exec( do )
sndpgmmsg msgid( CPF9898) msgf( QCPFMSG ) +
msgdta( 'Library' *BCAT &Lib *BCAT 'not found' ) +
msgtype( *ESCAPE )
return
enddo
/* Create a *MSGF and MsgD. This is temporary and used because it's trivial */
/* to format variable values this way (much easier than writing my own code) */
crtmsgf QTEMP/#SLS
monmsg ( cpf2112 )
addmsgd SLS0001 msgf( QTEMP/#SLS ) +
msg( +
'Library &1 size is &2 * &3. (*LIB size: &4 +
Count: &5).' +
) +
fmt( (*CHAR 10) (*UBIN 4) (*UBIN 4) (*UBIN 4) (*UBIN 4) )
/* Retrieve the size and object count via Retrieve Library Description */
/* (QLIRLIBD) API. The API is asked to return two description records. */
/* The first is for key ID 6, library size information, and the second is */
/* for key ID 7, number of objects in the library... */
call QLIRLIBD ( +
&libdta +
x'00000100' +
&lib +
X'000000020000000600000007' +
x'0000000000000000' +
)
/* Because the returned structure contains two variable records, we must */
/* parse the structure according to the API documentation. This code sets */
/* two fields needed for the parsing: the number of variable records */
/* actually returned is a *bin(4) value beginning at position 9 of the */
/* returned structure. Although this should always = 2 for the call here, */
/* we extract it anyway. We might have future uses and need to change */
/* the code in this program. The offset to the first variable length */
/* record will always be 16 (i.e., position 17)... */
chgvar &VarRcdRtn %bin( &LibDta 9 4 )
chgvar &offsVarRcd ( 17 )
/* Loop through the structure and extract the variable records. Handle each */
/* record according to the key ID... */
dofor &CNT from( 1 ) to( &VarRcdRtn )
chgvar &VarRcdLen %bin( &LibDta &offsVarRcd 4 )
/* Extract a variable record according to the length returned... */
chgvar &VarRcd %sst( &LibDta &offsVarRcd &VarRcdLen )
/* Extract key ID and data length from this variable record... */
chgvar &KeyID %bin( &VarRcd 5 4 )
chgvar &SizFld %bin( &VarRcd 9 4 )
/* Bump our offset to the next variable record. We must account for the */
/* three *bin(4) fields at the start of each record (12) and the length */
/* of the data field (&SizFld)... */
chgvar &offsVarRcd ( &offsVarRcd + 12 + &SizFld )
/* Process key ID 6... */
if ( &KeyID *EQ 6 ) do
/* Extract library size fields. This includes a base plus a multiplier... */
chgvar &Size %sst( &VarRcd 13 4 )
chgvar &OB_Mult %sst( &VarRcd 17 4 )
chgvar &InfStat %sst( &VarRcd 21 1 )
/* Check if the library size includes all objects in the library. */
if ( &InfStat *eq '0' ) do
sndpgmmsg msg('Some objects locked or not authorized.') +
topgmq( *PRV )
sndpgmmsg msg('Library objects size does not include all objects.') +
topgmq( *PRV )
enddo
enddo
/* Process key ID 7... */
else if ( &KeyID *EQ 7 ) do
/* Extract number of objects... */
chgvar &ObjNbr %sst( &VarRcd 13 4 )
enddo
enddo
/* We also retrieve the size of the *LIB object itself. This is displayed */
/* in the message because the 'library size information' value includes */
/* the size of the *LIB object. The user is supplied this value so that */
/* it can be subtracted if desired... */
rtvobjd &Lib objtype( *LIB ) size( &LO_Size )
/* Convert to *char to satisfy the CHGVAR command... */
chgvar %bin( &LibObjSiz ) &LO_Size
/* Display the message with the info... */
/* We could have extracted the &Size and other fields as *INT variables, */
/* but *CHAR variables are easy to string together into a &msgdta */
/* variable. The MsgD doesn't know they aren't *INTs... */
chgvar &msgdta ( &Lib *cat +
&Size *cat +
&OB_Mult *cat +
&LibObjSiz *cat +
&ObjNbr +
)
rtvmsg msgid( SLS0001 ) msgf( QTEMP/#SLS ) +
msgdta( &msgdta ) msg( &msg )
dltmsgf QTEMP/#SLS
/* We retrieve the msg text rather than send msg SLS0001 because the MsgF */
/* is going to be deleted. We'd have trouble viewing SLS0001 if the */
/* format no longer existed. The system wouldn't be able to display it. */
sndpgmmsg msgid( CPF9897 ) msgf( QCPFMSG ) +
msgdta( &msg ) +
topgmq( *PRV ) +
msgtype( *NOTIFY )
/* ...and get out of this program... */
return
endpgm
That can be compiled as OPM or ILE CL. It could have more error handling, but there isn't much point to it. It needs to be at Least V5R3, though it can be changed fairly easily to run at any earlier release.
It could also be changed to take advantage of V5R4 by declaring a few structures and basing them on *PTRs. Advance the structures through the variable-record space by adding offsets to the *PTRs.
Paste the code into a streamfile in your IFS. Use CPYFRMSTMF to copy into a source member. I have PDM options that run either CPYTOSTMF or CPYFRMSTMF depending on which way I'm going. I use either iNav or Windows Explorer to access the streamfile depending on how networking is set up.
Be aware that even the API can take a few minutes to process a large, complex library. The library might have many objects or a few objects such as source files with many members. The library directory structure needs to be processed by the API to get the detail needed to supply the totals.
Run the command against a few libraries to get a feel for it. Let me know if there are questions.
Tom


Without seeing the space report along with your DASD configuration, there is no way we can guess the answer. We might guess that you have a particular RAID configuration, for example; but it would be only a guess.
Without information, we can’t know anything. Show us what you’re asking about.
Tom
Total disk space on system in 1,000,000
bytes . . . . . . . . . . . . . . . . : 3034294
% of Size in
Description Disk 1,000,000 bytes
User libraries 68.07 2065541.59
User directories 1.99 60441.55
Folders and documents .00 .41
QSYS .32 9622.75
Other IBM libraries .23 6935.09
Licensed Internal Code .18 5430.17
Temporary space .31 9379.77
Unused space 14.99 454836.69
System internal objects .04 1308.89
Objects not in a library .00 3.90
TOTAL 86.13 2613500.81
Serial Resource
ASP Unit Number Type Model Name Status
1 Unprotected
1 68-0D0FDF2 4327 070 DD005 RAID 5/Active
2 68-0D0E864 4327 070 DD004 RAID 5/Active
3 68-0D10AD5 4327 074 DD001 RAID 5/Active
4 68-0D0F5B4 4327 074 DD003 RAID 5/Active
5 68-0D109C3 4327 074 DD002 RAID 5/Active
6 68-0CFC3F5 4327 074 DD006 RAID 5/Active
7 68-0D0FBF6 4327 074 DD007 RAID 5/Active
8 68-0CFC906 4327 070 DD012 RAID 5/Active
9 68-0D0F6F2 4327 074 DD008 RAID 5/Active
10 68-0CFC777 4327 074 DD011 RAID 5/Active
11 68-0D0FC17 4327 074 DD010 RAID 5/Active
12 68-0D101A7 4327 070 DD013 RAID 5/Active
13 68-0CFDEE3 4327 070 DD009 RAID 5/Active
14 68-0CFC36E 4327 072 DD025 RAID 5/Active
15 68-0D071F5 4327 072 DD019 RAID 5/Active
16 68-0D079AD 4327 072 DD020 RAID 5/Active
17 68-0D13022 4327 072 DD022 RAID 5/Active
19 68-0CE84DB 4327 072 DD023 RAID 5/Active
21 68-0EB8FC5 4327 070 DD048 RAID 5/Active
22 68-0D0F5C5 4327 072 DD018 RAID 5/Active
23 68-0D1098A 4327 072 DD021 RAID 5/Active
24 68-0EB5A79 4327 072 DD026 RAID 5/Active
25 68-0D1152B 4327 072 DD024 RAID 5/Active
26 68-0E9630C 4327 074 DD034 RAID 5/Active
27 68-0EC1862 4327 074 DD029 RAID 5/Active
28 68-0EB8043 4327 074 DD031 RAID 5/Active
29 68-0EBC5BA 4327 072 DD033 RAID 5/Active
30 68-0EC2B10 4327 072 DD030 RAID 5/Active
31 68-0EB6E06 4327 072 DD049 RAID 5/Active
32 68-0EC6091 4327 072 DD035 RAID 5/Active
33 68-0EC308B 4327 072 DD032 RAID 5/Active
34 68-0EC58D9 4327 072 DD028 RAID 5/Active
35 68-0EC1F52 4327 072 DD027 RAID 5/Active
36 68-0EC16AB 4327 072 DD036 RAID 5/Active
37 68-0EC1FA7 4327 072 DD043 RAID 5/Active
38 68-0EBF1BE 4327 072 DD037 RAID 5/Active
39 68-0E962F5 4327 072 DD046 RAID 5/Active
40 68-0EC3E26 4327 072 DD040 RAID 5/Active
41 68-0EA038B 4327 072 DD041 RAID 5/Active
42 68-0EF205F 4327 074 DD044 RAID 5/Active
43 68-0EC20AE 4327 074 DD038 RAID 5/Active
44 68-0EC20A3 4327 072 DD047 RAID 5/Active
45 68-0EB50B9 4327 074 DD042 RAID 5/Active
46 68-0EB926D 4327 072 DD039 RAID 5/Active
47 68-0EC210D 4327 074 DD045 RAID 5/Active
48 68-0EC2122 4327 074 DD050 RAID 5/Active
2 Mirrored
18 68-0D07908 4327 050 DD014 Active
18 68-0C55B49 4327 050 DD017 Active
20 68-0D1E20D 4327 050 DD016 Active
20 68-0D0744C 4327 050 DD015 Active
49 68-0EB1B9A 4327 050 DD051 Active
49 68-0EB6F18 4327 050 DD052 Active
50 68-0EB7DC1 4327 050 DD053 Active
50 68-0E6D284 4327 050 DD054 Active
Is that enough info ?
Basically we run SAP and its journal receivers are all in ASP2
I did wonder if RAID was the answer but the report shows 3034Gb which excludes the amount lost to RAID doesn’t it ?
…the report shows 3034Gb which excludes the amount lost to RAID doesn’t it ?
AFAIK, it usually does.
Please run WRKDSKSTS OUTPUT(*PRINT). Paste the report detail like:
Size % I/O Request Read Write Read Write % --Protection-- Unit Type (M) Used Rqs Size (K) Rqs Rqs (K) (K) Busy ASP Type Status Compression 1 4327 70564 84.4 2.8 6.4 1.0 1.8 6.1 6.6 1 1 2 4327 70564 84.4 3.2 7.0 .6 2.5 4.9 7.6 1 1 3 4327 70564 84.4 3.9 6.2 .5 3.3 5.2 6.3 2 1 4 6718 17548 98.0 .7 5.8 .2 .5 4.0 6.7 0 1 5 6718 17548 97.8 2.8 4.6 .0 2.8 4.3 4.6 0 1 6 6718 17548 97.7 .7 5.6 .2 .5 4.0 6.2 0 1 4003 6718 17548 .0 .0 .0 .0 .0 .0 0 33 4004 6718 17548 .0 .0 .0 .0 .0 .0 0 34 4005 6718 17548 .0 .0 .0 .0 .0 .0 0 35 4006 6718 17548 .0 .0 .0 .0 .0 .0 0 36(I clicked the {code} button before and after the paste so that formatting was preserved. You might use iNav to drag the spooled file into a PC text file for easy copying.)
This section from DSPSYSSTS might also be useful:
If the system can’t be quiesced when the reports are run, I might not be surprised if 400GB is in use on a system of your size. Even the system itself will need to get locks on objects to gather data. Regardless, if it was one of my systems, I would definitely want a true baseline to work from as well as a series of reports for trending. The baseline would come during some planned downtime. (I’d probably keep a couple of them — the latest two.)
Also, I’m submitting RTVDSKINF on one system during the day just to see what differences show up. If it’s significant, I’ll post what I find.
Tom
Thanks Tom
5761SS1 V6R1M0 080215 Work with Disk Status 7/07/10 14:15:53 Page 1 Elapsed time . . . . . . . : 03:25:39 System name . . . . . . . : JGBERPHA Size % I/O Request Read Write Read Write % --Protection-- Unit Type (M) Used Rqs Size (K) Rqs Rqs (K) (K) Busy ASP Type Status Compression 1 4327 70564 91.2 15.4 49.5 7.6 7.8 93.7 6.5 4 1 DPY ACTIVE 2 4327 70564 91.1 16.2 61.6 10.2 6.0 92.2 9.4 4 1 DPY ACTIVE 3 4327 52923 91.2 15.0 50.0 7.1 7.8 94.8 8.9 2 1 DPY ACTIVE 4 4327 52923 91.2 13.5 56.9 7.5 5.9 93.6 10.5 4 1 DPY ACTIVE 5 4327 52923 91.2 13.0 55.4 7.2 5.7 89.5 12.2 4 1 DPY ACTIVE 6 4327 52923 91.2 13.3 54.7 7.0 6.3 95.5 9.0 2 1 DPY ACTIVE 7 4327 52923 91.2 12.4 59.0 7.1 5.3 95.0 10.1 3 1 DPY ACTIVE 8 4327 70564 91.1 17.3 55.9 9.5 7.8 94.2 8.9 4 1 DPY ACTIVE 9 4327 52923 91.2 12.3 58.3 7.0 5.2 93.7 10.8 3 1 DPY ACTIVE 10 4327 52923 91.2 14.8 49.3 7.1 7.7 93.6 8.6 3 1 DPY ACTIVE 11 4327 52923 91.2 14.7 50.6 7.1 7.5 94.8 8.7 3 1 DPY ACTIVE 12 4327 70564 91.3 18.2 55.0 10.0 8.1 93.2 7.8 4 1 DPY ACTIVE 13 4327 70564 91.2 17.9 56.0 9.8 8.1 95.8 8.2 4 1 DPY ACTIVE 14 4327 61744 91.1 13.9 60.4 8.2 5.6 94.5 10.5 3 1 DPY ACTIVE 15 4327 61744 91.1 15.3 55.7 8.5 6.7 92.1 9.3 3 1 DPY ACTIVE 16 4327 61744 91.2 14.9 58.5 8.6 6.2 93.8 9.4 3 1 DPY ACTIVE 17 4327 61744 91.2 15.7 54.7 8.6 7.0 91.8 8.8 3 1 DPY ACTIVE 19 4327 61744 91.3 15.8 55.2 8.7 7.0 91.9 9.4 3 1 DPY ACTIVE 21 4327 70564 91.3 16.1 61.8 10.2 5.9 91.9 10.1 4 1 DPY ACTIVE 22 4327 61744 91.2 17.3 49.0 8.2 9.0 93.8 8.0 3 1 DPY ACTIVE 23 4327 61744 91.1 16.2 52.2 8.2 8.0 94.2 9.1 3 1 DPY ACTIVE 24 4327 61744 91.2 14.5 59.9 8.8 5.6 91.7 10.3 3 1 DPY ACTIVE 25 4327 61744 91.2 18.8 46.5 8.7 10.0 90.4 8.1 3 1 DPY ACTIVE 26 4327 52923 91.2 13.3 55.6 7.3 5.9 91.8 10.4 3 1 DPY ACTIVE 27 4327 52923 91.3 13.5 58.4 8.1 5.4 91.1 10.0 3 1 DPY ACTIVE 28 4327 52923 91.2 12.9 58.0 7.4 5.4 93.6 9.9 3 1 DPY ACTIVE 29 4327 61744 91.1 33.3 29.2 8.8 24.4 94.5 5.6 4 1 DPY ACTIVE 30 4327 61744 91.2 14.5 60.8 8.8 5.6 92.4 11.6 3 1 DPY ACTIVE 31 4327 61744 91.2 15.1 57.5 8.6 6.5 92.6 11.1 3 1 DPY ACTIVE 32 4327 61744 91.2 15.2 58.9 9.1 6.1 91.1 10.3 3 1 DPY ACTIVE 33 4327 61744 91.2 15.8 55.0 8.7 7.1 92.5 9.2 3 1 DPY ACTIVE 34 4327 61744 91.2 15.1 55.8 8.4 6.7 92.4 9.7 3 1 DPY ACTIVE 35 4327 61744 91.1 14.3 60.6 8.7 5.6 92.8 10.5 3 1 DPY ACTIVE 36 4327 61744 91.1 14.3 60.4 8.6 5.7 92.9 11.6 3 1 DPY ACTIVE 37 4327 61744 91.2 16.4 52.3 8.5 7.8 91.7 8.9 3 1 DPY ACTIVE 38 4327 61744 91.2 15.8 55.6 9.0 6.8 91.0 9.4 4 1 DPY ACTIVE 39 4327 61744 91.2 15.6 57.1 8.8 6.7 93.2 9.8 4 1 DPY ACTIVE 40 4327 61744 91.2 14.4 63.6 9.2 5.1 93.0 10.6 4 1 DPY ACTIVE 41 4327 61744 91.2 15.3 58.1 8.9 6.4 93.3 9.3 3 1 DPY ACTIVE 42 4327 52923 91.1 12.2 63.4 7.8 4.4 93.1 10.9 3 1 DPY ACTIVE 43 4327 52923 91.2 11.8 61.6 7.1 4.6 93.5 12.4 3 1 DPY ACTIVE 44 4327 61744 91.2 14.7 62.2 9.1 5.5 93.7 10.9 3 1 DPY ACTIVE 45 4327 52923 91.2 13.7 57.7 7.9 5.7 92.6 9.9 3 1 DPY ACTIVE 46 4327 61744 91.2 15.7 59.4 9.4 6.3 93.1 9.4 4 1 DPY ACTIVE 47 4327 52923 91.2 14.0 54.4 7.6 6.4 92.3 9.1 3 1 DPY ACTIVE 48 4327 52923 91.1 13.3 57.2 7.6 5.6 92.6 9.3 3 1 DPY ACTIVE 18 4327 70564 22.1 39.5 6.1 .0 39.5 4.0 6.1 1 2 MRR ACTIVE 18 4327 70564 22.1 39.5 6.2 .0 39.4 5.3 6.2 1 2 MRR ACTIVE 20 4327 70564 22.1 40.0 6.9 .0 40.0 4.0 6.9 2 2 MRR ACTIVE 20 4327 70564 22.1 39.9 6.9 .0 39.9 5.5 6.9 2 2 MRR ACTIVE 49 4327 70564 22.2 38.7 5.5 .0 38.7 4.0 5.5 1 2 MRR ACTIVE 5761SS1 V6R1M0 080215 Work with Disk Status 7/07/10 14:15:53 Page 2 Size % I/O Request Read Write Read Write % --Protection-- Unit Type (M) Used Rqs Size (K) Rqs Rqs (K) (K) Busy ASP Type Status Compression 49 4327 70564 22.2 38.6 5.5 .0 38.6 9.0 5.5 1 2 MRR ACTIVE 50 4327 70564 22.1 39.3 6.2 .0 39.3 4.0 6.2 1 2 MRR ACTIVE 50 4327 70564 22.1 39.2 6.2 .0 39.2 9.5 6.2 1 2 MRR ACTIVE * * * * * E N D O F L I S T I N G * * * * *Auxiliary storage:
System ASP . . . . . . : 2752 G
% system ASP used . . : 91.2452
Total . . . . . . . . : 3034 G
Current unprotect used : 48387 M
Maximum unprotect . . : 53949 M
So far, you look pretty normal, though perhaps getting crowded. I ran RTVDSKINF on one system and came up about .16% higher than when run in the middle of the night on a weekend. On a second system, I got a TOTAL of 100.11% reported.
There are obviously rounding errors in the reports on top of variances due to what can counted while in use.
You might use the Retrieve Library Description (QLIRLIBD) API against a few of your larger libraries to get a feel for how locks might interfere on an active system. Retrieve results from the API and compare against a total that you build by querying one object description at a time from the same libraries and also by running DSPLIB OUTPUT(*PRINT).
I don’t know what techniques are used by RTVDSKINF. I’m still looking to see if clear info can be extracted from the system itself.
Tom
Thanks again Tom
How did you run the report on the system that gave 100% ?
How do I run an API (I’m not a programmer but can do CL) ?
How did you run the report on the system that gave 100% ?
100.11% — I simply submitted RTVDSKINF, then ran PRTDSKINF *SYS after collection finished.
How do I run an API (I’m not a programmer but can do CL) ?
I have ILE CL code that does it, but I’ll need to pare it down some first. It has too many extras in it that would drastically obscure its function. I should post it here before Monday arrives.
Tom
Thanks Tom
Is it possible that the unaccounted for disk space could be deleted records ?
I reorganise the larger gains but there are tens of thousands of smaller ones which I haven’t done because they would have to be specified one-by-one.
That’s great Tom
It might take me a while to do this but I’m very grateful for all your advice and help on this matter.
The code could look similar in RPG, but you said you knew CL. If anything needs clarification, just post back.
Keep in mind that this still doesn’t answer your question. It is only one of the various ways of totalling up space used by objects in a library. You might or might not see the messages that can come from locks encountered by the API; if you do, you won’t know which objects are excluded. The most that this might do is show cases of different totals from different methods.
I haven’t seen evidence that the program can’t be run any time of day. That might be the most useful aspect since you’re stuck running RTVDSKINF on an active system.
Tom