Orphaned Filespaces on TSM Server

Hi All,

I want to free up some of the space on my TSM server. So, I was wondering - is there a way to find out orphaned filespaces that can be deleted so that some of the tapes/storage can be freed by doing this. Is there any query using which I can find out the old filespaces and then I can decide which are required and which are not? I know i have to consider our company's retention policies, but first I want to come up with that list. Let me know how this can be done or any suggestions on doing this?

Who is Participating?
I wear a lot of hats...

"The solutions and answers provided on Experts Exchange have been extremely helpful to me over the last few years. I wear a lot of hats - Developer, Database Administrator, Help Desk, etc., so I know a lot of things but not a lot about one thing. Experts Exchange gives me answers from people who do know a lot about one thing, in a easy to use platform." -Todd S.

Something like "orphaned" filespaces doesn't exist. A filespace is always associated with a node.

Perhaps you're thinking of filespaces still residing in TSM storage whose corresponding filesystems have been deleted from client storage or have been excluded from backup in the past?

I have a script which displays all filespaces of selected or all nodes, ordered by node name and date of last backup of the respective filespace where the last backup is more that 2 days ago.
The first and only (but mandatory) parameter of the script can be a full nodename, part of a nodename or "%" for all nodes.
              10         select cast(NODE_NAME as char(18)) NODE, -
               12         cast(FILESPACE_NAME as char(32)) as "FSNAME     ",  -
               14         cast(FILESPACE_ID as char(3)) FSID, -
               16         cast(BACKUP_START as char(16)) START, -
               18         cast(BACKUP_END as char(16)) END, -
               20         cast(days(current_timestamp)-days(backup_end) as dec(4))
                           DAYS_AGO -
               30         from filespaces where NODE_NAME like upper('%$1%') -
               35         and    days(current_timestamp)-days(backup_end)>2 -
               40         order by NODE_NAME, 5

Open in new window

Experts Exchange Solution brought to you by

Your issues matter to us.

Facing a tech roadblock? Get the help and guidance you need from experienced professionals who care. Ask your question anytime, anywhere, with no hassle.

Start your 7-day free trial
virgo0880Author Commented:
Thanks for the query. I will check this.
virgo0880Author Commented:
If I run that query, whether it will put any load on the TSM server? Is it ok to run that query during the time backups are running or any migration or copy pool processes are running?
Price Your IT Services for Profit

Managed service contracts are great - when they're making you money. Yes, you’re getting paid monthly, but is it actually profitable? Learn to calculate your hourly overhead burden so you can master your IT services pricing strategy.

It's just a tiny query, no joins, no grouping, no aggregates, just a sort.

Depending on the amount of nodes and filespaces it will probably take less than two seconds.

And it doesn't interfere with any kind of server processing.
virgo0880Author Commented:
I am getting following error while running that query :

ANR2964E The reference 'NODE_NAME' is not a column of the SQL result table.

         ays(current_timestamp)-days(backup_end)>2 order by NODE_NAME, 5

Also, removed order by statement and it says nothing to show. Can you explain that query what each query in that statement means?

Please post the query exactly as you ran it, as well as the command line by which you started it.

If it's a script run

query script scriptname f=l

and copy and paste the output.

As for the explanation:

In the first five lines I select the named fields, defining the column headings and shortening the columns a bit so that they might fit into one line.

The sixth line computes the difference in days between today and the day of the last backup.

The seventh line belongs to line 6. This is a copy-and paste thing, maybe a blur in EE's web interface.

Line 8 indicates the table to query against ("filespaces") and contains the first selection criterion - the "like" nodename as entered on the command line. See my first comment for the syntax rules.

Line 9 contains the second selection criterion - the difference in days between today and the day of the last backup must be greater than 2.

Line 10 effects sorting and defines the sort fileds - the node name and the fifth output field, which is the end date of the last backup.
virgo0880Author Commented:
This is the query I am running from TSM GUI console:

select cast(NODE_NAME as char(18)) NODE, cast(FILESPACE_NAME as char(32)) as "FSNAME     ", cast(FILESPACE_ID as char(3)) FSID, cast(BACKUP_START as char(16)) START, cast(BACKUP_END as char(16)) END, cast(days(current_timestamp) -days(backup_end) as dec(4)) DAYS_AGO from filespaces where NODE_NAME like upper('%$1%') and days(current_timestamp)-days(backup_end)>2 order by NODE_NAME, 5

