Interactive cheat sheet · Dell Metro-based NDM (5977/5978 → PowerMax)

Zone the arrays, zone the hosts, migrate the storage groups

One diagram, held fixed while you step through the three jobs an NDM migration actually is. Thick grey lines are cable — the port is physically in the fabric. Thin coloured lines are zones — blue between the two arrays’ RF ports, violet from a host HBA to an array’s FA ports. A grey line with no colour on it is plugged in but not zoned, which is the single most common reason symdm create fails. Animated lines are data moving. Commands for each step sit in the right-hand column; the full command reference is below the diagram.

A array → array zoning — once per array pair B host → array zoning — once per host, before any create C migrate — repeated per storage group

A1 

One fabric, two arrays, an ESXi cluster — the state changes as you step through an NDM migration A fixed topology: an ESXi cluster and a Solutions Enabler management host on top, a Brocade fabric across the middle, and two arrays below — the source array with its host-facing FA ports, SRDF RF ports and storage group, and the target PowerMax with the same three. Grey lines are cables and never change. Thin coloured lines are zones that appear as you create them: blue between the two arrays' RF ports, violet from each host HBA to an array's FA ports. Thick animated lines are data in motion: violet for host I/O, blue for SRDF replication. A spinner marks a step where one component is working on its own, and a caption pill at the bottom-left names the current action. symdm · symcfg · symaccess cfg: PROD_CFG Fabric B: identical Fabric A · Brocade esxi-01 vmhba1 · 10:00:...:3a:c1 vmhba2 · 10:00:...:3a:c2 esxi-02 vmhba1 · 10:00:...:7b:d1 vmhba2 · 10:00:...:7b:d2 Management host Solutions Enabler (SYMCLI) 9.1+ Unisphere for PowerMax · gatekeepers FA ports 1D:6 · 2D:6 · host-facing RF ports 1E:8 · 2E:8 · two directors SG_APP01 · 24 devices masking view: SG + PG + IG (ESXi HBAs) serving the cluster · consistent_lun on RF ports 1E:8 · 2E:8 · two directors FA ports 1D:4 · 2D:4 · the -tgt_pg SG_APP01 · not yet created NDM creates SG, devices, IG, PG, masking view carved from SRP_1    

Run it

Gate — before the next step

Understand it — click a question

NDM session state

Host paths to the datastore

How you back out

cable — port is in the fabric array-to-array zone (RF ports) host-to-array zone (HBA → FA) host I/O in flight SRDF replication in flight control plane (IP, gatekeepers) dashed frame = a boundary, not a device

Reference 01The three jobs, and what breaks when you skip one

NDM itself is the automated part. The two zoning jobs in front of it are where the outages come from — and both of them must be finished before the first symdm create, because create reads the fabric to build the target’s masking view.

JobWhat it isHow oftenSkip it and…
A Array to arrayRF (SRDF) ports on both arrays zoned to each other — at least two links across at least two directors, in both fabrics.Once per array pairsymdm environment -setup fails, or you build the session on a single link and one director reboot stalls the migration.
B Host to arrayEvery host HBA that sees the source is also zoned to the target array’s FA ports, single-initiator, added as new zones.Once per host, per fabricsymdm create builds the target initiator group from login history. A host that never logged into the target FA ports is missing from the masking view — and misses the cutover.
C Migratecreate → rescan → cutovercommit, driven per storage group from SYMCLI or Unisphere.Per storage group, repeatedNothing — this is the safe part. The risk here is doing several at once before the zoning step is boring.

Reference 02Brocade fabric — the commands, and the one that bites

The discipline matters more than the syntax: back the config up before you touch it, add zones rather than editing existing ones so rollback survives, and look at what a zone serves before you remove it. Removing source-array zones is post-commit cleanup, never a pre-step.

CommandWhat it doesNotes
configuploadSaves the switch config, zoning included, off-box.First command of every zoning session. Do both fabrics.
switchshowPort-by-port state: online, speed, the WWPN logged in.Proves the cable and the SFP, not the zone.
nsshow / nscamshowName-server view of who is logged into the fabric.Where you confirm an RF or FA port actually logged in before zoning it.
cfgshow / zoneshowShows the defined and effective configs and their zones.Run it before touching a zone: see every member it serves.
alicreate "a_esx01_hba1","10:00:..:3a:c1"Names a WWPN so zones read like inventory, not hex.Convention is load-bearing — scripts and audits parse these names.
zonecreate "z_esx01_c1__pmax_1d4","a_esx01_hba1; a_pmax_1d4; a_pmax_2d4"One initiator, the target FA ports it needs.Single-initiator zoning. Name by the last six of the WWPN.
cfgadd "PROD_CFG","z_esx01_c1__pmax_1d4"Adds the new zone to the active config.safe Additive. Rollback is the old config, still intact.
cfgsave then cfgenable "PROD_CFG"Persists, then activates.Activating the wrong config name is the classic fabric outage. Read it twice.
cfgremove / zonedeleteRemoves a zone or a member.blast radius A shared zone can carry hosts you did not come here for. Only after commit, only what you added or verified.

Reference 03SYMCLI — the NDM command family

Everything is driven per storage group. -sid may be either array once the session exists; -src_sid / -tgt_sid are used for environment-level operations.

