Saturday, 28 December 2013

Final Post 2013!

Another year and another company (only the third company since September 2005 mind you - the second company only lasted 8 months {even though the job was awesome}, my stint at the third has already lasted 2 months more, and hopefully it will last considerably longer!) It’s been a busy year on the blog; this post will mark my 157th post of 2013, and the blog’s seen some changes with going from a generalist IT Infrastructure type blog prior to February 2013, to a more specialist blog focused around NetApp technologies. It’s certainly apparent that my current role is focused heavily on NetApp technologies, and this is a great thing for me as I’ve always felt like a storage guy at heart, and always loved NetApp storage as the number one storage for me!

General Statistics

Note: All the statistics below are taken from 28th December 2013!

Pageviews = 1’010’238 since 24th March 2010
Visits (courtesy of clustrmaps) = 471’695 since 18th April 2010
Alexa global rank = 1’096’553

Image: Top 10 visitor sources 21st April 2013 to 28th Dec 2013

Pageviews Statistics

June 2013 did see an awesome 55’444 pageviews in one month … the blog’s slipped a bit since then though.

Image: Monthly pageviews over time (the x-axis scale is wrong, skipping even years!)

And the reason for the slip might be a lot down to the all-time best pageviewed post, seeing its viewings slipping off dramatically:

Image: December 28th 2013’s Top 10 most pageviewed posts of all time, with no. 1 the “VCP510 Exam Cram Notes” on 66972 pageviews

Image: Top 10 most pageviewed posts in the month from 29th November 2013 to 28th December 2013

It’s always kind of curious when a post does well. Not quite sure why an HP EVA8000 post from July 2012 is doing so well currently!?

Future Content

Definitely more NetApp content, hopefully there’ll be room/time for some more generalist stuff too. Not sure whether becoming a more specialist NetApp blog is good for viewing figures or not - one cannot fail to notice that lots of people really like blogging about NetApp, so this blog might get lost as just another blog about NetApp - perhaps that would make an excellent new title "Just Another Blog About NetApp". The NetApp community is so strong, and NetApp are blessed with having fantastic and interesting technology that people just love to write about.

As for pursuing records … well, the day job comes first, if I manage a few good posts in 2014, I’ll be happy!

Thank You

A massive thank you to everyone who has read from this blog, posted comments here, and pointed links in this direction. And a big thank you to my job for providing me with interesting ideas for things to write about.

And Finally …

I wish you all the best for the New Year and I hope all your dreams come true. Have a great 2014!

Image: Absolutely gorgeous “Happy New Year 2014” Wallpaper from

PS Doesn’t 2014 look like a really nice number!? Must be the 2 x 7 = 14 thing - there’s something beautiful about that number 7!

SnapMirror Snaps - How Many? Ok to Delete? Resync on Other Snaps? & More …

In the following post, via examples, we answer a few questions about SnapMirror. This is SnapMirror in Clustered Data ONTAP.


Q1: How many “snapmirror.” snaps should there be in a 1 to 1 SnapMirror?
Q2: How many “snapmirror.” snaps should there be in a 1 to many fan-out SnapMirror?
Q3: How to pause a SnapMirror relationship?
Q4: Can we resync on a non “snapmirror.” named snapshot?
Q5: What “snapmirror.” snaps and others can we delete?

The examples below are taken from a lab where the SVM vs1 holds the source volumes, and vs2 holds the destination volumes. For volume SnapMirror fan-out examples, we have the SVM vsa which holds the source volume, and vsb and vsc hold the destination volumes.

We’re only considering Volume SnapMirror - since Clustered ONTAP does not have Qtree SnapMirror - and Volume SnapMirror Fan-Out. There is no Qtree SnapMirror Fan-In without Qtree SnapMirror (there is Vserver Fan-In - that is - volumes from many different Vservers can fan into one Vserver but different volumes!)


Q1: How many “snapmirror.” snaps should there be in a 1 to 1 SnapMirror?

Assuming the SnapMirror is not updating at the time of checking, there should be one “snapmirror.” snapshot on the source, and two “snapmirror.” snapshots on the destination, as below:

::> snapshot show -snapshot *snapmirror* -volume vs1_cifs_vol1 -fields snapshot
vserver volume        snapshot
------- ------------- ------------------------------------------------------------------------------
vs1     vs1_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484680.2013-12-28_133001

::> snapshot show -snapshot *snapmirror* -volume vs2_vs1_cifs_vol1 -fields snapshot
vserver volume            snapshot
------- ----------------- ------------------------------------------------------------------------------
vs2     vs2_vs1_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484680.2013-12-28_132500
vs2     vs2_vs1_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484680.2013-12-28_133001

Why one on the source and two on the destination?

Well, prior to updating the SnapMirror, the source has to take a “snapmirror.” snapshot, so there’s two on the source at the start of the SnapMirror transfer, and these are replicated to DR. Once the SnapMirror transfer is complete, the source deletes the oldest “snapmirror.” snapshot leaving only one, but the destination retains the two.

Q2: How many “snapmirror.” snaps should there be in a 1 to many fan-out SnapMirror?

Assuming the SnapMirror is not updating at the time of checking:
On the source, for each fan-out Volume SnapMirror relationship, there will be one “snapmirror.” reference snapshot
On the destinations, it’s going to depend on whether the SnapMirror updates are occurring at the same time, and in that case, which relationship started first. It is always going to be at least one more that the number of SnapMirror fan-out relationships as in the example below:

::> snapshot show -snapshot *snapmirror* -volume vsa_cifs_vol1 -fields snapshot
vserver volume        snapshot
------- ------------- ------------------------------------------------------------------------------
vsa     vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_6_2147484687.2013-12-28_133000
vsa     vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_7_2147484688.2013-12-28_133000
2 entries were displayed.

::> snapshot show -snapshot *snapmirror* -volume vsb_vsa_cifs_vol1 -fields snapshot
vserver volume            snapshot
------- ----------------- ------------------------------------------------------------------------------
vsb     vsb_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_6_2147484687.2013-12-28_132500
vsb     vsb_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_7_2147484688.2013-12-28_132500
vsb     vsb_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_6_2147484687.2013-12-28_133000

::> snapshot show -snapshot *snapmirror* -volume vsc_vsa_cifs_vol1 -fields snapshot
vserver volume            snapshot
------- ----------------- ------------------------------------------------------------------------------
vsc     vsc_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_6_2147484687.2013-12-28_132500
vsc     vsc_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_7_2147484688.2013-12-28_132500
vsc     vsc_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_6_2147484687.2013-12-28_133000
vsc     vsc_vsa_cifs_vol1 snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_7_2147484688.2013-12-28_133000

In the example above, our source has two “snapmirror.” snapshots - that’s one reference snapshot for each volume SnapMirror relationship. On the first fan-out volume, we have three “snapmirror.” snapshots, that’s the two existing reference snapshots and one that was taken on the source prior to the update commencing. The second fan-out volume has four “snapmirror.” snapshots since it triggered whilst the first relationship was in progress, capturing those three snapshots and the one required for its own update.

Q3: How to pause a SnapMirror relationship?

There are actually three ways to do this depending on the circumstance:

1: Delete the SnapMirror relationship

::> snapmirror delete -destination-path nac1://vs2/vs2_vs1_cifs_vol1

This leaves the destination as a read-only DP type volume. To resync it is simply:

::> snapmirror resync -source-path nac1://vs1/vs1_cifs_vol1 -destination-path nac1://vs2/vs2_vs1_cifs_vol1

Remember to apply a SnapMirror schedule (new and resync-ed SnapMirrors have a schedule of “-“ or none)!

::> snapmirror modify -destination-path nac1://vs2/vs2_vs1_cifs_vol1 -schedule 5min

2: Break the SnapMirror relationship

::> snapmirror break -destination-path nac1://vs2/vs2_vs1_cifs_vol2

This leaves the destination as a writeable RW type volume. To resync it is simply:

::> snapmirror resync -source-path nac1://vs1/vs1_cifs_vol2 -destination-path nac1://vs2/vs2_vs1_cifs_vol2

A difference this time is that it will warn that data newer than the most recent snapmirror snapshot will be deleted!