Also, I want to find out how much data is stalled on my TSM server for these nodes? Is there any query for that?

Your query looks good so far. Why do you put everything into one line?

I don't know much about the GUI, but aren't there macros or scripts?

If you run the above thing from the GUI - I guess that you can't specify command line parameters?
Entering such a parameter is mandatory with this script however, see my first comment.

So I assume that the GUI treats "$1" verbatim as the node name to search for.
Since you probably don't have such a node you won't get any results, of course.

If you can't create a script omit this selector completely, so -

... cast(days(current_timestamp) -days(backup_end) as dec(4)) DAYS_AGO from filespaces  where days(current_timestamp)-days(backup_end)>2 order by NODE_NAME, 5

What do you mean with "stalled" data? I never heard that term before.
virgo0880Author Commented:
Actually, I have taken out the list of nodes which are not active since more than a year and when I see "query filesp" for that node, I see filespaces which are lying there and the sizes for this filespaces are in GBs and TBs, so I was thinking if using query I can find out total size used by that node and delete that filespaces to reclaim that storage. Whether that make sense?

Also in your previous comments, you are talking about TSM scripts. Can  you guide me on how to create that sql query script in TSM?

If you are willing to go to the command line, yes.
virgo0880Author Commented:
Can you provide query for that ?

Also how do I create a tsm script for the query?
If you already have a list of inactive nodes, for what purpose did you want me to create a query?

Anyway, the total size used by a node can be seen with


You should run "AUDIT LICENSES" beforehand, to bring these values up to date.

The query command can be run at any time, it certainly won't do any harm.
"AUDIT LICENSES" starts a low priority background process which won't do any harm either.

Since we can't read values from external sources it will not be possible writing an SQL script to query against AUDITOCCUPANCY which could get the list of nodenames e.g. from a text file.

Best enter the "Q AUDITOCCPANCY" command node by node.

Creating a script in general:

First, create a flat file containing the desired statements.
Insert line breaks at convenient places, don't forget to add a "-"
as the continuation character at the end of each line,
except for the last line, of course!
See the script I posted, it contains line breaks and continuation characters.
Please remember that line 7 belongs to line 6, the line break inbetween is a mistake!

Place this file into a location the TSM server has access to, on Unix the /tmp directory on the machine running the TSM server will do. If you use FTP to transfer the file from e.g. Windows don't forget to specify "binary" transfer mode!

Now go to the server command line ("dsmadmc") and enter:

DEFINE SCRIPT scriptname DESC="My First Script" file=/tmp/scriptfile

Once created the script can be run from the dsmadmc command line with

RUN scriptname

Command line parameters are specified inside the script with $1, $2, $3 ... just the same way as in ksh or bash.

When running the script like this:

RUN scriptname param1 param2 param3

$1 inside the script will be replaced with "param1", $2 with "param2" etc.
virgo0880Author Commented:
Audit occupancy helps. I can easily generate the report using that command now.

virgo0880Author Commented:
I created the script and tried, but getting following error:

tsm: TSM>query script query1 f=l

Name           Line       Command
----------     ------     ------------------------------------------------------------
QUERY1         1          select cast(NODE_NAME as char(18)) NODE, -
               6          cast(FILESPACE_NAME as char(32)) as "FSNAME     ",  -
               11         cast(FILESPACE_ID as char(3)) FSID, -
               16         cast(BACKUP_START as char(16)) START, -
               21         cast(BACKUP_END as char(16)) END, -
               26         cast(days(current_timestamp)-days(backup_end) as dec(4))
                           DAYS_AGO -
               31         from filespaces where NODE_NAME like upper('%$1%') -
               36         and    days(current_timestamp)-days(backup_end)>2 -
               41         order by NODE_NAME, 5

tsm: TSM>

tsm: TSM>run query1
ANR1464E RUN: Command script QUERY1, line 1, parameter 1 was not specified: select cast(NODE_NAME as char(18)) NODE, cast(FILESPACE_NAME as
char(32)) as "FSNAME     ",  cast(FILESPACE_ID as char(3)) FSID, cast(BACKUP_START as char(16)) START, cast(BACKUP_END as char(16)) END,
cast(days(current_timestamp)-days(backup_end) as dec(4)) DAYS_AGO from filespaces where NODE_NAME like upper('%$1%') and
days(current_timestamp)-days(backup_end)>2 order by NODE_NAME, 5.
ANR1463E RUN: Command script QUERY1 completed in error.
ANS8001I Return code 3.

