T}$ DISKM010.D g` DISKM010.DBACKUP/NOASSIST/NODISMOUNT/COMMENT=VAX/VMS SPKITBLD Procedure/INTER/LOG/VERIFY $1$DIA2:[DISK.D]*.*; $1$DIA2:[DISK]DISKM010.D/LABEL=(DISKM)/SAVE/BLOCK=9000/GROUP=25/NOINIT/NOREWIVAX/VMS SPKITBLD Procedure BUCKLEY 1<^V6.1 _DEWEY::  _$1$DIA2: V6.1 $I*[DISK.D]FRAG_SUMMARY.COM;4+,./ 4W- 0123KPWO56TD7Q1<^89GHJ 2$ ! COPYRIGHT (C) 1992 BY=$ ! DIGITAL EQUIPMENT CORPORATION, MAYNARD<$ ! MASSACHUSETTS. ALL RIGHTS RESERVED.$ !J$ ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDM$ ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSIONF$ ! OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIESI$ ! THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHERN$ ! PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.$ !M$ ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ANDN$ ! SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.$ !H$ ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS;$ ! SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.$ !N$ !***************************************************************************$ !F$!PERFORMANCE METRICS THAT ARE CUSTOMIZABLE (DEFAULTS SET FOR AN RA92)$!L$!THESE THRESHOLDS ARE USED TO INCREASE/DECREASE THE NUMEBR OF DISKS SINGLEDK$!OUT FOR ACTION. IF NO DISKS ARE BEING FLAGGED YOU PROBIBALY WANT TO LOWERL$!THE TRESHOLDS. THE OPTIMAL VALUE WOULD SINGLE OUT THE NUMBER OF DISKS THAT+$!CAN BE REFRESHED DURING A ONE WEEK CYCLE.$!8$!DEFINE LOGICALS FOR MEDIA TYPES THAT HAVE BEEN DEFINED$DEFINE/NOLOG DEF_DEFINED "YES" $DEFINE/NOLOG RA92_DEFINED "YES" $DEFINE/NOLOG RA90_DEFINED "YES" $DEFINE/NOLOG RA82_DEFINED "YES" $DEFINE/NOLOG RA81_DEFINED "YES" $DEFINE/NOLOG RZ23_DEFINED "YES" $DEFINE/NOLOG RF73_DEFINED "YES" $DEFINE/NOLOG RF72_DEFINED "YES" $DEFINE/NOLOG RF71_DEFINED "YES"$! $! PCT OF DISK TO KEEP FREE [20]$DEF_DISK_FREE = 20$RA92_DISK_FREE = 20$RA90_DISK_FREE = 20$RA82_DISK_FREE = 20$RA81_DISK_FREE = 20$RZ23_DISK_FREE = 20$RF73_DISK_FREE = 20$RF72_DISK_FREE = 20$RF71_DISK_FREE = 20$!;$!PCT OF FREE SPACE REQUIRED IN THE LARGEST BITMAP HOLE [5]$DEF_BHOLE_FREE = 5$RA92_BHOLE_FREE = 5$RA90_BHOLE_FREE = 5$RA82_BHOLE_FREE = 5$RA81_BHOLE_FREE = 5$RZ23_BHOLE_FREE = 5$RF73_BHOLE_FREE = 5$RF72_BHOLE_FREE = 5$RF71_BHOLE_FREE = 5$!;$!FREE SPACE THRESHOLD FOR BITMAP HOLE CONCLUSIONS [300000]$DEF_FREE_FRAG = 300000$RA92_FREE_FRAG = 300000$RA90_FREE_FRAG = 300000$RA82_FREE_FRAG = 100000$RA81_FREE_FRAG = 70000$RZ23_FREE_FRAG = 20000$RF73_FREE_FRAG = 300000$RF72_FREE_FRAG = 200000$RF71_FREE_FRAG = 70000$!2$!LARGEST BITMAP HOLE MUST BE GREATER THEN [50000]$DEF_BHOLE = 50000$RA92_BHOLE = 50000$RA90_BHOLE = 50000$RA82_BHOLE = 20000$RA81_BHOLE = 10000$RZ23_BHOLE = 5000$RF73_BHOLE = 50000$RF72_BHOLE = 30000$RF71_BHOLE = 10000$!1$!NUMBER OF BITMAP HOLES MUST BE LESS THEN [5000]$DEF_BHOLE_NUM = 5000$RA92_BHOLE_NUM = 5000$RA90_BHOLE_NUM = 5000$RA82_BHOLE_NUM = 2000$RA81_BHOLE_NUM = 1000$RZ23_BHOLE_NUM = 500$RF73_BHOLE_NUM = 5000$RF72_BHOLE_NUM = 3000$RF71_BHOLE_NUM = 1000$!7$!NUMBER OF FILES WITH EXTENSION HEADERS MUST BE < [10]$DEF_FILE_HEAD = 10$RA92_FILE_HEAD = 10$RA90_FILE_HEAD = 10$RA82_FILE_HEAD = 7$RA81_FILE_HEAD = 5$RZ23_FILE_HEAD = 3$RF73_FILE_HEAD = 10$RF72_FILE_HEAD = 7$RF71_FILE_HEAD = 5$!A$!NUMBER OF FILES WITH EXTENTS > DISK WINDOW SIZE MUST BE < [500]$DEF_FILE_EXT = 500$RA92_FILE_EXT = 500$RA90_FILE_EXT = 500$RA82_FILE_EXT = 200$RA81_FILE_EXT = 100$RZ23_FILE_EXT = 50$RF73_FILE_EXT = 500$RF72_FILE_EXT = 300$RF71_FILE_EXT = 100$!.$!LARGEST NUMBER OF HEADERS IN ONE FILE < [10]$DEF_NUM_HEAD = 10$RA92_NUM_HEAD = 10$RA90_NUM_HEAD = 10$RA82_NUM_HEAD = 10$RA81_NUM_HEAD = 10$RZ23_NUM_HEAD = 10$RF73_NUM_HEAD = 10$RF72_NUM_HEAD = 10$RF71_NUM_HEAD = 10$!O$!MAX NUMBER EXTENTS IN THE INDEXF.SYS (ONLY 1 HEADER) FILE BEFORE REFRESH [40]$DEF_INDEXF_EXTENTS = 40$RA92_INDEXF_EXTENTS = 40$RA90_INDEXF_EXTENTS = 40$RA82_INDEXF_EXTENTS = 40$RA81_INDEXF_EXTENTS = 40$RZ23_INDEXF_EXTENTS = 40$RF73_INDEXF_EXTENTS = 40$RF72_INDEXF_EXTENTS = 40$RF71_INDEXF_EXTENTS = 40$!%$!END OF DISK SPECIFIC CUSTOMIZATIONS$!$ON ERROR THEN GOTO EXIT6$!CREATE FILE CONTAINING OUTPUT OF "DIREX/DATE *.FRAG"?$DIREX/NOHEAD/NOTRAIL/COL=1/OUTPUT=SYS$LOGIN:SUMLIST.TMP *.FRAG#$OPEN SUMLIST SYS$LOGIN:SUMLIST.TMP$$OPEN/WRITE OUTFILE FRAG_SUMMARY.RPT$$OPEN/WRITE SUMFILE FRAG_SUMMARY.SUM$ON ERROR THEN GOTO DONE $READREC:!$!READ FILE TO EXTRACT DISK NAMES)$READ/END=DONE/ERROR=EROR SUMLIST FILEREC3$FILE = F$EDIT("''F$EXTRACT(0,80,FILEREC)'","TRIM")$DISKFILE1 = " "$DISKFILE2 = " "$DISKFILE3 = " "$DISKFILE4 = " "$DISKFILE5 = " "$NUM_INDEXF_EXT = 0$SHOW SYM FILEJ$!OPEN/READ REVIEW_DISK FILE FOR A DEVICE TO SEE IF IT IS BADLY FRAGMENTED$OPEN DISK 'FILE'.$READ/END=DISKDONE/ERROR=DISKERR DISK DISKNAME/$READ/END=DISKDONE/ERROR=DISKERR DISK DISKHOLES/$READ/END=DISKDONE/ERROR=DISKERR DISK DISKSPACE/$READ/END=DISKDONE/ERROR=DISKERR DISK DISKFILES-$READ/END=DISKDONE/ERROR=DISKERR DISK DISKERR.$READ/END=DISKDONE/ERROR=DISKERR DISK DISKBUSY.$READ/END=DISKDONE/ERROR=DISKERR DISK DISKSUMM0$READ/END=DISKDONE/ERROR=DISKERR DISK DISKBLANK11$READ/END=DISKDONE/ERROR=DISKERR DISK DISKHEADER11$READ/END=DISKDONE/ERROR=DISKERR DISK DISKHEADER20$READ/END=DISKDONE/ERROR=DISKERR DISK DISKBLANK2+$READ/END=NOFRAG/ERROR=DISKERR DISK DISKRECN$IF (F$LOCATE("Files larger",DISKREC) .NE. F$LENGTH(DISKREC)) THEN GOTO NOFRAG$DISKFILE1 = "''DISKREC'"B$IF (F$LOCATE("INDEXF.SYS",DISKREC) .NE. F$LENGTH(DISKREC)) THEN -= NUM_INDEXF_EXT = F$EDIT("''F$EXTRACT(10,8,DISKREC)'","TRIM")+$READ/END=NOFRAG/ERROR=DISKERR DISK DISKRECN$IF (F$LOCATE("Files larger",DISKREC) .NE. F$LENGTH(DISKREC)) THEN GOTO NOFRAG$DISKFILE2 = "''DISKREC'"B$IF (F$LOCATE("INDEXF.SYS",DISKREC) .NE. F$LENGTH(DISKREC)) THEN -= NUM_INDEXF_EXT = F$EDIT("''F$EXTRACT(10,8,DISKREC)'","TRIM")+$READ/END=NOFRAG/ERROR=DISKERR DISK DISKRECN$IF (F$LOCATE("Files larger",DISKREC) .NE. F$LENGTH(DISKREC)) THEN GOTO NOFRAG$DISKFILE3 = "''DISKREC'"B$IF (F$LOCATE("INDEXF.SYS",DISKREC) .NE. F$LENGTH(DISKREC)) THEN -= NUM_INDEXF_EXT = F$EDIT("''F$EXTRACT(10,8,DISKREC)'","TRIM")+$READ/END=NOFRAG/ERROR=DISKERR DISK DISKRECN$IF (F$LOCATE("Files larger",DISKREC) .NE. F$LENGTH(DISKREC)) THEN GOTO NOFRAG$DISKFILE4 = "''DISKREC'"B$IF (F$LOCATE("INDEXF.SYS",DISKREC) .NE. F$LENGTH(DISKREC)) THEN -= NUM_INDEXF_EXT = F$EDIT("''F$EXTRACT(10,8,DISKREC)'","TRIM")+$READ/END=NOFRAG/ERROR=DISKERR DISK DISKRECN$IF (F$LOCATE("Files larger",DISKREC) .NE. F$LENGTH(DISKREC)) THEN GOTO NOFRAG$DISKFILE5 = "''DISKREC'"B$IF (F$LOCATE("INDEXF.SYS",DISKREC) .NE. F$LENGTH(DISKREC)) THEN -= NUM_INDEXF_EXT = F$EDIT("''F$EXTRACT(10,8,DISKREC)'","TRIM") $INDEXF_LOOP:+$READ/END=NOFRAG/ERROR=DISKERR DISK DISKRECN$IF (F$LOCATE("Files larger",DISKREC) .NE. F$LENGTH(DISKREC)) THEN GOTO NOFRAGB$IF (F$LOCATE("INDEXF.SYS",DISKREC) .NE. F$LENGTH(DISKREC)) THEN -= NUM_INDEXF_EXT = F$EDIT("''F$EXTRACT(10,8,DISKREC)'","TRIM")1$IF (NUM_INDEXF_EXT .EQ. 0) THEN GOTO INDEXF_LOOP$NOFRAG:$!SHOW SYM NUM_INDEXF_EXT $CLOSE DISK9$BITHOLES = F$EDIT("''F$EXTRACT(14,8,DISKHOLES)'","TRIM")8$BIGHOLE = F$EDIT("''F$EXTRACT(36,8,DISKHOLES)'","TRIM")8$TOTSIZE = F$EDIT("''F$EXTRACT(14,8,DISKSPACE)'","TRIM"):$FREESPACE = F$EDIT("''F$EXTRACT(36,8,DISKSPACE)'","TRIM")8$NUMHEADER = F$EDIT("''F$EXTRACT(1,4,DISKSUMM)'","TRIM"):$NUMEXTENTS = F$EDIT("''F$EXTRACT(23,4,DISKSUMM)'","TRIM")8$MOSTHEAD = F$EDIT("''F$EXTRACT(2,8,DISKFILE1)'","TRIM")$FFBUSYALL = 0<$DISKLOGICAL = F$EDIT("''F$EXTRACT(19,20,DISKNAME)'","TRIM")0$MEDIA = F$GETDVI("''DISKLOGICAL'","MEDIA_NAME")/$IF (F$TRNLNM("''MEDIA'_DEFINED") .NES. "YES") $THEN $WRITE SYS$OUTPUT -J"Disk threasholds for ''media' have not been defined, using ra92 defaults"$MEDIA = "DEF"$ENDIF$$MEDIA_DISK_FREE = 'MEDIA'_DISK_FREE&$MEDIA_BHOLE_FREE = 'MEDIA'_BHOLE_FREE$$MEDIA_FREE_FRAG = 'MEDIA'_FREE_FRAG$MEDIA_BHOLE = 'MEDIA'_BHOLE$$MEDIA_BHOLE_NUM = 'MEDIA'_BHOLE_NUM$$MEDIA_FILE_HEAD = 'MEDIA'_FILE_HEAD"$MEDIA_FILE_EXT = 'MEDIA'_FILE_EXT"$MEDIA_NUM_HEAD = 'MEDIAp I@$ DISKM010.D [DISK.D]FRAG_SUMMARY.COM;4W)'_NUM_HEAD.$MEDIA_INDEXF_EXTENTS = 'MEDIA'_INDEXF_EXTENTS$FILEFRAG = "NO"$DEFRAG = "NO" $SPACE = "NO"$WRITEIT = "NO"$NOSPACE = "NO"$FREESP = "NO"$SMHOLE = "NO"$HOLESIZE = "NO"$NUMHOLE = "NO"$EXTHEAD = "NO"$EXTWIN = "NO"$FFBUSY = "NO"$FFHEAD = "NO"$INDEXFEXT = "NO"$!NO FREE SPACE (DISK IS FULL) $NOSPACE:N$IF ((FREESPACE .NE. 0) .AND. (BIGHOLE .NE. 0) .AND. (BITHOLES .NE. 0)) THEN - GOTO FREESP$WRITEIT = "YES"$NOSPACE = "YES"$SPACE = "YES"+$!FREE SPACE < MEDIA_DISK_FREE OF DISK SIZE$FREESP:&$PCTFREE = (100 * FREESPACE) / TOTSIZE3$IF (PCTFREE .GT. MEDIA_DISK_FREE) THEN GOTO SMHOLE$WRITEIT = "YES"$FREESP = "YES"$SPACE = "YES"6$!LARGEST BITMAP HOLE < MEDIA_BHOLE_FREE% OF FREESPACE$SMHOLE:'$HOLEFREE = (100 * BIGHOLE) / FREESPACE7$IF (HOLEFREE .GT. MEDIA_BHOLE_FREE) THEN GOTO HOLESIZE$WRITEIT = "YES"8$IF (FREESPACE .GT. MEDIA_FREE_FRAG) THEN DEFRAG = "YES"$SMHOLE = "YES"*$!LARGEST BITMAP HOLE < MEDIA_BHOLE BLOCKS $HOLESIZE:'$HOLEFREE = (100 * BIGHOLE) / FREESPACE0$IF (BIGHOLE .GT. MEDIA_BHOLE) THEN GOTO NUMHOLE$WRITEIT = "YES"8$IF (FREESPACE .GT. MEDIA_FREE_FRAG) THEN DEFRAG = "YES"$HOLESIZE = "YES"*$!NUMBER OF BITMAP HOLES > MEDIA_BHOLE_NUM $NUMHOLE:5$IF (BITHOLES .LT. MEDIA_BHOLE_NUM) THEN GOTO EXTHEAD$WRITEIT = "YES"$NUMHOLE = "YES"$DEFRAG = "YES"7$!NUMBER OF FILES WITH EXTENT HEADERS > MEDIA_FILE_HEAD $EXTHEAD:5$IF (NUMHEADER .LT. MEDIA_FILE_HEAD) THEN GOTO EXTWIN$WRITEIT = "YES"$FILEFRAG = "YES"$EXTHEAD = "YES"B$!NUMBER OF FILES WITH EXTENTS > DISK WINDOW SIZE > MEDIA_FILE_EXT$EXTWIN:5$IF (NUMEXTENTS .LT. MEDIA_FILE_EXT) THEN GOTO FFHEAD$WRITEIT = "YES"$FILEFRAG = "YES"$EXTWIN = "YES"9$!FILE(S) WITH MEDIA_NUM_HEAD OR MORE HEADERS ON THE DISK$FFHEAD:3$IF (MOSTHEAD .LT. MEDIA_NUM_HEAD) THEN GOTO FFBUSY$WRITEIT = "YES"$FILEFRAG = "YES"$FFHEAD = "YES"3$!ONE OR MORE OF THE 5 WORST FILES IS A VPA HOTFILE$FFBUSY:'$IF (FFBUSYALL .EQ. 0) THEN GOTO INDEXF$WRITEIT = "YES"$!FILEFRAG = "YES"$FFBUSY = "YES"$INDEXF:@$IF (NUM_INDEXF_EXT .LT. MEDIA_INDEXF_EXTENTS) THEN GOTO CHECKIT$WRITEIT = "YES"$DEFRAG = "YES"$INDEXFEXT = "YES" $CHECKIT:+$IF (WRITEIT .EQS. "NO") THEN GOTO DISKDONE$WRITE OUTFILE " ""$!WRITE SUMMARY FILE FOR BAD DISKSO$IF ((DEFRAG .EQS. "YES") .OR. (SPACE .EQS. "YES")) THEN WRITE SUMFILE DISKNAME-$IF (DEFRAG .EQS. "YES") THEN WRITE SUMFILE -2"THIS DISK SHOULD BE REFRESHED USING BACKUP/IMAGE",$IF (SPACE .EQS. "YES") THEN WRITE SUMFILE -K"FILES SHOULD BE PURGED, DELETED OR MOVED TO ANOTHER DISK TO FREE UP SPACE"J$IF ((DEFRAG .EQS. "YES") .OR. (SPACE .EQS. "YES")) THEN WRITE SUMFILE " "$!WRITE DETAIL FOR BAD DISKS-$IF (DEFRAG .EQS. "YES") THEN WRITE OUTFILE -2"THIS DISK SHOULD BE REFRESHED USING BACKUP/IMAGE"/$IF (FILEFRAG .EQS. "YES") THEN WRITE OUTFILE -O"THIS DISK CONTAINS MANY BADLY FRAGMENTED FILES WHICH COULD IMPACT PERFORMANCE",$IF (SPACE .EQS. "YES") THEN WRITE OUTFILE -K"FILES SHOULD BE PURGED, DELETED OR MOVED TO ANOTHER DISK TO FREE UP SPACE"$WRITE OUTFILE " ".$IF (NOSPACE .EQS. "YES") THEN WRITE OUTFILE -"ERROR - DISK IS FULL"-$IF (FREESP .EQS. "YES") THEN WRITE OUTFILE ->"Warning - Disk has less than ''MEDIA_DISK_FREE'% empty space"-$IF (SMHOLE .EQS. "YES") THEN WRITE OUTFILE -Q"Largest chunk of freespace is less than ''MEDIA_BHOLE_FREE'% of total freespace"/$IF (HOLESIZE .EQS. "YES") THEN WRITE OUTFILE -?"Largest chunk of freespace is less than ''MEDIA_BHOLE' Blocks"0$IF (INDEXFEXT .EQS. "YES") THEN WRITE OUTFILE -S"There are more than ''MEDIA_INDEXF_EXTENTS' extents in indexf.sys, 1 header limit".$IF (NUMHOLE .EQS. "YES") THEN WRITE OUTFILE -J"Disk has ''MEDIA_BHOLE_NUM' or more bitmap holes (fragmented free space)".$IF (EXTHEAD .EQS. "YES") THEN WRITE OUTFILE -O"There are ''MEDIA_FILE_HEAD' or more files with extension headers on the disk"-$IF (EXTWIN .EQS. "YES") THEN WRITE OUTFILE -W"There are ''MEDIA_FILE_EXT' or more files with more extents than the disk window size"-$IF (FFHEAD .EQS. "YES") THEN WRITE OUTFILE -G"There are file(s) with ''MEDIA_NUM_HEAD' or more headers on this disk"-$IF (FFBUSY .EQS. "YES") THEN WRITE OUTFILE -;"The 5 most fragmented files on this disk are heavily used"$WRITE OUTFILE " "$WRITE OUTFILE DISKNAME$WRITE OUTFILE DISKHOLES$WRITE OUTFILE DISKSPACE$WRITE OUTFILE DISKFILES$WRITE OUTFILE DISKERR$WRITE OUTFILE DISKBUSY$WRITE OUTFILE DISKSUMM$WRITE OUTFILE DISKBLANK1$WRITE OUTFILE -K" The fragmentation summary report shows just the first 5 fragmented files"$WRITE OUTFILE DISKHEADER1$WRITE OUTFILE DISKHEADER2$WRITE OUTFILE DISKBLANK2$WRITE OUTFILE DISKFILE1$WRITE OUTFILE DISKFILE2$WRITE OUTFILE DISKFILE3$WRITE OUTFILE DISKFILE4$WRITE OUTFILE DISKFILE5$WRITE OUTFILE " " $DISKERR: $DISKDONE: $GOTO READREC$EROR:$DONE:$CLOSE SUMLIST$CLOSE OUTFILE$CLOSE SUMFILE$DELEX SYS$LOGIN:SUMLIST.TMP;*$EXIT:$PURGE/KEEP=3 FRAG_SUMMARY.*$EXIT-$!sample of fragmentation report for one diskM$!Disk analysis for _$2$DUA112: Logical name DISK178 from node <$!Bitmap holes 2 Largest hole 1422945 Pct busy 0.00<$!Disk size 2940951 Free space 2392392 Pct used 18%<$!Error cnt 0 Cluster size 3 Windows 7<$!Ave I/O /sec 0.00 Thruput /sec 0.00 Ave Que 0.001$! 0 Files > 1 header 0 Files > 7 extents$! E$! FILE HOTFILES FILEO$![DIRECTORY]FILENAME.EXT HEADERS NUM I/O EXTENTS FILESIZE*[DISK.D]REVIEW_ALL_DISKS.COM;2+, . / 4P - 0123KPWO 5367n1<^89GHJ 2$ ! COPYRIGHT (C) 1992 BY=$ ! DIGITAL EQUIPMENT CORPORATION, MAYNARD<$ ! MASSACHUSETTS. ALL RIGHTS RESERVED.$ !J$ ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDM$ ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSIONF$ ! OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIESI$ ! THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHERN$ ! PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.$ !M$ ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ANDN$ ! SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.$ !H$ ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS;$ ! SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.$ !N$ !***************************************************************************$ !J$!SIZE OF THE SMALLEST FILE TO INCLUDE IN THE BIGFILE LIST (50000 DEFAULT) $DEFINE/NOLOG BIGFILE_SIZE 50000$!P$!NUMBER OF WINDOWS WORTH OF EXTENTS NEEDED IN A FILE FOR IT TO BE ADDED TO THE $!HISTORY FILE$NUM_WINDOWS = 5*$@SYS$MANAGER:DISK_MANAGEMENT_LOGICALS.COM$$SAVE_DIR = F$ENVIRONMENT("DEFAULT")$SET DEFAULT DISK$MANAGEMENT:F$SUBMIT/NOPRINT/QUEUE=SYS$BATCH/AFTER="TODAY+7-02:00" REVIEW_ALL_DISKS $SET NOON$PURGE/KEEP=1 *.FRAG$RENAME *.FRAG *.LASTFRAG$PURGE/KEEP=1 *.LASTFRAG$ON ERROR THEN GOTO EXIT5$!GET INFORMATION NEEDED FOR REVIEW_DISK COMMAND LINE4$YESTERDAY = F$CVTIME("YESTERDAY","ABSOLUTE","DATE")"$START = "''YESTERDAY'" + ":08:30"#$FINISH = "''YESTERDAY'" + ":17:00"5$!CREATE FILE CONTAINING OUTPUT OF "SHOW DEV/MOUNTED"2$SHOW DEVICE/MOUNTED/OUTPUT=SYS$LOGIN:FRAGLIST.TMP%$OPEN FRAGLIST SYS$LOGIN:FRAGLIST.TMP$ON ERROR THEN GOTO DONE$!SKIP 3 HEADER LINES-$READ/END=DONE/ERROR=EROR FRAGLIST DISKRECORD-$READ/END=DONE/ERROR=EROR FRAGLIST DISKRECORD-$READ/END=DONE/ERROR=EROR FRAGLIST DISKRECORD $READREC:!$!READ FILE TO EXTRACT DISK NAMES-$READ/END=DONE/ERROR=EROR FRAGLIST DISKRECORD%$VOLUME = F$EXTRACT(48,15,DISKRECORD)$$DEVICE = F$EXTRACT(0,14,DISKRECORD)5$IF (DEVICE .EQS. " ") THEN GOTO READREC&$DSTATUS = F$EXTRACT(24,14,DISKRECORD)$!SHOW SYM DEVICE$!SHOW SYM DSTATUS5$IF VOLUME .EQS. "(remote mount) " THEN GOTO READREC4$IF DSTATUS .EQS. "HostUnavailabl" THEN GOTO READREC4$IF DSTATUS .EQS. "ShadowSetMembe" THEN GOTO READREC4$IF DSTATUS .EQS. "ShadowCopying " THEN GOTO READREC$!L$!1|O#$ DISKM010.D  [DISK.D]REVIEW_ALL_DISKS.COM;2P The following line can be used to remove all served disks from the displayI$!it should only be used in an MI cluster where you don't want to see the"$!disks local to the workstations.$!F$!IF (F$GETDVI("''DEVICE'","HOST_TYPE") .EQS. "VAX") THEN GOTO READREC$!9$IF (.NOT. F$GETDVI("''DEVICE'","MNT")) THEN GOTO READREC3$IF (F$GETDVI("''DEVICE'","SWL")) THEN GOTO READREC3$IF (F$GETDVI("''DEVICE'","FOR")) THEN GOTO READREC3$IF (F$GETDVI("''DEVICE'","DMT")) THEN GOTO READREC<$IF (.NOT. F$GETDVI("''DEVICE'","EXISTS")) THEN GOTO READREC$!SHOW SYM VOLUME$!SHOW SYM DEVICE$DEV = "''VOLUME'" - ":",$OUTFILE = F$EDIT("''DEV'","TRIM") + ".FRAG"+$!CREATE FRAGMENTATION REPORT FOR EACH DISK<$REVIEW_DISK/HISTWINDOW='NUM_WINDOWS'/OUT='OUTFILE' 'DEVICE' $GOTO READREC$EROR:@$WRITE SYS$OUTPUT "********************************************";$WRITE SYS$OUTPUT "ERROR READING LIST OF DISKS TO RUN FRAG"@$WRITE SYS$OUTPUT "********************************************"$DONE:$CLOSE FRAGLIST$DELEX SYS$LOGIN:FRAGLIST.TMP;*$EXIT: $SET NOON$PURGE/KEEP=2 *.FRAG $PURGE/KEEP=3 REVIEW_ALL_DISKS.*8$!PRODUCE THE REPORT FRAG_SUMMARY.RPT OF THE "BAD" DISKS$@FRAG_SUMMARY.COMF$MAIL/SUBJECT="DISKS REQUIRING ACTION" FRAG_SUMMARY.SUM "@DM_MAIL.DIS">$SEARCH/WINDOW=(0,100)/OUT=BIG_FILES.LIS *.FRAG "Files larger"$PURGE/KEEP=3 BIG_FILES.LIS$PURGE/KEEP=3 FRAG_SUMMARY.*$SET DEFAULT 'SAVE_DIR',$PURGE/KEEP=3 SYS$LOGIN:REVIEW_ALL_DISKS.LOG$EXIT*[DISK.D]REVIEW_DISK.COM;4+,./ 4Nh- 0123KPWO56 ?7`a1<^89GHJ2$ ! COPYRIGHT (C) 1992 BY=$ ! DIGITAL EQUIPMENT CORPORATION, MAYNARD<$ ! MASSACHUSETTS. ALL RIGHTS RESERVED.$ !J$ ! THIS SOFTWARE IS FURNISHED UNDER A LICENSE AND MAY BE USED AND COPIEDM$ ! ONLY IN ACCORDANCE WITH THE TERMS OF SUCH LICENSE AND WITH THE INCLUSIONF$ ! OF THE ABOVE COPYRIGHT NOTICE. THIS SOFTWARE OR ANY OTHER COPIESI$ ! THEREOF MAY NOT BE PROVIDED OR OTHERWISE MADE AVAILABLE TO ANY OTHERN$ ! PERSON. NO TITLE TO AND OWNERSHIP OF THE SOFTWARE IS HEREBY TRANSFERRED.$ !M$ ! THE INFORMATION IN THIS SOFTWARE IS SUBJECT TO CHANGE WITHOUT NOTICE ANDN$ ! SHOULD NOT BE CONSTRUED AS A COMMITMENT BY DIGITAL EQUIPMENT CORPORATION.$ !H$ ! DIGITAL ASSUMES NO RESPONSIBILITY FOR THE USE OR RELIABILITY OF ITS;$ ! SOFTWARE ON EQUIPMENT THAT IS NOT SUPPLIED BY DIGITAL.$ !N$ !***************************************************************************$ !J$!SIZE OF THE SMALLEST FILE TO INCLUDE IN THE BIGFILE LIST (50000 DEFAULT) $DEFINE/NOLOG BIGFILE_SIZE 50000*$@SYS$MANAGER:DISK_MANAGEMENT_LOGICALS.COM'$IF ("''P1'" .NES. "") THEN GOTO DISKOKG$READ/PROMPT="WHAT DISK TO ANALYZE FOR FRAGMENTATION (EX: DISK122:)?" - SYS$COMMAND P1$$IF ("''P1'" .EQS. "EXIT") THEN EXIT$$IF ("''P1'" .EQS. "exit") THEN EXIT $IF ("''P1'" .EQS. "") THEN EXIT$DISKOK:/$IF F$GETDVI("''P1'","EXISTS") THEN GOTO EXISTS>$WRITE SYS$OUTPUT "Device ''p1' does not exist on this system"$EXIT$EXISTS:$DEV = "''P1'" - ":",$OUTFILE = F$EDIT("''DEV'","TRIM") + ".FRAG"$ON ERROR THEN EXIT$REVIEW_DISK/OUT='OUTFILE' 'P1'$EXIT*[DISK.D]REVIEW_DISK_NOVPA.OBJ;5+,P . / 4 - 0123KPWO!56`571<^89GHJ6 REVIEW_DISK01 7-Jul-1993 09:58 7-Jul-1993 09:58DEC Fortran V6.0-1 REVIEW_DISKP INVALID HEADER (OFFSETS) FOR # INVALID HEADER (WORDS IN USE) FOR  INVALID HEADER (STRUCLEV) FOR + UNKNOWN RETRIEVAL POINTER FORMAT - EXITING Disk analysis for  Logical name   from node  Disk size  Free space  Pct used % Error cnt  Cluster size  Windows  Bitmap holes  Largest hole  Pct busy  Ave I/O /sec  Thruput /sec  Ave Que   Files > 1 header  Files >  extents # Files  Tot # Extent  Blks/file  19--                     FILE FILE FILE 3 HEADERS EXTENTS SIZE [DIRECTORY]FILENAME.EXT    V 19--    V      Files larger than  blocks on this disk are:  V- Modified Date Size [Directory]Filename.Ext REVIEW_DISKQDEVICENo Disk device specifiedWINDOWHISTWINDOWOUTPUTLNM$PROCESS_TABLEBIGFILE_SIZEDISK_HISTORY.DATFILE_HISTORY.DATARRAY LIMIT REACHED, REPORT MAY BE INCOMPLETEIDOFFSET = HIGHWATER = :BAD HEADER = @P8 Q\@@ ]@} 'V'Fmq8 8    CLI$PRESENT@ CLI$GET_VALUE@h  CLI$PRESENT@0 CLI$GET_VALUE@m h CLI$PRESENT@ x CLI$GET_VALUE@q CLI$PRESENT@ CLI$GET_VALUE@  SYS$TRNLNM@ SYS$TRNLNM@Q T FOR$OPEN@  d0 0 FOR$OPEN@  dhvXv`vD   xxXv`v   -Az|~ n yp ppPxPVV@VPO[`^ЫTˀԭԭԭԭVԭ؞5P`5Q:a5PޫL`5Qa5P`5Qa5Pޫ``5Qa5P`뀦5Qa5Pޫd`5Qa5P`5Qa5PޫP`5Qa5P`5Q*a5PޫH`5Qa5P@`5Qa5P`5Qޫha5P`5Qa5PޫD`5Qa5P`5Q6Q0a@6Pޫ`D6QaH6P`J6QaL6Pޫ`P6QaT6P@`V6Q2aX6P`\6Qޫpad6P`f6Qah6P˵`l6QkaT CLI$PRESENTP1d CLI$GET_VALUEЫ8PPxt LIB$SIGNALԭˌ CLI$PRESENTP˜ CLI$GET_VALUEPP˰ˬ LIB$SIGNALЫ\˸ЭЫX˴ LIB$CVT_DTBЫXPP LIB$SIGNAL@ CLI$PRESENTP CLI$GET_VALUEPP LIB$SIGNALЫЭ̫ LIB$CVT_DTBЫPP  LIB$SIGNAL CLI$PRESENTP, CLI$GET_VALUEPP@< LIB$SIGNALd6hT SYS$TRNLNMPkPPpl LIB$SIGNALk}kJ؝Z1yzѾI(hԹY ,lC# VRNmcJV{D:~B?շ41fJEO;bYNKVP?ɛcwHm\Ooa?K.ndt"0A]6p 6,P_JD$TG{(P[vłZ0A([%\ex> ="Kn1Fs>N ua4Ҕdg+jm BvJD^laϙy݀wPU.-2U}e6xC=' n9 :6G~RoL&F6kx B^eqQRn֔LLzXw }/ c _*.y Of;ZYSOq}euZZ)z W )YiU ʛhv,/&lgrgw"Behc!E^KqjǾMCa-X$!eMrxw/t捧lI|4Ji_ 's$՟k1 2Ay殁Q-tsr\/.LأYT9RUNO%2"4d| |`*v9JxJoBCB-J] VL8"_mWYH&^A%!Pexk `^)vdx:ݽỳ]vhVLX'YbQ"}V䵯9}5ZH6FٶYbqe|+Q'f{((6$ex.ӕ 7~y~jz)f] e=5|{e+ѯT4"%4ŠC5IMrW/+ k cG]8׌!O$(t5R,1A %isNPVm}uujOZ1cO@1aM"sEmT5A«JBX|uH56u*]]SC{$]Y C‘Jb]Rzl*xavY/wA8%dshX}SQgsvhm+ Q7L`pywu@o(zaD i &[KU1P>y,=@cihM6Pd5ZƸ$kr6B  )(52wFusE: WDR0r" S<y *ݚ!*&@M; 2i o8_eD̒OPY#tqK-ʖmn'gN _UyFm&D1<ýU)Z\S+PY-3R%&5>YR?}E 35LSJJx!/Y\,<#'KIT.͚{E׬>@21?M1YH "+qF4vk"aWg|Vw Y҈0I=?j5]ngD}HN%+ZPixqqb /էZul;v8ׯ5`.G0/]|*eth_4۞x#e=(6)UM'C}ع995Ι G#@)EK\E!!}ʐ,S_c.ƌ_gg+(Wi l+ .=iTZɓ2EVXURx40;/.! e=G#JGXD+ q6b[JC>'WN62=*iX%hF`p'{ut4ףfeB"z MBKA:94UY)hѨ<$Mp feiFp~ea:qxp&pWHUmef5:C6M`D0Bo u9DJlRo;~ >vmx-=5Oy,WHftLDu5p6  S*?p ,B?C%H ; i+O;L?k)MLCA),#TeQ0EP> 26SӁ l|gy:4`S?B,r&<),;k+ #J."OdNXUfdz~i{'o`DfY`gIƲn"~m\'U/W9;F$*CTI1fxQ3CkcjK_' .u,1"GJyM,=S㾻}[,c&ި69Tg`$<,u2x0 ŃZa'/>(:lC )(W;W>(=a_ ¶_:i.RBcd O8$aHK= (kP[9e.iCd88%RD&Aszq$%nt]5hݳDK>0'dFRRO@inw|fH#8ڣe1PNxqCYT&Sn;аT i<wtGRXp|jz!Mw5+le jLOU`L{B,2P/ೳ)MJ.~Ji._*;*@j5XG+ !_|tnbihIn kvaC(*wA媧iw ÓUZkJ!ߧÒ,\‹(ܱT Cp%?6tXNBG'voeSnAKSAsWwb&O1(TC`aqS0&-fR vaLbFW\g`t yY}A˺{wb x>ZVLoIX0wOUg#WKet1+*kȇAc_{&߲`ABc/cR! 6>{ ݷf#KzJd(|}pd)i 2Ѫg]1Ü%D#$Eu Ñ~ČH!3nl”u zb͘,Y̹eb.\հlߚ@-Ĉ;ۥFKhQ亭k45-q=/*Tfl:;;2zf'cfUD3%*^tPMS_nI/p(7%k BVustx߹U&.͊~u*0ozAν(uaud`7.92  cG O/` .7Tt=]1sae nF=- G A5S"gPKN3,=4r68sn.GYWg'|'?`57* ƱWNmQ2hCkq]dJԴqM -r˭Appr}"읪q .)k)GӪm_uE=uAR68!<(=JFz_j[7MuRFg55TPk ˣرRX{$L~C/L6/p(/z!T8bhd{5-sca'2J25p>80k|Hsf`dNf 9Ke`Ʃaٟ\_\6kR[z陷>u!SKqr{T DG ^ ISR]C=* PoCMҫH$Pe 껟yZ}DBpm/RxdAd>nYI(-y&t_uSW_%{U¼~J>KWU#~J]a /}UTl>]%MAA^P?t쾅 *Ftcal5^ۘyFDW|LM[iS.YXƭȉ A4u[]濰x4$sn/=U!biw%/7\#uu:s= *zR-kL(3=ٸњb -YS838E< qfe z ToufrQXeJqH덎` q 7">4kq՚pesfWQmZz`oJDjffkĤp|MC%j~mwj|<䈥[fRmJ+ff>(db`k6i۸ieFmbUA9ATlU{qn?g? MkTͣI-f9nz xP#^I,G,ٽ> I }Hѯ@|31+coB 0[KNNB44)EY8f1`MwZ5NGk<1_!6oo=Bm  Eϵ @Ll-] G? 6 G|]\CBM :D7pG ;9 uϴ7jtQ3a<=a  xeCO!Lhu ylXt;n: OLAd 0Y|fNpe)ҢUx.% \o i1}UI.PeRiHNMo=ȭ21!CAMnDr13ЋA=n ~]U*HMLC][H Vu>RngpL,Q9K 4^sz&=Ʈ ۻzNj,*RIO>]D@4 L*>[NN@NN6cCNb7^kR&Q'C$=:#7#Qu٭oL* .9Z##ِU8jeB*J)+[+Y2(l3 ba;@_%!*]BW^r- [:8^"8Ktؓe,x>WXC#G^u%9EYϝa$_H6AD:8KR;XF-j#+Y8KZLKnZS_-^^CRF`ta2EW6tUL/C]H;D(m]Y< ]UQG"UZ #0IKDT[el#y2>bem\C,N-S^T!TBs9 q$85J/IL'W6N0Fu`MOLqVO/B[pbÙ$HHW?.QSw VN95 ]SʶE7:\PDVWK t=tO=Qd}mYB0<1AYY%b~i.~ hHn[^N3[W']AU.oaad H';>A К[@U1chE0 7*F5 n4NՐ0A@Sū3m#mu!"Z WV .[;[Aۻ=YxQҦ(v%?Q{2$4'،A/NK6c0rp~BCE>ܩ6%`HFJVw %4ڸR96'){'6)ѧAid-ۯOwʩ)۪L'MEDIA'_FILE_HEAD"$MEDIA_FILE_EXT = 'MEDIA'_FILE_EXT"$MEDIA_NUM_HEAD = 'MEDIAp