CommandDoesWhen
symdm environment -src_sid <src> -tgt_sid <tgt> -validatePre-checks the pair: SRDF connectivity, code levels, director and port counts.The real gate at the end of job A.
symdm environment -src_sid <src> -tgt_sid <tgt> -setupBuilds the NDM environment between the two arrays.Once per array pair.
symdm -environment listLists environments and their state.Any time.
symdm create -src_sid <src> -tgt_sid <tgt> -sg <SG> -tgt_srp <SRP> -tgt_pg <PG> -validateDry run of the create.Always, first.
symdm create -src_sid <src> -tgt_sid <tgt> -sg <SG> -tgt_srp <SRP> -tgt_pg <PG>Creates the session: duplicate devices on the target with the source’s WWNs, a same-named SG, an initiator group from login history, a port group, a masking view.Start of every storage group.
symdm -sid <sid> -sg <SG> list -v -pairs_info -detailSession state and per-pair copy progress.The monitoring command. Live in it.
symdm -sid <sid> -sg <SG> cutoverFlips which array serves the host. Identity is unchanged, so the host sees a path change.Only once every host has rescanned and sees target paths.
symdm -sid <sid> -sg <SG> commitEnds the session, releases the source devices.one-way After this there is no revert to the source.
symdm -sid <sid> -sg <SG> cancelCancels a session before commit.Pre-cutover back-out.
symdm -sid <sid> -sg <SG> cancel -revertCancels after cutover and puts the source back in front.Only when every host has realised the cutover first — see the gotchas.
symdm -sid <sid> -sg <SG> recoverResumes a failed create, commit or cancel once the cause is fixed.Your first move after any *FAILED state.
symdm environment -src_sid <src> -tgt_sid <tgt> -removeTears the environment down.After the last storage group commits.
symcfg list -sid <sid> -ra all · symcfg list -sid <sid> -fa all -portLists RDF directors and FA directors/ports.Job A and job B, picking ports.
symaccess -sid <sid> list logins -dirport <dir>:<port>Shows which initiator WWPNs have logged into that FA port.The proof that job B worked — and what create reads.

Reference 04Session states you will see

StateMeansYour move
CreatedTarget devices exist with the source’s identity; masking view built; replication establishing.Rescan every host.
CutoverReadyThe session is ready for the flip.Confirm all hosts see target paths, then cutover.
MigratingCutover done; the target is serving; data still settling.Watch, do not rescan paths away.
CutoverSyncFully synchronised.commit.
CutoverNoSync / CutoverSyncingSynchronisation stopped, or still running.Resume or wait — do not commit from here.
CREATEFAILED · CancelFailedThe operation stopped part-way.Fix the cause, then recover.
CutoverInProg · CommitInProgTransitional, with a progress level.Wait it out.

Reference 05Go / no-go before you start

CheckRequirement
Code levelsMetro-based NDM: source on 5977/5978, target PowerMax. Pass-through NDM covers a 5876 source. Interfamily 5977→5977 and 5978→5978 need Solutions Enabler 9.1+; a V3→V4 move needs a 10.x instance to drive it.
SRDF linksAt least two, across at least two directors on each array, RF ports zoned to each other.
DistanceArrays within synchronous / metro distance of each other.
DevicesOpen systems (FBA). Source devices must not already be R2.
Target storage groupA storage group of the same name must not already exist on the target — NDM creates it.
ManagementA Solutions Enabler / Unisphere host with gatekeepers that can see at least one of the arrays.
VMwareconsistent_lun enabled on the source-array initiator group before the migration starts.
Host zoningEvery migrating host zoned to the target array before the first create.

Reference 06The gotchas that actually cost people downtime

TrapWhat happensDo instead
fabric Editing a shared zoneA zone you assumed served one host serves a dozen. Edit it live and every member loses paths at once.Read zoneshow first. Create new zones and cfgadd them; leave the old ones alone until after commit.
fabric Activating the wrong configThe fabric loads a config that predates half your zones. Every path that was added since disappears.configupload first; check the active config name in cfgshow before cfgenable.
fabric Removing source zones earlyYou cut the source paths before commit and lose the ability to revert cleanly.Source-zone removal is the last step, after commit.
host A rescan that removes source pathsPost-cutover, a rescan that permanently drops the now-inactive source paths kills a clean cancel -revert — for every concurrent session on that host.Rescan to discover, not to prune. Clean paths up after commit.
host Two NDM changes in quick successionCutover followed immediately by cancel -revert, before every host realised the first, can get a write rejected by both arrays and devices marked PDL.Confirm every host has realised the cutover before issuing anything else.
host Dead paths after a cancelCreate → discover → cancel → create leaves stale paths the host still thinks are registered; Windows guests have shown NTFS event 57 and unexpected cluster failovers.Clean up dead paths on every node after a cancel, before recreating.
array Forgetting consistent_lunLUN addressing is inconsistent across paths for ESXi.Set it on the source initiator group before the migration.
process Parallelising earlyThree sessions in flight, one unproven zoning method, one blast radius.One storage group end to end. Validate fully. Then scale when the fabric step is boring.

Reference 07The VMware side

CommandDoes
esxcli storage core adapter listThe HBAs and their WWPNs — the initiators you will zone.
esxcli storage core adapter rescan --allDiscovers the new target paths after create. Run on every node in the cluster.
esxcli storage core path list -d naa.<id>Shows every path to the device and which array each runs to — how you prove the host sees both.
esxcli storage vmfs extent listConfirms the datastore is still on the same device identity.
esxcli storage vmfs snapshot listShould be empty. Anything here means ESXi thinks it found a copy — the failure mode NDM exists to avoid.