also tried specifying node name as an argument, but different error :

tsm: TSM>run query1 node1
ANR2964E The reference 'NODE_NAME' is not a column of the SQL result table.

         ays(current_timestamp)-days(backup_end)>2 order by NODE_NAME, 5

ANR1463E RUN: Command script QUERY1 completed in error.
ANS8001I Return code 3.
As for the parameter - I told you several times that specifying a parameter
is mandatory with this script!

Specify "%" for all nodes.

I have no explanation for the second error, the script works for me.

Anyway, replacing NODE_NAME with "1" in the order clause should help.

Run this on the dsmadmc command line:

upd scr query1 "order by 1, 5" line=41

and retry (with a parameter!)
virgo0880Author Commented:
Thanks that worked.

One more thing - what is the difference between "query auditoccupancy" and "query filespaces" as I see there is a difference in space utilization for the nodes using both commands. Query auditocc shows some nodes higher in space utilization while some lower. Also, I used "query filespace nodename" and added the space utilization for all the filespaces from each node. Why there is a difference in number between these two commands? do you have any idea about it?

Q Filespaces shows the volumes making up  client storage (capacity and used percentage) which are eligible for backup as seen by the TSM client and reported to the TSM server. Filespaces as such don't occupy any TSM server space.

Q Occupancy shows the amount of TSM server storage actually used for backing up these filespaces.
Occupancy of a given client is usually much higher than the sum of the client's used filespace capacity  due to versioning.
virgo0880Author Commented:
So, if I want to free up that space for the nodes which are not active since many days. I can just use "del filespace nodename *" and get that space back  or is there a different command for deleting the occupancy of the filespaces on TSM server storage?

I thought that "query filespaces" will show the space used by node on TSM Server and using "del filespace" I can reclaim that space.. Whether this is true?

DEL FILESPACE is quite correct to delete backup/archive data from server storage.

Although a "filespace" is basically client storage (not server storage) TSM organizes its server storage under a structure derived from and related to the client's filespace names.

"DEL FILESPACE" is a bit misleading, I admit, because this command does not delete client storage but backed up client data in TSM server storage.