Warning: All data newer than Snapshot copy snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484681.2013-12-28_151501 on volume nac1://vs2/vs2_vs1_cifs_vol2 will be deleted.
Do you want to continue? {y|n}: y

Again, remember to re-apply the SnapMirror schedule.

3: Quiesce the SnapMirror relationship

::> snapmirror quiesce -destination-path nac1://vs2/vs2_vs1_cifs_vol3

This is the best method if you just want to temporarily pause a SnapMirror relationship. To resume:

::> snapmirror resume -destination-path nac1://vs2/vs2_vs1_cifs_vol3

Q4: Can we resync on a non “snapmirror.” named snapshot?

Yes! If you delete the SnapMirror relationship, this will allow you to delete the existing “snapmirror.” snapshot on the source, then, when you come to resync the relationship, it will use the latest in-common snapshot as below:

::> snapmirror delete -destination-path nac1://vs2/vs2_vs1_cifs_vol5

::> snapshot show -volume vs1_cifs_vol5
Vserver Volume  Snapshot
------- ------- --------
vs1     vs1_cifs_vol5

::> snapshot show -volume vs2_vs1_cifs_vol5
Vserver Volume  Snapshot
------- ------- --------
vs2     vs2_vs1_cifs_vol5

::> snapshot delete -volume vs1_cifs_vol5 -snapshot snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484692.2013-12-28_154001 -vserver vs1

::> snapmirror resync -source-path nac1://vs1/vs1_cifs_vol5 -destination-path nac1://vs2/vs2_vs1_cifs_vol5
Warning: All data newer than Snapshot copy hourly.2013-12-28_1505 on volume nac1://vs2/vs2_vs1_cifs_vol5 will be deleted.
Do you want to continue? {y|n}: y

Again, remember to re-apply the SnapMirror schedule.

Note 1: There is no flag to choose a specific snapshot to resync upon!
Note 2: In a broken SnapMirror relationship, you cannot delete reference “snapmirror.” snapshots without using the “set advanced” flag -ignore-owners true!

Error: command failed: This Snapshot copy is currently used as a reference Snapshot copy by one or more SnapMirror relationships. Deleting the Snapshot copy can cause future SnapMirror operations to fail.

Q5: What “snapmirror.” snaps and others can we delete?

Firstly: in an active SnapMirror relationship, you cannot delete anything from the read-only destination volumes.
Secondly: on the source, Clustered Data ONTAP will not let you delete a reference SnapMirror snapshot by mistake.
Thirdly: beyond the SnapMirror snapshots that were discussed in Q1 and Q2, anything older named “snapmirror.” is likely to have been created by a failed SnapMirror transfer.

The general rule when it comes to re-syncing a SnapMirror relationship is that you must have one in-common snapshot on the source and the destination, and (as we’ve seen in Q4) this does not need to be a “snapmirror.” snapshot. So, the answer to the above becomes:

You can delete all the snapshots except there must be one remaining in-common snapshot on the source and destination volumes!

Note: If you’re tidying up and thinking of doing this, one thing to watch out for is that this one in-common snapshot isn’t auto deleted.

The current SnapMirror reference snapshot can be easily identified using a snapmirror show -instance, and looking at the ‘Newest Snapshot’ and ‘Exported Snapshot’ fields as in the example below (these will match unless an update is in progress):

::> snapmirror show -source-path nac1://vs1/vs1_cifs_vol1 -instance
                Source Path: nac1://vs1/vs1_cifs_vol1
           Destination Path: nac1://vs2/vs2_vs1_cifs_vol1
          Relationship Type: DP
           Managing Vserver: vs2
        SnapMirror Schedule: 5min
                Tries Limit: 8
          Throttle (KB/sec): unlimited
               Mirror State: Snapmirrored
        Relationship Status: Idle
          Transfer Snapshot: -
          Snapshot Progress: -
             Total Progress: -
        Snapshot Checkpoint: -
            Newest Snapshot: snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484680.2013-12-28_171501
  Newest Snapshot Timestamp: 12/28 17:15:01
          Exported Snapshot: snapmirror.f2b20bdd-6da5-11e3-9034-123478563412_4_2147484680.2013-12-28_171501
