SAN dual-fabric zoning — single initiator, single target
Fibre Channel storage area network design: two air-gapped fabrics with switch domain IDs and ISLs, host HBA and array front-end port WWPNs, and the zoneset with its single-initiator single-target zone names — the zoning drawing a storage engineer must hand to change control before an array or host is cabled.
Rendering…
Make it your own.
digraph SanZoning {
rankdir=LR;
graph [bgcolor="transparent", nodesep=0.35, ranksep=1.0, fontname="Inter", labelloc="t",
label="SAN fabric and zoning — two air-gapped fabrics, single initiator / single target\n4 paths per LUN per host (2 HBAs x 2 controllers) · no ISL between fabric A and fabric B"];
node [shape=box, style="rounded,filled", fontname="Inter", fontsize=9, fillcolor="white"];
edge [fontname="Inter", fontsize=8, color="#475569", arrowsize=0.6];
subgraph cluster_hosts {
label="Initiators"; style="rounded,filled"; fillcolor="#f8fafc"; fontname="Inter"; fontsize=10;
HA1 [label="esx01_hba0\n10:00:00:90:fa:c1:20:01", fillcolor="#dbeafe"];
HB1 [label="esx01_hba1\n10:00:00:90:fa:c1:20:02", fillcolor="#fce7f3"];
HA2 [label="esx02_hba0\n10:00:00:90:fa:c1:21:01", fillcolor="#dbeafe"];
HB2 [label="esx02_hba1\n10:00:00:90:fa:c1:21:02", fillcolor="#fce7f3"];
HA3 [label="db01_hba0\n10:00:00:90:fa:c1:22:01", fillcolor="#dbeafe"];
HB3 [label="db01_hba1\n10:00:00:90:fa:c1:22:02", fillcolor="#fce7f3"];
}
subgraph cluster_fabA {
label="Fabric A — zoneset ZS_FAB_A_v14, active 2026-02-11";
style="rounded,filled"; fillcolor="#eff6ff"; fontname="Inter"; fontsize=10;
SWA1 [label="fab-a-sw1\ndomain 1, principal\n32 Gb/s", fillcolor="#bfdbfe"];
SWA2 [label="fab-a-sw2\ndomain 2\n32 Gb/s", fillcolor="#bfdbfe"];
SWA1 -> SWA2 [dir=none, style=bold, label="ISL 2x32 Gb trunk"];
}
subgraph cluster_fabB {
label="Fabric B — zoneset ZS_FAB_B_v14, active 2026-02-11";
style="rounded,filled"; fillcolor="#fdf2f8"; fontname="Inter"; fontsize=10;
SWB1 [label="fab-b-sw1\ndomain 11, principal\n32 Gb/s", fillcolor="#fbcfe8"];
SWB2 [label="fab-b-sw2\ndomain 12\n32 Gb/s", fillcolor="#fbcfe8"];
SWB1 -> SWB2 [dir=none, style=bold, label="ISL 2x32 Gb trunk"];
}
subgraph cluster_array {
label="Target — all-flash array, dual controller";
style="rounded,filled"; fillcolor="#f0fdf4"; fontname="Inter"; fontsize=10;
TA0 [label="CT0.FC0 (fabric A)\n52:4a:93:7d:0a:11:00:00", fillcolor="#bbf7d0"];
TA1 [label="CT1.FC0 (fabric A)\n52:4a:93:7d:0a:11:00:10", fillcolor="#bbf7d0"];
TB0 [label="CT0.FC1 (fabric B)\n52:4a:93:7d:0a:11:00:01", fillcolor="#bbf7d0"];
TB1 [label="CT1.FC1 (fabric B)\n52:4a:93:7d:0a:11:00:11", fillcolor="#bbf7d0"];
}
ZONES [shape=note, fillcolor="#fef9c3", fontsize=9,
label="Zoning standard — single initiator, single target, WWPN zoning only (no port zoning)\lFabric A, 6 zones:\l Z_ESX01_HBA0__ARR_CT0FC0 Z_ESX01_HBA0__ARR_CT1FC0\l Z_ESX02_HBA0__ARR_CT0FC0 Z_ESX02_HBA0__ARR_CT1FC0\l Z_DB01_HBA0__ARR_CT0FC0 Z_DB01_HBA0__ARR_CT1FC0\lFabric B, 6 zones: same list with HBA1 and CT0FC1 / CT1FC1\lChange control: activate on fabric A, verify all hosts see 4 paths, then fabric B\lHost multipathing: round-robin, IOPS=1; 12 initiator-target pairs per shared LUN\l"];
HA1 -> SWA1 [label="port 1/0"];
HA2 -> SWA2 [label="port 2/0"];
HA3 -> SWA1 [label="port 1/1"];
HB1 -> SWB1 [label="port 1/0"];
HB2 -> SWB2 [label="port 2/0"];
HB3 -> SWB1 [label="port 1/1"];
SWA1 -> TA0 [dir=none, label="port 1/14"];
SWA2 -> TA1 [dir=none, label="port 2/14"];
SWB1 -> TB0 [dir=none, label="port 1/14"];
SWB2 -> TB1 [dir=none, label="port 2/14"];
}