Regard "DEL FILESPACE" as a short form for "delete backed up filespace data" (this latter is not a command, it's my own "pseudo code"!)
virgo0880Author Commented:
Got it, one last question. I have one node which shows like 11 to 12 TB of data on TSM tape storage pool and I have got a go ahead for deleting and removing the filespaces for that node. When I do "query nodedata nodename" for that node, I see a lot of tapes being used by that node. So if I remove the data for that node and the node itself (by deleting all the filespaces of that node), whether I will get all that tapes back as "Scratch", is that right?

I have attached the output of "query nodedata" command for that node.

Volume Name               Storage      Device      Estimated    Pct   Volume 
                          Pool Name    Class Name   Capacity   Util   Status 
------------------------  -----------  ----------  ---------  -----  --------
005013                    TBACK2       TDEV3592    626,941.0   35.6    Full  
005026                    TBACK2       TDEV3592    272,308.8   76.3    Full  
005028                    TBACK2       TDEV3592    325,466.5   99.1    Full  
005031                    TBACK2       TDEV3592    645,871.3   47.8    Full  
005045                    TBACK2       TDEV3592    336,583.9   76.3    Full  
005068                    TBACK2       TDEV3592    446,623.2   36.5    Full  
005080                    TBACK2       TDEV3592    270,235.4   92.8    Full  
005086                    TBACK2       TDEV3592    413,262.6   59.1    Full  
005094                    TBACK2       TDEV3592    321,135.3   50.8    Full  
005097                    TBACK2       TDEV3592    348,515.2   83.5    Full  
005135                    TBACK2       TDEV3592    419,104.2   54.3    Full  
005141                    TBACK2       TDEV3592    312,462.2   37.1    Full  
005145                    TBACK2       TDEV3592    521,453.2   40.4    Full  
005181                    TBACK2       TDEV3592    900,000.0   26.4  Filling 
005184                    TBACK2       TDEV3592    294,067.9   69.2    Full  
005186                    TBACK2       TDEV3592    322,946.8   90.0    Full  
005217                    TBACK2       TDEV3592    446,572.7   73.6    Full  
005235                    TBACK2       TDEV3592    310,758.2   91.4    Full  
005310                    TBACK2       TDEV3592    328,658.2   99.8    Full  
005316                    TBACK2       TDEV3592    340,735.5   83.2    Full  
005324                    TBACK2       TDEV3592    331,246.7   61.4    Full  
005337                    TBACK2       TDEV3592    319,216.8   93.0    Full  
005353                    TBACK2       TDEV3592    876,436.0   36.2    Full  
005358                    TBACK2       TDEV3592    378,829.9   78.4    Full  
005370                    TBACK2       TDEV3592    320,585.1   38.1    Full  
005373                    TBACK2       TDEV3592    409,968.7   84.6    Full  
005377                    TBACK2       TDEV3592    561,882.7   54.2    Full  
005384                    TBACK2       TDEV3592    598,458.2   38.1    Full  
005413                    TBACK2       TDEV3592    467,805.3   47.8    Full  
005426                    TBACK2       TDEV3592    327,788.9   40.3    Full  
005436                    TBACK2       TDEV3592    429,058.1   77.6    Full  
005456                    TBACK2       TDEV3592    389,305.3   37.5    Full  
005461                    TBACK2       TDEV3592    310,631.8   84.5    Full  
005467                    TBACK2       TDEV3592    505,025.0   32.9    Full  
005468                    TBACK2       TDEV3592    397,278.1   96.6    Full  
005472                    TBACK2       TDEV3592    336,249.6   74.6    Full  
005477                    TBACK2       TDEV3592    300,855.5   61.4    Full  
005496                    TBACK2       TDEV3592    390,289.7   33.9    Full  
005501                    TBACK2       TDEV3592    329,405.4   98.0    Full  
005521                    TBACK2       TDEV3592    339,700.4   98.3    Full  
005566                    TBACK2       TDEV3592    363,287.5  100.0    Full  
005574                    TBACK2       TDEV3592    320,891.3   70.9    Full  
005597                    TBACK2       TDEV3592    354,104.2   95.0    Full  
005620                    TBACK2       TDEV3592    310,130.0   84.0    Full  
005646                    TBACK2       TDEV3592    336,251.8   85.8    Full  
005686                    TBACK2       TDEV3592    461,031.5   81.3    Full  
005689                    TBACK2       TDEV3592    350,911.4   64.9    Full  
005739                    TBACK2       TDEV3592    532,548.3   44.4    Full  
005756                    TBACK2       TDEV3592    292,996.7   71.8    Full  
005773                    TBACK2       TDEV3592    470,994.7   98.7    Full  
005779                    TBACK2       TDEV3592    326,306.4   96.9    Full  
005806                    TBACK2       TDEV3592    419,841.0   60.5    Full  
005819                    TBACK2       TDEV3592    358,584.3   41.1    Full  
005821                    TBACK2       TDEV3592    318,441.9   87.8    Full  
005840                    TBACK2       TDEV3592    331,333.9   66.2    Full  
005858                    TBACK2       TDEV3592    364,738.5   49.5    Full  
005866                    TBACK2       TDEV3592    573,260.0   51.8    Full  
005880                    TBACK2       TDEV3592    362,064.7   63.5    Full  
005893                    TBACK2       TDEV3592    307,101.3   68.3    Full  
005904                    TBACK2       TDEV3592    268,650.0   63.4    Full  
005920                    TBACK2       TDEV3592    335,009.0   77.8    Full  
005927                    TBACK2       TDEV3592    325,488.4   67.4    Full  
005929                    TBACK2       TDEV3592    243,218.3   31.7    Full  
005935                    TBACK2       TDEV3592    401,239.2   44.6    Full  
005953                    TBACK2       TDEV3592    320,726.3   72.7    Full  
005958                    TBACK2       TDEV3592    303,882.5   96.7    Full  
005961                    TBACK2       TDEV3592    296,214.7   48.8    Full  
006005                    TBACK2       TDEV3592    346,129.0   50.4    Full  
006008                    TBACK2       TDEV3592    432,490.8   32.7    Full  
006031                    TBACK2       TDEV3592    328,684.8   61.5    Full  
006045                    TBACK2       TDEV3592    478,331.8   68.6    Full  
006122                    TBACK2       TDEV3592    532,128.0   41.0    Full  
006260                    TBACK2       TDEV3592    363,472.5  100.0    Full  
006261                    TBACK2       TDEV3592    345,595.1   71.2    Full  
006386                    TBACK2       TDEV3592    900,000.0   19.1  Filling 

Open in new window

Is this really "Q NODEDATA" output?
Or is it rather "Q VOL"?

With Q NODEDATA you should see a column "Physical space occupied" and that's the space you will get back after "DEL FILESPACE".

If a tape volume is full with only that node's data it will become scratch, if there is also data of other nodes on it then it will obviously not become scratch, it will just become "emptier", or "less full" if you prefer.

Btw. the space will be freed immediately, you won't have to wait for the next "Expire Inventory" run.
virgo0880Author Commented:
Ohh sorry that was the output of q vol. I have attached the output of q nodedata for that node. The output is showing tapes from Primary as well as Copy storage pools, so for primary the space will be available immediately,

but what about Copy Storage pool tapes, that will be freed when the reclamation will start or expire inventory will start ?

file2node            005013                           TBACK2             19,629.4
file2node            005026                           TBACK2             207,646.
file2node            005028                           TBACK2             322,465.
file2node            005031                           TBACK2             38,515.8
file2node            005037                           CBACK2             149,500.
file2node            005057                           CBACK2             189,978.
file2node            005058                           CBACK2             187,484.
file2node            005068                           TBACK2              641.72 
file2node            005086                           TBACK2             20,868.3
file2node            005094                           TBACK2             163,261.
file2node            005125                           CBACK2             330,304.
file2node            005135                           TBACK2             4,204.52
file2node            005149                           CBACK2             277,937.
file2node            005166                           CBACK2             3,477.83
file2node            005217                           TBACK2             325,961.
file2node            005220                           CBACK2             223,455.
file2node            005263                           CBACK2             199,027.
file2node            005276                           CBACK2              153.76 
file2node            005281                           CBACK2             183,345.
file2node            005301                           CBACK2             264,185.
file2node            005310                           TBACK2             327,991.
file2node            005316                           TBACK2             283,650.
file2node            005329                           CBACK2             280,464.
file2node            005337                           TBACK2             296,940.
file2node            005353                           TBACK2             316,931.
file2node            005358                           TBACK2             259,937.
file2node            005370                           TBACK2             122,067.
file2node            005373                           TBACK2             346,707.
file2node            005377                           TBACK2             26,482.6
file2node            005380                           CBACK2             208,573.
file2node            005384                           TBACK2             228,011.
file2node            005413                           TBACK2             38,108.6
file2node            005418                           CBACK2             79,497.4
file2node            005426                           TBACK2             132,183.
file2node            005431                           CBACK2             269,875.
file2node            005444                           CBACK2             206,897.
file2node            005456                           TBACK2             145,928.
file2node            005467                           TBACK2             166,339.
file2node            005468                           TBACK2             213,197.
file2node            005477                           TBACK2             184,666.
file2node            005501                           TBACK2             322,832.
file2node            005521                           TBACK2             333,952.
file2node            005528                           CBACK2             119,713.
file2node            005550                           CBACK2             182,398.
file2node            005555                           CBACK2             198,265.
file2node            005566                           TBACK2             231,840.
file2node            005574                           TBACK2             227,616.
file2node            005584                           CBACK2             20,347.3
file2node            005597                           TBACK2             204,894.
file2node            005601                           CBACK2             344,542.
file2node            005608                           CBACK2             271,234.
file2node            005646                           TBACK2             288,654.
file2node            005657                           CBACK2             38,472.1
file2node            005678                           CBACK2             38,108.6
file2node            005683                           CBACK2             26,941.7
file2node            005686                           TBACK2             374,704.
file2node            005713                           CBACK2             186,645.
file2node            005739                           TBACK2             92,271.6
file2node            005752                           CBACK2             244,646.
file2node            005756                           TBACK2             210,330.
file2node            005763                           CBACK2              350.09 
file2node            005764                           CBACK2             246,892.
file2node            005773                           TBACK2             335,948.
file2node            005776                           CBACK2             308,768.
file2node            005779                           TBACK2             316,104.
file2node            005781                           CBACK2             444,562.
file2node            005790                           CBACK2             295,749.
file2node            005794                           CBACK2             299,298.
file2node            005799                           CBACK2             337,468.
file2node            005821                           TBACK2             279,695.
file2node            005832                           CBACK2             214,956.
file2node            005840                           TBACK2             219,384.
file2node            005843                           CBACK2             332,388.
file2node            005845                           CBACK2             226,461.
file2node            005857                           CBACK2             249,282.
file2node            005866                           TBACK2             297,131.
file2node            005880                           TBACK2             229,745.
file2node            005886                           CBACK2             102,240.
file2node            005889                           CBACK2             336,383.
file2node            005893                           TBACK2             209,813.
file2node            005920                           TBACK2             260,784.
file2node            005927                           TBACK2             219,297.
file2node            005929                           TBACK2             77,188.1
file2node            005933                           CBACK2             283,045.
file2node            005935                           TBACK2             179,021.
file2node            005944                           CBACK2             189,914.
file2node            005947                           CBACK2             148,088.
file2node            005953                           TBACK2             233,141.
file2node            005958                           TBACK2             293,996.
file2node            005960                           CBACK2             25,498.5
file2node            005979                           CBACK2             176,054.
file2node            005980                           CBACK2             20,868.3
file2node            006005                           TBACK2             174,491.
file2node            006008                           TBACK2             78,549.6
file2node            006031                           TBACK2             202,207.
file2node            006045                           TBACK2             325,986.
file2node            006061                           CBACK2             176,005.
file2node            006122                           TBACK2             218,433.
file2node            006139                           CBACK2              675.39 
file2node            006190                           CBACK2              106.52 
file2node            006193                           CBACK2             273,818.
file2node            006237                           CBACK2             118,442.
file2node            006245                           CBACK2             351,378.
file2node            006260                           TBACK2             325,943.
file2node            006261                           TBACK2             206,947.
file2node            006275                           CBACK2             348,824.
file2node            006276                           CBACK2             295,690.
file2node            006298                           CBACK2             444,015.
file2node            006315                           CBACK2             228,493.
file2node            006386                           TBACK2             55,185.2

Open in new window

It will also be freed immediately.

Of course for tapes only partially freed (primary or copy doesn't matter) a space reclamation will take place (if the threshold is reached), just like after an "expire inventory" run.
virgo0880Author Commented:
Thanks for the explanation.
virgo0880Author Commented:
Is it possible to see what all tapes got freed up by deleting the filespaces of the node or any way of tracking that?
dsmadmc -id=userid -pass=password -console

Watch the console output and look for

Scratch volume volser has been deleted from storage pool poolname

You can issue Q PR regularly and watch the "DELETE FILESPACE" process, telling you how many items already got deleted.

Or run

select count(*) from libvolumes where STATUS='Scratch'
regularly to see the number of scratch volumes grow.
virgo0880Author Commented:
Thanks much for your help on this.Giving points.
virgo0880Author Commented:
But one thing I noticed that after clearing up all the filespaces and nodes, my db backup is taking half an hour more to what was it was taking before like before the db backup (snapshot and full backup) use to take 1.5 hours to complete but now it is taking 2.5 hours, even though there is a reduction in DB size as I deleted the filespaces and nodes. What can be the reason for that?

I can open a new thread for that. But just want to discuss this with you before that? Let me know if you want new thread for that?

I fear I can't help you with this last issue.

I'm running TSM 6 for quite a while now, and this version sits on DB2 instead of the old proprietary thing.

DB2 is self-reorganizing, so there is never any trouble in that aspect.

I can imagine that the database pointers have to go long distances to get the backup in line, because of the gaps resulting from your big delete action.

I could further imagine that a database reorganization could help, but this would require a (perhaps long) downtime:

Here are the steps:

- Halt the server

Here are more details and the exact command formats:

As I wrote, it's only a guess and I don't know if reorgainizing the DB will indeed reduce backup times, but I assume so.
virgo0880Author Commented:
Thanks for pointing out in that direction. I was thinking the same way. I will look into that.
It's more than this solution.Get answers and train to solve all your tech problems - anytime, anywhere.Try it for free Edge Out The Competitionfor your dream job with proven skills and certifications.Get started today Stand Outas the employee with proven skills.Start learning today for free Move Your Career Forwardwith certification training in the latest technologies.Start your trial today
Storage Software

From novice to tech pro — start learning today.