Exported Snapshot Timestamp: 12/28 17:15:01
                    Healthy: true
   Constituent Relationship: false

Friday, 27 December 2013

Investigating Get-NcNetInterface

Trying to see if it is possible in the Data ONTAP PowerShell Toolkit to do the equivalent of the Clustered ONTAP CLI command:

::> network interface revert *

I compiled the following notes below. The closest I got to replicating the above was the below, and unfortunately this does not work:

$lifs = Get-NcNetInterface
foreach ($lif in $lifs){ $q = Get-NcNetInterface -template; $q.InterfaceName = $lif.InterfaceName; $a = Get-NcNetInterface -template; $a.CurrentNode = $lif.HomeNode; $a.CurrentPort = $lif.HomePort; Update-NcNetInterface -Query $q -Attributes $a }

I’m a massive fan of the Data ONTAP PowerShell Toolkit, but looks like it is missing a command like the following which would be super useful (later versions will have something like this for sure):


All the Get-NcNetInterface Attributes (Highlighted)


InterfaceName OpStatus DataProtocols FirewallPolicy Vserver Address
------------- -------- ------------- -------------- ------- -------

$ints = Get-NcNetInterface
$int = $ints[5] # 5 is just a randomly chosen LIF

InterfaceName OpStatus DataProtocols FirewallPolicy Vserver Address
------------- -------- ------------- -------------- ------- -------


Help for Get-NcNetInterface and Related Commands

Get-Help Get-NcNetInterface -Full
Get-Help New-NcNetInterface -Full
Get-Help Remove-NcNetInterface -Full
Get-Help Set-NcNetInterface -Full
Get-Help Update-NcNetInterface -Full

And Finally: An Output

Image: The closest I got to replicating “net int revert *” - report success only where the LIF was already in the right place!

Even more finally: after updating to the very latest (at the time of writing) Data ONTAP PowerShell Toolkit - - my attempt at replicating “net int revert *” in PowerShell still does not work…

Thursday, 26 December 2013

Investigating Get-NcDisk

Note: In this post we are using the Data ONTAP PowerShell Toolkit!

One thing I’ve been learning about the Data ONTAP PowerShell toolkit Get-Nc commands is that they bring back a lot of data. Focusing on disk information here: and wishing to script efficient scripts to obtain just the information that is desired, we explore just what Get-NcDisk returns!

First: you can use templates to search using a Query and/or with specific Attributes only, for example:

# Applying this template brings back just the disk name attribute
$diskAttributes = Get-NcDisk -Template
$ = ""

# Applying this template brings back just disks of type BSAS
$diskQuery = Get-NcDisk -Template
Initialize-NcObjectProperty -object $diskQuery -name DiskInventoryInfo
$diskQuery.DiskInventoryInfo.DiskType = “BSAS”
Note: Initialize-NcObjectProperty is only required to go down to the second level of available Get-NcDisk information

# Applying the Query and Attributes templates
$disks = Get-NcDisk -Query $diskQuery -attributes $diskAttributes

Second: in-depth help is available within PowerShell using

Get-Help Get-NcDisk -Full

All the Get-NcDisk Attributes

Note i: Each unique attribute is highlighted yellow.
Note ii: NcObjectProperties which contain sub attributes are highlighted green.
Note iii: Examples/outputs are in italic.

$disks = Get-NcDisk
$diskQuery = Get-NcDisk -template

Name Shelf Bay Position Capacity RPM FW Model Paths Aggregate
---- ----- --- -------- -------- --- -- ----- ----- ---------


$aDisk = $disks[7]

Which ones can be initialized as NcObject Properties?

Initialize-NcObjectProperty -object $diskQuery -name DiskInventoryInfo
Initialize-NcObjectProperty -object $diskQuery -name DiskName
Initialize-NcObjectProperty -object $diskQuery -name DiskOwnershipInfo
Initialize-NcObjectProperty -object $diskQuery -name DiskPaths
Initialize-NcObjectProperty -object $diskQuery -name DiskRaidInfo
Initialize-NcObjectProperty -object $diskQuery -name DiskStatsInfo
Initialize-NcObjectProperty -object $diskQuery -name DiskUid
Initialize-NcObjectProperty -object $diskQuery -name Name
Initialize-NcObjectProperty -object $diskQuery -name NcController

