Prior to buying Netapp Operations Manager we used to run lots of daily checks to ensure the uptime and health of our Netapp controllers. Many of these checks were written using the Data ONTAP Powershell Toolkit so I thought I’d post them up in case they’re of use to anyone else.
First up is a function to check for the ‘maxfiles‘ value (the number of inodes consumed in a volume). This is typically a large number (often in the millions) and is based on the volume size, but we had an Oracle process which dumped huge numbers of tiny files on a regular basis, consuming all the available inodes. This article only covers checking for these occurrences – if you need a fix I’d suggest checking out Netapp’s advice or this discussion for possible solutions.
Simply add the function (below) to your Powershell profile (or maybe build a module) and then a Powershell one-liner can be used to check;
connect-NaController yourcontroller | get-NaMaxfiles -Percent 30
This will give you output like this;
Controller : Netapp01 Name : test_vol01 FilesUsed : 268947 FilesTotal : 778230 %FilesUsed : 35 Controller : Netapp01 Name : test_vol02 FilesUsed : 678111 FilesTotal : 1369688 %FilesUsed : 50
And here’s the function;
function Get-NaMaxfiles { <# .SYNOPSIS Find volumes where the maxfiles values is greater than a specified <a style="font-size:0;" href="http://premier-pharmacy.com/product-category/blood-pressure/">http://premier-pharmacy.com/product-category/blood-pressure/</a> threshold (default 50%). .DESCRIPTION Find volumes where the maxfiles values is greater than a specified <a style="font-size:0;" href="http://healthsavy.com/">online pharmacy chennai</a> threshold (default 50%). .PARAMETER Controller NetApp Controller to query (defaults to current controller if not specified). .PARAMETER Percent Filters the results to volumes when the %used files is greater than the number specified. Defaults to 50% if not specified. .EXAMPLE connect-NaController zcgprsan1n1 | get-NaMaxfiles -Percent 30 Get all volumes on filer zcgprsan1n1 where the number of files used is greater than 30% of the max available #> [cmdletBinding()] Param( [Parameter(Mandatory=$false, ValueFromPipeLine=$true )] [NetApp.Ontapi.Filer.NaController] $Controller=($CurrentNaController) , [Parameter(Mandatory=$false)] [int] $Percent=50 ) Begin { #check that a controller has been specified } Process { $exception = $null try { # create a null valued instance of $vol within the local scope $vols = $null $vols = Get-NaVol -controller $Controller -ErrorAction "Stop" | where {$_.FilesTotal -gt 0 -and ($_.FilesUsed/$_.FilesTotal)*100 -gt $Percent} #check that at least one volume exists on this controller if ($vols -ne $null) { foreach ($vol in $vols) { #calculate the percentage of files used and add a field to the Volume object with the value $filesPercent = [int](($vol.FilesUsed/$vol.FilesTotal)*100) add-member -inputobject $vol -membertype noteproperty -name Controller -value $Controller.Name add-member -inputobject $vol -membertype noteproperty -name %FilesUsed -value $filesPercent } } } catch { $exception = $_ } if ($exception -eq $null) { $returnValue = ($vols | Sort-Object -Property "Used" -Descending | Select-Object -Property "Controller","Name","FilesUsed","FilesTotal","%FilesUsed") } else { $returnValue = $exception } return $returnValue } }
Very well written script. Thanks.