IBM Disk Space Report

140 pts.
Tags:
Disk space
V6R1
On the report the total % of disk space is 86% which includes all unused space. Where is the other 14% which totals over 400Gb on our system ? IBM replied that it's because the data is in use at the time and the data gathering should be run in a dedicated system. I find it hard to believe that 400Gb is in use (each week) when the job is run at a quiet period. Since the job has to run in batch it's difficult to run dedicated especially on a production machine. Is there another way of finding out where this 'missing' 400Gb is ?

Software/Hardware used:
i570 running i5/OS V6R1
ASKED: July 5, 2010  11:40 AM
UPDATED: July 13, 2010  2:42 AM

Answer Wiki

Thanks. We'll let you know when a new response is added.
Send me notifications when members answer or reply to this question.

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Discuss This Question: 11  Replies

 
There was an error processing your information. Please try again later.
Thanks. We'll let you know when a new response is added.
Send me notifications when members answer or reply to this question.

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy
  • TomLiotta
    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
    125,585 pointsBadges:
    report
  • Pmaddox
    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 ?
    140 pointsBadges:
    report
  • TomLiotta
    ...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:
    Auxiliary storage:                   
      System ASP . . . . . . :    264.3 G
      % system ASP used  . . :    87.1377
      Total  . . . . . . . . :    264.3 G
      Current unprotect used :     9373 M
      Maximum unprotect  . . :     9631 M
    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
    125,585 pointsBadges:
    report
  • Pmaddox
    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
    140 pointsBadges:
    report
  • TomLiotta
    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
    125,585 pointsBadges:
    report
  • Pmaddox
    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) ?
    140 pointsBadges:
    report
  • TomLiotta
    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
    125,585 pointsBadges:
    report
  • Pmaddox
    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.
    140 pointsBadges:
    report
  • TomLiotta
    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
    125,585 pointsBadges:
    report
  • Pmaddox
    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.
    140 pointsBadges:
    report
  • TomLiotta
    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
    125,585 pointsBadges:
    report

Forgot Password

No problem! Submit your e-mail address below. We'll send you an e-mail containing your password.

Your password has been sent to:

To follow this tag...

There was an error processing your information. Please try again later.

REGISTER or login:

Forgot Password?
By submitting you agree to receive email from TechTarget and its partners. If you reside outside of the United States, you consent to having your personal data transferred to and processed in the United States. Privacy

Thanks! We'll email you when relevant content is added and updated.

Following