Get-NcDisk outputs of just one (a) disk:


Name          Shelf Bay Position Capacity RPM  FW   Model            Paths Aggregate
----          ----- --- -------- -------- ---  --   -----            ----- ---------
nac1-01:v4.17           dparity  4 GB     7.2k 0042 VD-4000MB-FZ-ATA 2     aggr1








DiskName      PathIops PathLinkErrors PathLunInUseCount PathQuality Node
--------      -------- -------------- ----------------- ----------- ----
nac1-01:v0.17 0        0              0                 0           nac1-01
nac1-01:v4.17 0        0              0                 0           nac1-01










Name           Address        Vserver Version
----           -------        ------- -------         NetApp Release 8.1.3 Cluster-Mode: Sat Jun 08 08:07:07 P..

What about disk state?

One thing that might appear to be missing is information similar to the NetApp Clustered ONTAP CLI command:

::> storage disk show -fields state

With the possible states being: broken, copy, maintenance, partner, pending, present, reconstructing, removed, spare, unfail and zeroing.

Using PowerShell, you can find a group of disks based on their container type (such as aggregate/broken/labelmaint/maintenance/spare/unassigned/unknown/volume) with a query:

$diskQuery = Get-NcDisk -Template
Initialize-NcObjectProperty -object $diskQuery -name DiskRaidInfo
$diskQuery.DiskRaidInfo.ContainerType = “broken”
$disks = Get-NcDisk -Query $diskQuery

Image: Example of using PowerShell to find “broken” disks

I’m certain that state will be added in future version of the Data ONTAP PowerShell toolkit.

Sunday, 22 December 2013

Research Links & Info - 22nd December 2013

Just a place to put some links and notes collected in my inbox over the last 2 months…
With sections: Citrix, Microsoft, Microsoft PowerShell, NetApp, Veeam, VMware and more…

## Citrix ##

XenServer Performance Tuning – Top 5 Recommended Guides

Image: XenServer Metrics

## Microsoft ##

Storage Spaces Inside a Virtual Machine Is Not Supported

UPDATED: Windows Server 2012 R2 Hyper-V Component Architecture Poster and Hyper-V Mini-Posters

Virtual machine enters a paused state or a CSV volume goes offline when you try to create a backup of the virtual machine on a Windows Server 2012-based failover cluster

“… recommend to disable this functionality when storage behind CSV does not support ODX …”

Deploy Windows Offloaded Data Transfers

“… (even better) recommend making the upgrade to Hyper-V 2012 R2 … because it has a lot of polish specifically around backup logic …”

## Microsoft PowerShell ##

I’ve been doing a lot of PowerShell recently, these I’ve kept note of as really useful links:

PowerShell Command Line Introduction

How to Integrate Microsoft Excel with PowerShell

PowerShell Tutorial 8: Conditional Logic (if, elseif, else, and switch)

Creating an array similar to the output of a cmdlet

Windows PowerShell 1.0 Tips

Windows PowerShell Tip of the Week: Creating Custom Tables

Windows PowerShell Tip of the Week: Working with Hash Tables

TechNet: Scripting with Windows PowerShell

Windows PowerShell Owner’s Manual:

Windows PowerShell Owner’s Manual: Aliases

## NetApp ##

How to unlock a shared file on NetApp CIFS
lock status -f "/vol/Share/folder/file.xlsx" -p cifs
lock break -f "/vol/Share/folder/file.xlsx" -p cifs

Automating Lun Serial changes after Netapp head swap using Powershell

PowerShell Snapdrive Create Snapshots and Remove Snapshots

## Create Snapshot ##
$date=(Get-Date -Format dd-MM-yyyy_HH-mm)
sdcli snap create -s $date -D e

## Remove Snapshots beyond 5 days ##
Get-NaVol vol_test | Get-NaSnapshot | where-object {$_.Created -lt (Get-Date).AddDays(-5)} | remove-nasnapshot

