Question & Answer
The first step is to collect and review a disk report. See GO DISKTASKS Overview
Review the resulting QPEZDISK spooled file output. If the "User directories" value is high, you should retrieve information regarding the storage allocated to the user directories. This will show which user directories in particular have allocated the most space.
First, a job is submitted that will execute RTVDIRINF on all user directories on the system. This can take some time, depending on many system configuration and usage variables:
===> SBMJOB CMD(RTVDIRINF DIR('/') INFFILEPFX(MYROOTDIR) SUBTREE(*ALL)
OMIT('/QNTC' '/QFilesvr.400' '/QDLS' '/QSYS.lib' '/QOPT')) JOB(RTVDIRINF)
The above command retrieves directory information about the root and all nested subdirectories and stores it in the database files MYROOTDIRO and MYROOTDIRD in library QUSRSYS.
1. If a particular user directory (For example, /QIBM) is suspected of allocating a lot of space, time can be saved by running the RTVDIRINF on that specific directory instead ((RTVDIRINF DIR('/QIBM')).
2. Any NFS mount points should be added to the omit list as well.
When finished successfully, the following message will be in the submitted job log:
- "Database files MYROOTDIRO and MYROOTDIRD created in library QUSRSYS. "
Those tables are then queried using an SQL interface such as IBM Access Client Solutions' "Run SQL Scripts" function.
To see total size retrieved within the SQL session, issue the following SQL statement:
SELECT sum(QEZALCSIZE), sum(QEZDTASIZE) FROM QUSRSYS.MyRootDirO
For a listing of directories with the largest directories listed first, issue the following SQL statement:
SELECT sum(O.QEZALCSIZE), D.QEZDIRNAM1, D.QEZDIRIDX FROM QUSRSYS.MyRootDirD d join QUSRSYS.MyRootDirO o on d.qezdiridx = o.qezdiridx GROUP BY d.qezdiridx, qezdirnam1 ORDER BY 1 desc, 3, 2
Sample output when the above SQL statements were run using ACS Run SQL Scripts functionality :
In the example above, disk cleanup could start with the user directory "/rick" and proceed down the list. Below is an example of deleting everything within directory '/rick' (including all sub-directories and files) :
===> RMDIR DIR('/rick/*') SUBTREE(*ALL)
***Use with caution!*** The above is functionally equivalent to the POSIX "rm -rf /rick/*" command. ***Use with caution!***
Note: The current version of IBM i Access Client Solutions, Run SQL Scripts function includes several IFS-related example scripts. They are available under the pull-down menu "Edit -> Insert from Examples..." and then search on "IFS"
Assistance creating customized SQL statements can be obtained via IBM i Customized Services.
08 April 2021