THE MYSTERIOUS CASE OF 'FREE' SPACE BECOMING 'USED' by Eugene and Vladimir Volokh, VESOFT Published by WHAT'S UP DOCumentation, Robelle's Newsletter, Mar 1995. Once upon a time (in July of 1988, to be exact) there was a question in INTERACT about a file with the record size of one sector, EOF=529 but the size in sectors 300. "Is this some super compression algorithm HP is using? Can I make all my files this small?" -- the user asked. This question was answered (by VESOFT): it appears that MPE might create "holey" files, i.e. files with some extents inside the files not allocated, because records were not written there yet. There is some interesting "feature" of such files... For the inquisitive MPE/iX user who cares about managing disc space -- and who shouldn't? -- we propose the following: First, let's build a file (and, as always, call it X) :build X :listf X,2 ACCOUNT= VESOFT GROUP= PUB FILENAME CODE ------------LOGICAL RECORD----------- ----SPACE---- SIZE TYP EOF LIMIT R/B SECTORS #X MX X 128W FB 0 1023 1 0 0 * As we can see, the file is empty -- EOF=0, SECTORS=0 (even though there is, somewhere, some space occupied by the file label), #X=0 (eXtents given to the file); MX=* means that the MPE/iX file system has not set the Maximum eXtents number. Now, let's write some information to this file -- not sequentially starting from the beginning, but directly (by record number). Maybe your application is working this way already... For the purpose of this exercise, we can use MPEX's handy file I/O functions :main.pub.vesoft 'calc vefwritedir("X,old;acc=inout","LAST",1022)' :listf X,2 ACCOUNT= VESOFT GROUP= PUB FILENAME CODE ------------LOGICAL RECORD----------- ----SPACE---- SIZE TYP EOF LIMIT R/B SECTORS #X MX X 128W FB 1023 1023 1 256 1 * We've written only one -- but the last -- record to this file and see what has happened: the end of file is equal to the file limit (which does NOT mean that X is full!) and one extent of 256 sectors becomes part of the file. And now, the most interesting fact -- let's just read (not write!) our file X by simply :PRINTing it (try also :FCOPY or :EDITOR) :print x>$null :listf X,2 ACCOUNT= VESOFT GROUP= PUB FILENAME CODE ------------LOGICAL RECORD----------- ----SPACE---- SIZE TYP EOF LIMIT R/B SECTORS #X MX X 128W FB 1023 1023 1 1024 4 * Note the final number of sectors and number of extents: there are FOUR extents allocated to the file and they take a whopping 1024 secto Just imagine how much space can be moved from 'free' to 'in use' if you have on your HP3000 more files like that with more and bigger holes... Try this on an MPE/V box and you'll get a different result (which is the one you probably expected to begin with). And check your system using MPEX's command %LISTF @.@.@(isfixed and recsize*eof/256>sectors),2