Differences between FlexClone LUNs and LUN clones

Creating load-sharing mirror relationships

Misaligned I/O can occur on properly aligned LUNs

And checking LUN alignment in Clustered ONTAP:
::*> lun show -alignment misaligned -fields alignment
::*> lun show -alignment partial-writes -fields alignment


7Mode> uptime
CMode::> system node show -fields uptime

Data ONTAP 8: How to copy files from a Cluster-Mode filer

## Veeam ##

Gostev’s weekly “Veeam Community Forums Digest” is always an excellent source of info!

Recommended hotfixes for Hyper-V servers

Hyper-V: Update List for Windows Server 2012

## VMware ##

Updated vCenter Server 5.5.0a Released

Update sequence for vSphere 5.5 and its compatible VMware products (2057795)

Installing vCenter Server 5.5 best practices (2052334)

Virtual SAN (Beta)

VMware Tools for Nested ESXi

VMware Support: Top 20 Articles for November 2013

Unable to install Flash on Windows Server 2012 for use with the vSphere Web Client (2054049)

Jumbo Frames with VMware ESXi

An interesting virtualization startup (thanks Al!)

## NetApp Brief Notes ##

SnapMirror: There must be at least one common snapshot for SnapMirror resync to be possible, otherwise SnapMirror initialize must be done again.

The CMode equivalent of the 7Mode -
lun show -m
- command is -
lun mapped

This command helps register the node as being online on for
autosupport invoke -node name -type all -message

## NetApp Tips 1 ##

Tip for Creating Lots of CIFS Shares in CDOT using Excel

Note: Remember to place spaces as required!
Row 1 is for column titles.
Column A = vserver cifs share create -vserver
Column B = {Populate with vserver names}
Column C = -share-name
Column D = “
Column E = {Populate with share names}
Column F = “
Column G = -path
Column H = “
Column I = {Populate with base path like ‘/NAME/’ }
Column J = {Populate with next level path like ‘SHARE’ }
Column K = {Populate with subsequent levels like ‘/folder’ }
Column L = “
Column M = -share-properties
Column N = {Populate with share properties such as ‘oplocks,browsable,changenotify’}
Column O = CONCATENATE(A2,B2,C2,D2,E2,F2,G2,H2,I2,J2,K2,L2,M2,N2)
And fill down for as many shares as need to be created!

And some other commands to check you’re looking in the right area:
1) To get IP address of fileserver from Windows:
C:\Users\Winuser> ping FILESERVERNAME
2) To find which LIF owns that address (X.X.X.X is obtained above):
CDOT::> net int show -address X.X.X.X
3) To verify existing paths:
CDOT::> cifs share show -vserver VSERVERNAME -fields path *PATH_STRING*

## NetApp Tips 2 ##

CDOT: Creating CIFS Volume Quotas - Tracking Only Quotas‏
quota policy create -vserver vs1 -policy-name volumePolicy
vserver modify -vserver vs1 -quota-policy volumePolicy
quota policy rule create -vserver vs1 -policy-name volumePolicy -volume testshare -type user -target "" -qtree "" -soft-disk-limit 1g
quota modify -vserver vs1 -volume testshare -state on
quota report -vserver vs1 -volume testshare

Also see:

## NetApp - Troubleshooting 1: SDW and SME ##

Triage Template – How to troubleshoot issues when using SnapDrive for Windows

Triage Template – How to troubleshoot SnapManager for Microsoft Exchange Server issues

Top 10 SnapDrive/ SnapManager issues and solutions

Top 10 SnapDrive for Windows issues and solutions

## NetApp - Troubleshooting 2: fru_led ##

OEM: Fault LEDs constantly lit on 62xx, 32xx, and 22xx systems

For Data ONTAP versions 8.1.3 or later:

From the SP CLI:
SP node> priv set diag
SP node*> system fru led show 0

From the Data ONTAP 7-mode shell or clustered Data ONTAP nodeshell:
node> priv set diag
node*> fru_led status
node*> show_faults

To turn off all LEDs:
node*> fru_led off all