Fibre Channel Target Port Management: Difference between revisions

From OSNEXUS Online Documentation Site
Jump to navigation Jump to search
New page: FC target port enable/disable, LUN masking, remote port discovery, performance monitoring, troubleshooting
 
m Rewrite from the product on real FC hardware: corrected breadcrumb (Storage Management > Storage Systems > FC Ports tab, not 'System Management > FC Target Ports'), corrected the --port argument and the host-add/volume-assign argument names, corrected the dialog and menu labels (Enable FC Target Mode / Enable FC Initiator Mode / Issue FC LIP), documented that FC remote ports only exist on a port with an initiator role, that Force on Issue LIP means all ports, and that an FC assignment yields...
Line 1: Line 1:
QuantaStor supports Fibre Channel (FC) block storage alongside iSCSI, exposing storage volumes as LUNs to FC initiator hosts. FC target mode is managed through the SCST kernel driver and requires QLogic FC HBAs — other vendors' HBAs operate in initiator mode only and cannot be switched to target mode by QuantaStor.
QuantaStor presents storage volumes as LUNs over Fibre Channel through the FC target ports on its QLogic host bus adapters. This page covers how those ports are discovered and read, how to switch a port between target and initiator mode, how initiators on the fabric appear as FC remote ports, and how a volume assignment reaches an FC client.


__TOC__
__TOC__
== Overview ==
=== How FC Target Mode Works ===
A QLogic FC HBA in QuantaStor operates in one of two modes:


{| class="wikitable"
{| class="wikitable"
! Mode !! Description
! Section !! Purpose
|-
| [[#How QuantaStor discovers FC target ports|How QuantaStor discovers FC target ports]] || Where port objects come from, and why target mode is on by default
|-
|-
| '''Target''' || The port presents storage volumes as LUNs to connected FC initiator hosts. This is the operating mode for storage provisioning.
| [[#Where FC ports appear in the interface|Where FC ports appear in the interface]] || The FC Ports tab and the two grids on it
|-
|-
| '''Initiator''' || The port connects to remote storage targets. Used for external SAN connectivity in HA configurations. This is the default mode before enabling.
| [[#Reading port state, mode, speed and topology|Reading port state, mode, speed and topology]] || State, Link State, Status, Mode -- and the one value QuantaStor does not report
|}
 
QuantaStor manages FC LUN masking through the SCST driver's sysfs interface. Access control is WWN-based (World Wide Name) — each FC initiator is identified by its port WWN (WWPN), and LUNs are explicitly mapped per initiator.
 
=== FC vs iSCSI ===
 
{| class="wikitable"
! Feature !! Fibre Channel !! iSCSI
|-
|-
| Infrastructure || Dedicated FC fabric and switches || Existing Ethernet network
| [[#Target mode and initiator mode|Target mode and initiator mode]] || Enabling and disabling a port, and what happens to its LUNs
|-
|-
| Initiator ID || Port WWN (WWPN) || iSCSI Qualified Name (IQN)
| [[#FC remote ports|FC remote ports]] || Initiators discovered on the fabric, and the mode they require
|-
|-
| Authentication || WWN + LUN masking (ACL) || IQN + optional CHAP
| [[#Issuing a LIP|Issuing a LIP]] || Forcing rediscovery, and when that is the right tool
|-
|-
| Speed || 8/16/32 Gbps (HBA-dependent) || 1/10/25/40/100 GbE
| [[#Zoning is a prerequisite|Zoning is a prerequisite]] || What you must configure on the switch, because QuantaStor cannot
|-
|-
| Latency || Very low || Low (higher than FC)
| [[#Assigning a storage volume over FC|Assigning a storage volume over FC]] || What an assignment programs, and what the client sees
|-
|-
| Zoning || Managed on FC switch || N/A (IP routing / VLANs)
| [[#Troubleshooting|Troubleshooting]] || A LUN that does not appear, a refused disable, poor throughput
|-
|-
| QuantaStor mgmt || Target ports, LUN masking || Portal groups, CHAP, IQNs
| [[#CLI reference|CLI reference]] || The seven FC commands
|}
|}


Volumes can be exposed simultaneously over both FC and iSCSI — each protocol assigns independent LUN numbers to the same underlying block device.
== How QuantaStor discovers FC target ports ==
 
QuantaStor's fabric manager scans the Linux FC transport roughly once a minute and creates one FC target port object for every port it finds, reading the model, firmware and driver versions, PCI slot information, WWPN, WWNN, link state and fabric WWN from the adapter. You do not add, remove or configure FC ports -- they appear when the adapter is installed and the driver loads, and each port's object identity follows its physical WWPN.
 
Target mode is the mode QuantaStor puts a port into, not one you have to select. On every discovery pass, any port that is target-mode capable and does not carry an explicit initiator-mode marker is switched into target mode; when that happens outside of service startup, QuantaStor raises an alert saying so. The practical consequence is that a port disabled outside QuantaStor -- by writing to the driver's sysfs interface directly, for instance -- is turned back on within a minute. Use [[#Target mode and initiator mode|Enable FC Initiator Mode]] instead, which records the choice so it sticks.
 
Target mode capability comes from the SCST QLogic target driver, which exposes a control directory per port at {{Code|1=/sys/kernel/scst_tgt/targets/qla2x00t/<WWPN>/}}. A port with no entry there is listed by QuantaStor but cannot be switched into target mode, and the enable operation fails with a message naming the missing path.


=== Prerequisites ===
== Where FC ports appear in the interface ==


* QLogic FC HBA installed in the QuantaStor appliance
[[File:fcports_tab.png|thumb|right|800px|The FC Ports tab, grouped by Storage System. The four ports on the upper appliance are in Target mode; the four on the lower one are in Target + Initiator mode.]]
* SCST kernel module loaded (managed automatically by QuantaStor)
* FC switch zoning configured so the target port WWN is visible to the desired initiator host WWPNs
* Storage pool and volumes created before enabling FC target mode


'''Note:''' QuantaStor does not configure FC switch zoning. Zone management must be performed on the FC switch fabric using the switch vendor's tools (e.g., Brocade Zone Admin, Cisco DCNM/NDFC).
{{Navigation|Storage Management → Storage Systems ''(section)'' → ''select a Storage System'' → FC Ports ''(tab)''}}


== Viewing FC Target Ports ==
The FC Ports tab carries two grids. The upper one lists FC target ports, grouped by Storage System; the lower one lists FC remote ports. Select the grid node to see every port in the grid, or a single Storage System to scope both grids to that appliance.


'''Navigation:''' System Management → FC Target Ports
The target port grid shows Name, Model, State, Link State, Status, Mode, Port WWN and Storage System WWN. Name and Port WWN both render the WWPN in the colon-separated form the fabric uses, such as {{Code|1=50:01:43:80:18:6a:25:68}}; Storage System WWN is the adapter's node WWN (WWNN), which for a QLogic port is normally the WWPN plus one. Two further columns, State and Description, are hidden by default and can be turned on from the column menu -- Description carries the adapter's own product string, for example {{Code|1=HPE SN1600Q 32Gb 2p FC HBA}}.


'''CLI:'''
FC target ports also appear as children of their Storage System in the left tree, and in the FC Portals tab of the Portal Group dialogs.
<pre>
# List all FC target ports on the system
qs fiber-channel-port-list


# Get details for a specific port
For the full field list on one port, open the docked Properties panel from the strip on the far right edge, or run <code>[[QuantaStor CLI Command Reference#fiber-channel-port-get|qs fcp-get]] --port=&lt;WWPN&gt;</code>. Both add Firmware Version, Driver Version, PCI Info, Fabric WWN, Active Port WWN, Active Node WWN, the sysfs path and the device number.
qs fiber-channel-port-get --fc-target-port=<wwpn-or-id>
 
</pre>
== Reading port state, mode, speed and topology ==


Key fields returned:
Four columns describe a port's health, and they mean different things:


{| class="wikitable"
{| class="wikitable"
! Field !! Description
! Column !! Source !! Reading it
|-
| <code>portWwn</code> || Port World Wide Name — unique identifier for this FC port
|-
|-
| <code>nodeWwn</code> || Node World Wide Name — identifies the HBA
| '''State''' || QuantaStor's own object state || {{Code|1=Normal}} in ordinary operation. QuantaStor sets it to {{Code|1=Offline}} with the detail ''FC Port is reporting 'Link Down' status, please check cable connections'' when the link goes down.
|-
|-
| <code>fabricWwn</code> || WWN of the FC fabric/switch this port is connected to
| '''Link State''' || the target driver || {{Code|1=Link Up - F_Port}} on a switched fabric. The suffix is the topology the port negotiated: '''F_Port''' means it is attached point-to-point to a fabric switch port, which is what you want.
|-
|-
| <code>isTargetModeEnabled</code> || Whether this port is enabled as an FC target
| '''Status''' || the FC transport's port state || {{Code|1=Online}} when the port has logged in to the fabric.
|-
|-
| <code>status</code> || Current port status (e.g., Online)
| '''Mode''' || the driver's active role || {{Code|1=Target}}, {{Code|1=Initiator}} or {{Code|1=Target + Initiator}}. See below.
|-
| <code>firmwareVersion</code> || HBA firmware version
|-
| <code>driverVersion</code> || HBA driver version
|-
| <code>vendor</code> / <code>model</code> || HBA vendor and model (e.g., QLogic QLE2742)
|}
|}


== Enabling and Disabling FC Target Mode ==
'''Which modes a port can hold is an appliance-wide driver setting, not a per-port one.''' The QLogic target driver takes a {{Code|1=qlini_mode}} parameter that decides when the initiator role exists at all, and QuantaStor runs the driver's own default, {{Code|1=exclusive}}: the initiator role is active on load, is given up when target mode is enabled on a port, and comes back on that port when target mode is disabled again. That is what makes each port either {{Code|1=Target}} or {{Code|1=Initiator}} but never both, and it is what lets [[#Target mode and initiator mode|Enable FC Initiator Mode]] repurpose a port at all.


=== Enable (Switch to Target Mode) ===
{{Code|1=Target + Initiator}} requires the driver to be loaded with {{Code|1=qlini_mode=dual}} instead, which makes every port on the appliance a target and an initiator at once. Set it with {{Code|1=qs-util enabledualmode}} and reverse it with {{Code|1=qs-util disabledualmode}}, which write {{Code|1=dual}} and {{Code|1=exclusive}} respectively and need a reboot to take effect; [[Dual-mode FC configuration]] covers the procedure and the driver reload. Dual mode is what you want when the appliance must also consume FC storage from another array, and it is also the only way to populate the [[#FC remote ports|FC Remote Ports]] view. Target-only is the right setting for a pure storage appliance.


Enabling a port puts it into FC target mode. QuantaStor registers the port with the SCST driver and begins presenting LUNs to connected initiators. The port will be automatically re-enabled in target mode on each service restart.
''(Note: {{Code|1=qlini_mode}} also accepts {{Code|1=enabled}} and {{Code|1=disabled}}, which are not the values to use here. {{Code|1=enabled}} keeps the initiator role up permanently rather than giving QuantaStor the dual-role behaviour, and {{Code|1=disabled}} means the initiator role is never created, which leaves a port switched out of target mode with no role at all. Check the parameter's own description with {{Code|1=modinfo qla2xxx_scst}} before setting it by hand.)''


'''Navigation:''' System Management → FC Target Ports → (right-click port) → Enable FC Target Port
'''QuantaStor does not report the negotiated link speed.''' There is no speed field on the FC target port object, in the grid or in {{Code|1=fcp-get}}. Read it on the appliance from the FC transport, along with what the adapter is capable of:


'''CLI:'''
<pre style="font-size: smaller">
<pre>
cat /sys/class/fc_host/host7/speed              # 8 Gbit
qs fiber-channel-port-enable --fc-target-port=<wwpn-or-id>
cat /sys/class/fc_host/host7/supported_speeds  # 8 Gbit, 16 Gbit, 32 Gbit
cat /sys/class/fc_host/host7/port_type          # NPort (fabric via point-to-point)
cat /sys/class/fc_host/host7/fabric_name        # 0x10000027f86e85cd
</pre>
</pre>


=== Disable (Return to Initiator Mode) ===
Take the host number from the port's Sysfs Path field, which reads {{Code|1=/sys/class/fc_host/host7}} and so on.


Disabling a port removes it from SCST and returns it to initiator mode. Active FC sessions on this port will be dropped.
A 16/32 Gb adapter that reports {{Code|1=8 Gbit}} is almost always being limited by the fabric rather than by itself: FC negotiates down to the lower of the two ends, so an adapter whose {{Code|1=supported_speeds}} starts at 8 Gbit and which lands on 8 Gbit is talking to an 8 Gb switch port. Compare {{Code|1=fabric_name}} across the ports -- ports reporting the same fabric WWN are on the same fabric, so if a slower adapter on that fabric is also running at its own maximum, the switch is the ceiling. Replacing the adapter will not help; the switch port, its SFP or the cable will.


'''Navigation:''' System Management → FC Target Ports → (right-click port) → Disable FC Target Port
== Target mode and initiator mode ==


'''CLI:'''
[[File:fcports_menu.png|thumb|right|700px|The context menu on an FC target port that is currently in target mode. The mode item swaps to '''Enable FC Target Mode...''' on a port that is in initiator mode.]]
<pre>
qs fiber-channel-port-disable --fc-target-port=<wwpn-or-id>
</pre>


== Assigning Volumes to FC Initiator Hosts ==
{{Navigation|Storage Management &rarr; Storage Systems ''(section)'' &rarr; ''select a Storage System'' &rarr; FC Ports ''(tab)'' &rarr; FC target port ''(select + right-click)''}}


FC LUN masking is managed at the storage volume level. Each host is identified by its initiator WWPN, and volumes are explicitly mapped to those hosts.
There is no toolbar button for these operations; they are on the context menu of a port in the FC Ports grid, and the menu offers only the mode you are not already in. A port in target mode shows '''Enable FC Initiator Mode...'''; a port in initiator mode shows '''Enable FC Target Mode...'''. '''Issue FC LIP''' and '''Properties...''' are always present.


=== Register a Host ===
Both dialogs are built the same way: an '''FC Port''' combo box listing every FC target port in the grid, a read-only '''Port Information''' group showing the selected port's '''State''' and '''Port WWN''', and OK/Cancel. The combo is pre-selected to the port you right-clicked, and changing it repoints the operation, so check it before clicking OK.


Before assigning volumes, register the initiator host and its WWPN.
=== Enable FC Target Mode ===


'''Navigation:''' Storage Management → Hosts → (toolbar) Create Host
[[File:fcports_targetmode.png|thumb|right|424px|The Enable Fibre Channel Target Mode dialog. There is no Force option -- enabling target mode has nothing to override.]]


'''CLI:'''
Enabling target mode registers the port with the SCST target driver so it starts presenting the LUNs assigned to it, and removes the initiator-mode marker that was keeping automatic re-enable away from the port. QuantaStor then re-runs fabric discovery and queues a LIP so clients notice the port.
<pre>
qs host-create --name=esxi-host-01 --description="VMware ESXi host"
</pre>


=== Add an FC Initiator Port to the Host ===
This dialog has no Force option, because there is nothing to force: a port with no LUNs mapped and no sessions has no state to lose by becoming a target.


'''Navigation:''' Storage Management → Hosts → (right-click host) → Add Initiator Port → enter initiator WWPN
=== Enable FC Initiator Mode ===


'''CLI:'''
[[File:fcports_initiatormode.png|thumb|right|424px|The Enable Fibre Channel Initiator Mode dialog. Force skips the active-session check.]]
<pre>
qs host-initiator-add --host=esxi-host-01 --wwpn=21:00:00:24:ff:8a:1b:2c
</pre>


=== Assign a Volume to the Host ===
Enabling initiator mode is how you disable target mode. It writes {{Code|1=0}} to the driver's per-port enable flag, so the port stops presenting its LUNs and every initiator logged in to it loses that path. It also writes a marker file for the port, which is what stops automatic re-enable from putting the port straight back into target mode -- so the choice survives a service restart and a reboot.


'''Navigation:''' Storage Management → Storage Volumes → (right-click volume) → Assign to Host
'''QuantaStor refuses this while the port has active sessions.''' You get an error naming the count:


'''CLI:'''
<pre style="font-size: smaller">
<pre>
There are 2 active sessions on Fiber Channel port '50:01:43:80:21:e0:e5:fc'.
qs volume-assign --volume=vol1 --host=esxi-host-01
Remove active sessions before switching to initiator mode.
</pre>
</pre>


QuantaStor automatically selects an available LUN number and programs the SCST ACL. The LUN assignment can be static (fixed) or dynamic (automatic):
Tick '''Force''' to skip that check and disable the port anyway. Do that only when you have already stopped I/O on the clients using it, or when you are deliberately removing a path from a multipathed client that has other healthy paths. On a port carrying the only path to a LUN, forcing this drops the client's storage.
 
<pre>
# Assign with a specific LUN number (static assignment)
qs volume-assign --volume=vol1 --host=esxi-host-01 --lun=5
</pre>


=== Unassign a Volume ===
Before disabling a port, check what is mapped to it and what is logged in to it. The following lists both on the appliance:


<pre>
<pre style="font-size: smaller">
qs volume-unassign --volume=vol1 --host=esxi-host-01
ls /sys/kernel/scst_tgt/targets/qla2x00t/51:40:2e:c0:01:7c:b8:ea/ini_groups/
ls /sys/kernel/scst_tgt/targets/qla2x00t/51:40:2e:c0:01:7c:b8:ea/sessions/
</pre>
</pre>


== Viewing Connected FC Initiators ==
An initiator group under {{Code|1=ini_groups}} whose {{Code|1=luns}} directory contains numbered entries means that port is serving storage to that WWPN. <code>[[QuantaStor CLI Command Reference#volume-session-list|qs volume-sn-list]]</code> gives the same session view from the management interface, with the FC WWPNs shown in its Target IQN and Initiator IQN columns.


Remote FC ports (initiators) that are visible through the fabric and connected to an FC target port are listed as remote ports.
== FC remote ports ==


'''Navigation:''' System Management → FC Target Ports → (expand port) → Remote Ports
[[File:fcports_remote.png|thumb|right|800px|The FC Remote Ports grid, grouped by the target port each remote WWPN was discovered through.]]


'''CLI:'''
An FC remote port is a WWPN that the appliance's own FC transport has discovered on the fabric -- typically a client's HBA port, but also the FC ports of other appliances and arrays in the same zone. QuantaStor builds the list by walking the remote-port entries the driver creates under each of its ports, so a single client WWPN discovered through four target ports produces four rows, one per path.
<pre>
# List all visible remote FC initiator ports
qs fc-remote-port-list
 
# Get details for a specific remote port
qs fc-remote-port-get --fc-remote-port=<id>
</pre>


Each remote port entry shows the initiator WWPN and which local target port it is visible through. If an expected initiator is not visible, verify FC switch zoning is configured correctly.
'''A port in target-only mode has no remote ports at all.''' This is the single most surprising thing about this view and it is not a fault. The Linux FC transport only creates remote-port entries for a port that has an initiator role, so on an appliance whose ports all read Mode {{Code|1=Target}}, <code>[[QuantaStor CLI Command Reference#fc-remote-port-list|qs fcrp-list]]</code> returns nothing and the FC Remote Ports grid is empty -- even while initiators are logged in and using LUNs. Put the appliance into dual mode with {{Code|1=qs-util enabledualmode}} if you want this view populated -- see [[Dual-mode FC configuration]]. To see who is logged in to a target-only port, read its SCST sessions instead, as shown above.


== Forcing Remote Port Discovery (LIP) ==
Two further points about the list:


The Loop Initialization Primitive (LIP) triggers fabric-wide device rediscovery. Issue a LIP if newly zoned initiator hosts are not appearing as remote ports.
* '''Rows are not aged out.''' When a port leaves initiator mode, or a client is unzoned, the driver keeps its remote-port entry and marks it not present, and QuantaStor keeps reporting it. Treat the list as a superset of what is currently reachable, and confirm anything you are relying on against the port's sessions.
* '''This list is what Add Host searches.''' The '''Select Initiator...''' button in [[Hosts and Host Groups]]' Add Host dialog is populated from the FC remote ports, de-duplicated by WWPN. That is the join between this page and host records: a WWPN has to be discoverable here for the picker to offer it, which is another reason the picker finds nothing on a target-only appliance. Type the WWPN in by hand in that case -- the host record does not care how it got there.


'''Navigation:''' System Management → FC Target Ports → (right-click port) → Issue LIP
For one remote port's detail, use <code>[[QuantaStor CLI Command Reference#fc-remote-port-get|qs fcrp-get]] --remote-port=&lt;WWPN&gt;</code>.


'''CLI:'''
== Issuing a LIP ==
<pre>
qs fiber-channel-port-issuelip --fc-target-port=<wwpn-or-id>
</pre>


To issue a LIP on all FC ports at once:
[[File:fcports_issuelip.png|thumb|right|424px|The Fibre Channel Issue LIP dialog. Force widens the operation to every FC port on the appliance.]]
<pre>
sudo /opt/osnexus/quantastor/bin/qs_fc_issue_lip.sh
</pre>


Remote ports are also re-scanned automatically every 10 seconds by the QuantaStor fabric manager.
{{Navigation|Storage Management &rarr; Storage Systems ''(section)'' &rarr; ''select a Storage System'' &rarr; FC Ports ''(tab)'' &rarr; FC target port ''(select + right-click)'' &rarr; Issue FC LIP}}


== WWN Emulation ==
A Loop Initialization Protocol reset makes the port re-initialize its fabric login, which prompts the switch and the initiators in the zone to rediscover what is behind it. The dialog describes it as forcing clients to discover presented FC target storage volumes, and that is its main use: reach for it when a client is not seeing a LUN you have just assigned, or when a newly zoned initiator is not turning up.


QuantaStor supports WWN emulation — presenting an alternate WWPN to the fabric instead of the physical HBA WWN. This is useful when migrating from another storage system where hosts already have ACLs programmed to a specific WWN.
'''Force means "all ports", not "harder".''' This is the one field on the dialog worth reading twice. Left unticked, the operation issues a LIP on the single port named in the FC Port combo. Ticked, it ignores the combo and issues a LIP on '''every''' FC port on that appliance, one after another with a short pause between them -- the task description changes to say so. On an appliance serving live LUNs from several ports, that briefly disturbs all of them rather than one. {{Code|1=qs-util issuelip}} on the appliance does the same all-ports operation.


WWN emulation is configured at the system level. Contact OSNEXUS support for setup procedures.
A LIP is comparatively safe -- it re-initializes a link that is already working rather than tearing down a configuration -- but it is not free. Initiators lose their login to that port and have to re-establish it, which they do on their own schedule; on a port with several clients logged in, some take longer than others to come back. Confirm afterwards that the port still reads Status {{Code|1=Online}} and Link State {{Code|1=Link Up - F_Port}}, and that the sessions you expect have returned.


The physical WWN is preserved in <code>portWwn</code> / <code>nodeWwn</code>; the active emulated WWN appears in <code>activePortWwn</code> / <code>activeNodeWwn</code>.
If a LIP appears to have no effect at all, check the port's Vendor field. QuantaStor only issues LIPs when it recognises at least one ALUA-capable adapter model in the system, and an adapter with an empty Vendor field has not been recognised. On such a system, issue the LIP from the appliance instead:


== FC Port Performance Monitoring ==
<pre style="font-size: smaller">
echo 1 > /sys/class/fc_host/host7/issue_lip
</pre>


QuantaStor includes a background FC port monitoring daemon (<code>qs-fcportmon</code>) that collects per-port statistics and writes them to InfluxDB for display in Grafana dashboards.
== Zoning is a prerequisite ==


=== Metrics Collected ===
'''QuantaStor cannot configure FC switch zoning, and has no command that attempts to.''' Zoning is done on the fabric, with the switch vendor's own management tools, and it has to be in place before anything on this page will work: the initiator's WWPN and the target port's WWPN must be members of the same zone before the initiator can log in, before it will appear as an FC remote port, and before an assigned volume can reach it.


{| class="wikitable"
Zone the WWPN shown in the port's '''Active Port WWN''' field. That is the WWPN the port actually presents to the fabric, and it is normally identical to Port WWN -- the two differ only where a WWN emulation mode has been configured to make the appliance present a different identity, which is a support-assisted setup. Where they differ, Port WWN is the adapter's burned-in identity and Active Port WWN is what the switch sees.
! Metric !! Description
|-
| <code>fc_port_tx_iops</code> || Transmitted frames per second
|-
| <code>fc_port_rx_iops</code> || Received frames per second
|-
| <code>fc_port_tx_bytes</code> || Transmitted bytes per second
|-
| <code>fc_port_rx_bytes</code> || Received bytes per second
|-
| <code>fc_port_ping</code> || Round-trip latency to remote port (via fcping)
|}


=== Manual Statistics Inspection ===
== Assigning a storage volume over FC ==


<pre>
Assignment over FC is the same operation as assignment over iSCSI, and [[Storage Volumes]] owns it: create a host record carrying the client's FC WWPN, then assign the volume to that host. [[Hosts and Host Groups]] owns the host record and its initiator list, including how a WWPN is added and how the '''Select Initiator...''' search works. From the CLI:
# Raw statistics from the kernel (hex values)
cat /sys/class/fc_host/host5/statistics/tx_frames
cat /sys/class/fc_host/host5/statistics/rx_frames
cat /sys/class/fc_host/host5/statistics/tx_words
cat /sys/class/fc_host/host5/statistics/rx_words


# Check port state
<code>[[QuantaStor CLI Command Reference#host-add|qs host-add]] --hostname=&lt;name&gt; --iqn=&lt;WWPN&gt;</code>
cat /sys/class/fc_host/host5/port_state


# Check fabric name the port is connected to
<code>[[QuantaStor CLI Command Reference#volume-assign|qs volume-assign]] --volume=&lt;volume&gt; --host-list=&lt;host&gt;</code>
cat /sys/class/fc_host/host5/fabric_name
</pre>


Replace <code>host5</code> with the appropriate host number shown in the FC target port listing.
The {{Code|1=--iqn}} argument takes an FC WWPN as readily as an iSCSI IQN, and QuantaStor records it as an FC initiator by its format.


=== FC Monitoring Service ===
What the assignment programs on the appliance is worth knowing, because it explains what the client then sees. QuantaStor creates an initiator group named after the host's WWPN under '''every''' FC target port on the appliance, and maps two LUNs into each: LUN 0 is a QuantaStor control device, and the volume lands at LUN 1 and upwards. When the volume's pool belongs to an HA group, the same groups and LUNs are programmed on every appliance in that group, so the client gets paths to the standby appliances as well as the active one.


<pre>
'''The client therefore sees one SCSI device per path, not one per volume.''' One initiator port against seven enabled target ports across two appliances yields seven block devices for a single volume. They identify themselves with vendor {{Code|1=OSNEXUS}} and model {{Code|1=QUANTASTOR}}, which is a quick way to pick QuantaStor LUNs out of a client's device list:
# Check service status
systemctl status qs-fcportmon


# Run a one-time metric collection (debug)
<pre style="font-size: smaller">
sudo /opt/osnexus/quantastor/scripts/qs_fcportmon.py --runonce --showports
echo "- - -" > /sys/class/scsi_host/host10/scan
lsblk -d -o NAME,SIZE,VENDOR,MODEL | grep OSNEXUS
</pre>
</pre>
Coalescing those paths into one device is the client's job -- see [[Multipath Configuration]]. Do not skip it: the paths are not interchangeable. QuantaStor advertises ALUA, marking the paths through the appliance that currently owns the pool as active and the paths through the others as standby. A read issued to a standby path returns no data, so a client that has picked one without a multipath layer above it looks like it has an empty disk rather than a wrong path. On a forced failover the active and standby roles swap, and clients see the session on the old owner drop -- [[HA Cluster Setup (JBODs)]] covers that behaviour.


== Troubleshooting ==
== Troubleshooting ==


=== FC Port Not Appearing as Target ===
=== A LUN does not appear on an FC client ===


# Confirm the HBA is a supported QLogic model: <code>qs fiber-channel-port-list</code> — non-QLogic HBAs will show but cannot be enabled as targets.
Work down the path, from the fabric inwards:
# Verify the SCST driver is loaded: <code>ls /sys/kernel/scst_tgt/targets/qla2x00t/</code>
# Check the QuantaStor service log for SCST errors: <code>journalctl -u quantastor --since "10 minutes ago" | grep -i scst</code>
# Confirm the port is enabled: <code>qs fiber-channel-port-get --fc-target-port=<wwpn></code> — check <code>isTargetModeEnabled</code>.


=== Initiator Host Not Visible as Remote Port ===
# '''Zoning.''' Confirm the client's WWPN and the target port's Active Port WWN are in the same zone on the switch. Nothing else on this list matters until they are.
# '''Port mode and link.''' In the FC Ports grid, confirm the target port reads Mode {{Code|1=Target}}, Status {{Code|1=Online}} and Link State {{Code|1=Link Up - F_Port}}.
# '''The WWPN on the host record.''' Confirm the WWPN in [[Hosts and Host Groups]] matches the client's HBA exactly. A single wrong digit produces exactly this symptom and nothing anywhere reports an error, because a host record with a WWPN that no initiator uses is perfectly valid.
# '''The assignment.''' Confirm the volume is assigned to that host with <code>[[QuantaStor CLI Command Reference#volume-assign-list|qs va-list]]</code>.
# '''The mapping on the appliance.''' Confirm the initiator group and LUN exist under the target port. An empty or missing group here means the assignment did not reach the driver: <pre style="font-size: smaller">ls /sys/kernel/scst_tgt/targets/qla2x00t/&lt;target WWPN&gt;/ini_groups/&lt;client WWPN&gt;/luns/</pre>
# '''Rescan on the client.''' The client will not notice a new LUN until its HBA rescans. On Linux, write {{Code|1=- - -}} to the adapter's {{Code|1=scan}} node as shown above; on other platforms use that platform's storage adapter rescan.
# '''Issue a LIP''' on the target port, which prompts the client to rediscover rather than waiting for it to.


# Confirm FC switch zoning includes both the initiator WWPN and the target WWPN in the same zone.
If a device does appear but reads as empty or zero-length, it is a standby ALUA path rather than a broken one. Check which appliance currently owns the pool, and configure multipath on the client.
# Issue a LIP to trigger re-discovery: <code>qs fiber-channel-port-issuelip --fc-target-port=<wwpn></code>
# Verify the physical FC link is up: <code>cat /sys/class/fc_host/host5/port_state</code> — should read <code>Online</code>.
# Confirm the target port is online on the switch (check switch port status for the connected SFP/cable).


=== Volume Not Visible to Host After Assignment ===
=== An initiator is not listed as an FC remote port ===


# Confirm the initiator WWPN registered on the host matches the actual HBA WWPN on the initiating server.
If every port on the appliance reads Mode {{Code|1=Target}}, this is expected and not a fault -- see [[#FC remote ports|FC remote ports]]. Check the target port's SCST sessions instead; an initiator that is logged in appears there whatever mode the port is in. If it is absent from the sessions too, the problem is upstream: zoning, the link, or the client's own HBA.
# On the initiator server, rescan the HBA: for Linux, run <code>echo "- - -" > /sys/class/scsi_host/host0/scan</code> or use <code>rescan-scsi-bus.sh</code>.
# For VMware ESXi, rescan the storage adapters from vCenter: Storage → Adapters → Rescan.
# Verify the LUN assignment is present: <code>qs volume-get --volume=vol1</code> — check the host assignment.
# Check the SCST ACL entry is programmed: <code>ls /sys/kernel/scst_tgt/targets/qla2x00t/<target_wwn>/ini_groups/</code>


=== Active Sessions Blocking Port Disable ===
=== Enable FC Initiator Mode is refused ===


If disabling an FC port fails because active sessions exist, list and force-close them:
The port has active sessions. Stop I/O on the clients using it and let their sessions drop, or tick '''Force''' if you accept dropping them. As a last resort a single session can be closed from the appliance:
<pre>
# List active sessions on a target port (replace WWN)
ls /sys/kernel/scst_tgt/targets/qla2x00t/21:00:00:24:ff:1a:2b:3c/sessions/


# Force-close a specific initiator session
<pre style="font-size: smaller">
echo "1" > /sys/kernel/scst_tgt/targets/qla2x00t/<target_wwn>/sessions/<initiator_wwn>/force_close
echo 1 > /sys/kernel/scst_tgt/targets/qla2x00t/&lt;target WWPN&gt;/sessions/&lt;initiator WWPN&gt;/force_close
</pre>
</pre>


=== Poor FC Throughput ===
=== Throughput is lower than the adapter's rating ===


# Check the HBA link speed negotiated with the switch: <code>cat /sys/class/fc_host/host5/speed</code> — should match the HBA and SFP capability (e.g., <code>16 Gbit</code>).
Start with the negotiated speed rather than the adapter's label -- see [[#Reading port state, mode, speed and topology|Reading port state, mode, speed and topology]] for how to read it and why a 32 Gb adapter can legitimately run at 8 Gbit. If the negotiated speed is what you expect, the per-port frame and error counters under {{Code|1=/sys/class/fc_host/host7/statistics/}} distinguish a throughput problem from a physical-layer one: {{Code|1=error_frames}}, {{Code|1=dumped_frames}} and the CRC counters climbing under load point at the cable, the SFP or the switch port rather than at the appliance. QuantaStor also ships a per-port metric collector, {{Code|1=qs-fcportmon}}, which publishes transmit and receive IOPS and byte rates for the dashboards; it is a systemd service and has to be running for those metrics to exist.
# Verify the SFP type matches the cable type (SR vs LW) and switch port configuration.
# Check for CRC errors on the switch port — CRC errors indicate a physical layer problem (bad cable, dirty SFP, or SFP mismatch).
# Review FC port metrics via the Grafana dashboard for sustained throughput baselines.


== CLI Quick Reference ==
Note the FC HBA is not one of the devices the {{Code|1=hw-controller-list}} view covers -- [[Hardware Controllers & Enclosures]] documents SAS and RAID controllers, and FC adapters do not appear there. The FC Ports tab is the only place the adapter's model, firmware and driver versions are reported.
 
== CLI reference ==


{| class="wikitable"
{| class="wikitable"
! Command !! Short Form !! Description
! Command !! Short form !! Purpose
|-
|-
| <code>fiber-channel-port-list</code> || <code>fcp-list</code> || List all FC target ports
| <code>[[QuantaStor CLI Command Reference#fiber-channel-port-list|fiber-channel-port-list]]</code> || {{Code|1=fcp-list}} || List FC target ports. Optionally scope with {{Code|1=--storage-system}}.
|-
|-
| <code>fiber-channel-port-get</code> || <code>fcp-get</code> || Get details for a specific FC port
| <code>[[QuantaStor CLI Command Reference#fiber-channel-port-get|fiber-channel-port-get]]</code> || {{Code|1=fcp-get}} || Full detail for one port, by {{Code|1=--port=&lt;WWPN&gt;}} or ID.
|-
|-
| <code>fiber-channel-port-enable</code> || <code>fcp-enable</code> || Enable target mode on a port
| <code>[[QuantaStor CLI Command Reference#fiber-channel-port-enable|fiber-channel-port-enable]]</code> || {{Code|1=fcp-enable}} || Switch a port into target mode.
|-
|-
| <code>fiber-channel-port-disable</code> || <code>fcp-disable</code> || Disable target mode on a port
| <code>[[QuantaStor CLI Command Reference#fiber-channel-port-disable|fiber-channel-port-disable]]</code> || {{Code|1=fcp-disable}} || Switch a port into initiator mode. Add {{Code|1=--flags=force}} to skip the active-session check.
|-
|-
| <code>fiber-channel-port-issuelip</code> || <code>fcp-issuelip</code> || Issue LIP to force remote port rediscovery
| <code>[[QuantaStor CLI Command Reference#fiber-channel-port-issuelip|fiber-channel-port-issuelip]]</code> || {{Code|1=fcp-issuelip}} || Issue a LIP on one port, or on all ports on the appliance with {{Code|1=--flags=force}}.
|-
|-
| <code>fc-remote-port-list</code> || <code>fcrp-list</code> || List all visible remote FC initiator ports
| <code>[[QuantaStor CLI Command Reference#fc-remote-port-list|fc-remote-port-list]]</code> || {{Code|1=fcrp-list}} || List remote FC WWPNs discovered on the fabric.
|-
|-
| <code>fc-remote-port-get</code> || <code>fcrp-get</code> || Get details for a specific remote port
| <code>[[QuantaStor CLI Command Reference#fc-remote-port-get|fc-remote-port-get]]</code> || {{Code|1=fcrp-get}} || Detail for one remote port, by {{Code|1=--remote-port=&lt;WWPN&gt;}}.
|-
| <code>host-create</code> || — || Register a new initiator host
|-
| <code>host-initiator-add</code> || — || Add a WWPN to a host
|-
| <code>volume-assign</code> || — || Assign a volume (LUN) to a host
|-
| <code>volume-unassign</code> || — || Remove a volume assignment from a host
|}
|}


== See Also ==
Every one of these takes the port as {{Code|1=--port}}, not as a port-specific argument name, and every one accepts either the WWPN or the object's UUID. There is no {{Code|1=fc-port-list}} or {{Code|1=fc-target-port-list}}; the target port commands are all spelled {{Code|1=fiber-channel-port-*}} and only the remote port commands use the {{Code|1=fc-}} prefix.
 
== Related pages ==
 
* [[Hosts and Host Groups]] -- host records, FC WWPN initiators, and the '''Select Initiator...''' search that reads FC remote ports
* [[Storage Volumes]] -- creating volumes, assigning them to hosts, and access modes
* [[Dual-mode FC configuration]] -- loading the QLogic driver in dual initiator + target mode
* [[Multipath Configuration]] -- coalescing the one-device-per-path view an FC assignment produces on the client
* [[Hardware Controllers & Enclosures]] -- SAS and RAID controllers, which are a separate inventory from FC adapters
* [[HA Cluster Setup (JBODs)]] -- ALUA path roles and what clients see on a failover
* [[QuantaStor CLI Command Reference]] -- full argument lists for the commands above


* [[Storage_Pools,_Volumes,_System|Storage Volumes]] — Creating volumes and managing LUN assignments
----
* [[HA_Cluster_Setup_(external_SAN_%26_JBODs)|HA Cluster Setup]] — Using FC for back-end SAN connectivity in HA pairs
<small>''Verified against QuantaStor 6.9.0.''</small>
* [[Multipath_Configuration|Multipath Configuration]] — Configuring MPIO for FC paths on the initiator side
* [[Performance_Monitoring_%26_Tuning|Performance Monitoring & Tuning]] — FC throughput dashboards and metrics


[[Category:admin_guide]]
[[Category:admin_guide]]

Revision as of 05:34, 4 September 2026

QuantaStor presents storage volumes as LUNs over Fibre Channel through the FC target ports on its QLogic host bus adapters. This page covers how those ports are discovered and read, how to switch a port between target and initiator mode, how initiators on the fabric appear as FC remote ports, and how a volume assignment reaches an FC client.

Section Purpose
How QuantaStor discovers FC target ports Where port objects come from, and why target mode is on by default
Where FC ports appear in the interface The FC Ports tab and the two grids on it
Reading port state, mode, speed and topology State, Link State, Status, Mode -- and the one value QuantaStor does not report
Target mode and initiator mode Enabling and disabling a port, and what happens to its LUNs
FC remote ports Initiators discovered on the fabric, and the mode they require
Issuing a LIP Forcing rediscovery, and when that is the right tool
Zoning is a prerequisite What you must configure on the switch, because QuantaStor cannot
Assigning a storage volume over FC What an assignment programs, and what the client sees
Troubleshooting A LUN that does not appear, a refused disable, poor throughput
CLI reference The seven FC commands

How QuantaStor discovers FC target ports

QuantaStor's fabric manager scans the Linux FC transport roughly once a minute and creates one FC target port object for every port it finds, reading the model, firmware and driver versions, PCI slot information, WWPN, WWNN, link state and fabric WWN from the adapter. You do not add, remove or configure FC ports -- they appear when the adapter is installed and the driver loads, and each port's object identity follows its physical WWPN.

Target mode is the mode QuantaStor puts a port into, not one you have to select. On every discovery pass, any port that is target-mode capable and does not carry an explicit initiator-mode marker is switched into target mode; when that happens outside of service startup, QuantaStor raises an alert saying so. The practical consequence is that a port disabled outside QuantaStor -- by writing to the driver's sysfs interface directly, for instance -- is turned back on within a minute. Use Enable FC Initiator Mode instead, which records the choice so it sticks.

Target mode capability comes from the SCST QLogic target driver, which exposes a control directory per port at /sys/kernel/scst_tgt/targets/qla2x00t/<WWPN>/. A port with no entry there is listed by QuantaStor but cannot be switched into target mode, and the enable operation fails with a message naming the missing path.

Where FC ports appear in the interface

The FC Ports tab, grouped by Storage System. The four ports on the upper appliance are in Target mode; the four on the lower one are in Target + Initiator mode.
Navigation: Storage Management → Storage Systems (section) → select a Storage System → FC Ports (tab)

The FC Ports tab carries two grids. The upper one lists FC target ports, grouped by Storage System; the lower one lists FC remote ports. Select the grid node to see every port in the grid, or a single Storage System to scope both grids to that appliance.

The target port grid shows Name, Model, State, Link State, Status, Mode, Port WWN and Storage System WWN. Name and Port WWN both render the WWPN in the colon-separated form the fabric uses, such as 50:01:43:80:18:6a:25:68; Storage System WWN is the adapter's node WWN (WWNN), which for a QLogic port is normally the WWPN plus one. Two further columns, State and Description, are hidden by default and can be turned on from the column menu -- Description carries the adapter's own product string, for example HPE SN1600Q 32Gb 2p FC HBA.

FC target ports also appear as children of their Storage System in the left tree, and in the FC Portals tab of the Portal Group dialogs.

For the full field list on one port, open the docked Properties panel from the strip on the far right edge, or run qs fcp-get --port=<WWPN>. Both add Firmware Version, Driver Version, PCI Info, Fabric WWN, Active Port WWN, Active Node WWN, the sysfs path and the device number.

Reading port state, mode, speed and topology

Four columns describe a port's health, and they mean different things:

Column Source Reading it
State QuantaStor's own object state Normal in ordinary operation. QuantaStor sets it to Offline with the detail FC Port is reporting 'Link Down' status, please check cable connections when the link goes down.
Link State the target driver Link Up - F_Port on a switched fabric. The suffix is the topology the port negotiated: F_Port means it is attached point-to-point to a fabric switch port, which is what you want.
Status the FC transport's port state Online when the port has logged in to the fabric.
Mode the driver's active role Target, Initiator or Target + Initiator. See below.

Which modes a port can hold is an appliance-wide driver setting, not a per-port one. The QLogic target driver takes a qlini_mode parameter that decides when the initiator role exists at all, and QuantaStor runs the driver's own default, exclusive: the initiator role is active on load, is given up when target mode is enabled on a port, and comes back on that port when target mode is disabled again. That is what makes each port either Target or Initiator but never both, and it is what lets Enable FC Initiator Mode repurpose a port at all.

Target + Initiator requires the driver to be loaded with qlini_mode=dual instead, which makes every port on the appliance a target and an initiator at once. Set it with qs-util enabledualmode and reverse it with qs-util disabledualmode, which write dual and exclusive respectively and need a reboot to take effect; Dual-mode FC configuration covers the procedure and the driver reload. Dual mode is what you want when the appliance must also consume FC storage from another array, and it is also the only way to populate the FC Remote Ports view. Target-only is the right setting for a pure storage appliance.

(Note: qlini_mode also accepts enabled and disabled, which are not the values to use here. enabled keeps the initiator role up permanently rather than giving QuantaStor the dual-role behaviour, and disabled means the initiator role is never created, which leaves a port switched out of target mode with no role at all. Check the parameter's own description with modinfo qla2xxx_scst before setting it by hand.)

QuantaStor does not report the negotiated link speed. There is no speed field on the FC target port object, in the grid or in fcp-get. Read it on the appliance from the FC transport, along with what the adapter is capable of:

cat /sys/class/fc_host/host7/speed              # 8 Gbit
cat /sys/class/fc_host/host7/supported_speeds   # 8 Gbit, 16 Gbit, 32 Gbit
cat /sys/class/fc_host/host7/port_type          # NPort (fabric via point-to-point)
cat /sys/class/fc_host/host7/fabric_name        # 0x10000027f86e85cd

Take the host number from the port's Sysfs Path field, which reads /sys/class/fc_host/host7 and so on.

A 16/32 Gb adapter that reports 8 Gbit is almost always being limited by the fabric rather than by itself: FC negotiates down to the lower of the two ends, so an adapter whose supported_speeds starts at 8 Gbit and which lands on 8 Gbit is talking to an 8 Gb switch port. Compare fabric_name across the ports -- ports reporting the same fabric WWN are on the same fabric, so if a slower adapter on that fabric is also running at its own maximum, the switch is the ceiling. Replacing the adapter will not help; the switch port, its SFP or the cable will.

Target mode and initiator mode

The context menu on an FC target port that is currently in target mode. The mode item swaps to Enable FC Target Mode... on a port that is in initiator mode.
Navigation: Storage Management → Storage Systems (section) → select a Storage System → FC Ports (tab) → FC target port (select + right-click)

There is no toolbar button for these operations; they are on the context menu of a port in the FC Ports grid, and the menu offers only the mode you are not already in. A port in target mode shows Enable FC Initiator Mode...; a port in initiator mode shows Enable FC Target Mode.... Issue FC LIP and Properties... are always present.

Both dialogs are built the same way: an FC Port combo box listing every FC target port in the grid, a read-only Port Information group showing the selected port's State and Port WWN, and OK/Cancel. The combo is pre-selected to the port you right-clicked, and changing it repoints the operation, so check it before clicking OK.

Enable FC Target Mode

The Enable Fibre Channel Target Mode dialog. There is no Force option -- enabling target mode has nothing to override.

Enabling target mode registers the port with the SCST target driver so it starts presenting the LUNs assigned to it, and removes the initiator-mode marker that was keeping automatic re-enable away from the port. QuantaStor then re-runs fabric discovery and queues a LIP so clients notice the port.

This dialog has no Force option, because there is nothing to force: a port with no LUNs mapped and no sessions has no state to lose by becoming a target.

Enable FC Initiator Mode

The Enable Fibre Channel Initiator Mode dialog. Force skips the active-session check.

Enabling initiator mode is how you disable target mode. It writes 0 to the driver's per-port enable flag, so the port stops presenting its LUNs and every initiator logged in to it loses that path. It also writes a marker file for the port, which is what stops automatic re-enable from putting the port straight back into target mode -- so the choice survives a service restart and a reboot.

QuantaStor refuses this while the port has active sessions. You get an error naming the count:

There are 2 active sessions on Fiber Channel port '50:01:43:80:21:e0:e5:fc'.
Remove active sessions before switching to initiator mode.

Tick Force to skip that check and disable the port anyway. Do that only when you have already stopped I/O on the clients using it, or when you are deliberately removing a path from a multipathed client that has other healthy paths. On a port carrying the only path to a LUN, forcing this drops the client's storage.

Before disabling a port, check what is mapped to it and what is logged in to it. The following lists both on the appliance:

ls /sys/kernel/scst_tgt/targets/qla2x00t/51:40:2e:c0:01:7c:b8:ea/ini_groups/
ls /sys/kernel/scst_tgt/targets/qla2x00t/51:40:2e:c0:01:7c:b8:ea/sessions/

An initiator group under ini_groups whose luns directory contains numbered entries means that port is serving storage to that WWPN. qs volume-sn-list gives the same session view from the management interface, with the FC WWPNs shown in its Target IQN and Initiator IQN columns.

FC remote ports

The FC Remote Ports grid, grouped by the target port each remote WWPN was discovered through.

An FC remote port is a WWPN that the appliance's own FC transport has discovered on the fabric -- typically a client's HBA port, but also the FC ports of other appliances and arrays in the same zone. QuantaStor builds the list by walking the remote-port entries the driver creates under each of its ports, so a single client WWPN discovered through four target ports produces four rows, one per path.

A port in target-only mode has no remote ports at all. This is the single most surprising thing about this view and it is not a fault. The Linux FC transport only creates remote-port entries for a port that has an initiator role, so on an appliance whose ports all read Mode Target, qs fcrp-list returns nothing and the FC Remote Ports grid is empty -- even while initiators are logged in and using LUNs. Put the appliance into dual mode with qs-util enabledualmode if you want this view populated -- see Dual-mode FC configuration. To see who is logged in to a target-only port, read its SCST sessions instead, as shown above.

Two further points about the list:

  • Rows are not aged out. When a port leaves initiator mode, or a client is unzoned, the driver keeps its remote-port entry and marks it not present, and QuantaStor keeps reporting it. Treat the list as a superset of what is currently reachable, and confirm anything you are relying on against the port's sessions.
  • This list is what Add Host searches. The Select Initiator... button in Hosts and Host Groups' Add Host dialog is populated from the FC remote ports, de-duplicated by WWPN. That is the join between this page and host records: a WWPN has to be discoverable here for the picker to offer it, which is another reason the picker finds nothing on a target-only appliance. Type the WWPN in by hand in that case -- the host record does not care how it got there.

For one remote port's detail, use qs fcrp-get --remote-port=<WWPN>.

Issuing a LIP

The Fibre Channel Issue LIP dialog. Force widens the operation to every FC port on the appliance.
Navigation: Storage Management → Storage Systems (section) → select a Storage System → FC Ports (tab) → FC target port (select + right-click) → Issue FC LIP

A Loop Initialization Protocol reset makes the port re-initialize its fabric login, which prompts the switch and the initiators in the zone to rediscover what is behind it. The dialog describes it as forcing clients to discover presented FC target storage volumes, and that is its main use: reach for it when a client is not seeing a LUN you have just assigned, or when a newly zoned initiator is not turning up.

Force means "all ports", not "harder". This is the one field on the dialog worth reading twice. Left unticked, the operation issues a LIP on the single port named in the FC Port combo. Ticked, it ignores the combo and issues a LIP on every FC port on that appliance, one after another with a short pause between them -- the task description changes to say so. On an appliance serving live LUNs from several ports, that briefly disturbs all of them rather than one. qs-util issuelip on the appliance does the same all-ports operation.

A LIP is comparatively safe -- it re-initializes a link that is already working rather than tearing down a configuration -- but it is not free. Initiators lose their login to that port and have to re-establish it, which they do on their own schedule; on a port with several clients logged in, some take longer than others to come back. Confirm afterwards that the port still reads Status Online and Link State Link Up - F_Port, and that the sessions you expect have returned.

If a LIP appears to have no effect at all, check the port's Vendor field. QuantaStor only issues LIPs when it recognises at least one ALUA-capable adapter model in the system, and an adapter with an empty Vendor field has not been recognised. On such a system, issue the LIP from the appliance instead:

echo 1 > /sys/class/fc_host/host7/issue_lip

Zoning is a prerequisite

QuantaStor cannot configure FC switch zoning, and has no command that attempts to. Zoning is done on the fabric, with the switch vendor's own management tools, and it has to be in place before anything on this page will work: the initiator's WWPN and the target port's WWPN must be members of the same zone before the initiator can log in, before it will appear as an FC remote port, and before an assigned volume can reach it.

Zone the WWPN shown in the port's Active Port WWN field. That is the WWPN the port actually presents to the fabric, and it is normally identical to Port WWN -- the two differ only where a WWN emulation mode has been configured to make the appliance present a different identity, which is a support-assisted setup. Where they differ, Port WWN is the adapter's burned-in identity and Active Port WWN is what the switch sees.

Assigning a storage volume over FC

Assignment over FC is the same operation as assignment over iSCSI, and Storage Volumes owns it: create a host record carrying the client's FC WWPN, then assign the volume to that host. Hosts and Host Groups owns the host record and its initiator list, including how a WWPN is added and how the Select Initiator... search works. From the CLI:

qs host-add --hostname=<name> --iqn=<WWPN>

qs volume-assign --volume=<volume> --host-list=<host>

The --iqn argument takes an FC WWPN as readily as an iSCSI IQN, and QuantaStor records it as an FC initiator by its format.

What the assignment programs on the appliance is worth knowing, because it explains what the client then sees. QuantaStor creates an initiator group named after the host's WWPN under every FC target port on the appliance, and maps two LUNs into each: LUN 0 is a QuantaStor control device, and the volume lands at LUN 1 and upwards. When the volume's pool belongs to an HA group, the same groups and LUNs are programmed on every appliance in that group, so the client gets paths to the standby appliances as well as the active one.

The client therefore sees one SCSI device per path, not one per volume. One initiator port against seven enabled target ports across two appliances yields seven block devices for a single volume. They identify themselves with vendor OSNEXUS and model QUANTASTOR, which is a quick way to pick QuantaStor LUNs out of a client's device list:

echo "- - -" > /sys/class/scsi_host/host10/scan
lsblk -d -o NAME,SIZE,VENDOR,MODEL | grep OSNEXUS

Coalescing those paths into one device is the client's job -- see Multipath Configuration. Do not skip it: the paths are not interchangeable. QuantaStor advertises ALUA, marking the paths through the appliance that currently owns the pool as active and the paths through the others as standby. A read issued to a standby path returns no data, so a client that has picked one without a multipath layer above it looks like it has an empty disk rather than a wrong path. On a forced failover the active and standby roles swap, and clients see the session on the old owner drop -- HA Cluster Setup (JBODs) covers that behaviour.

Troubleshooting

A LUN does not appear on an FC client

Work down the path, from the fabric inwards:

  1. Zoning. Confirm the client's WWPN and the target port's Active Port WWN are in the same zone on the switch. Nothing else on this list matters until they are.
  2. Port mode and link. In the FC Ports grid, confirm the target port reads Mode Target, Status Online and Link State Link Up - F_Port.
  3. The WWPN on the host record. Confirm the WWPN in Hosts and Host Groups matches the client's HBA exactly. A single wrong digit produces exactly this symptom and nothing anywhere reports an error, because a host record with a WWPN that no initiator uses is perfectly valid.
  4. The assignment. Confirm the volume is assigned to that host with qs va-list.
  5. The mapping on the appliance. Confirm the initiator group and LUN exist under the target port. An empty or missing group here means the assignment did not reach the driver:
    ls /sys/kernel/scst_tgt/targets/qla2x00t/<target WWPN>/ini_groups/<client WWPN>/luns/
  6. Rescan on the client. The client will not notice a new LUN until its HBA rescans. On Linux, write - - - to the adapter's scan node as shown above; on other platforms use that platform's storage adapter rescan.
  7. Issue a LIP on the target port, which prompts the client to rediscover rather than waiting for it to.

If a device does appear but reads as empty or zero-length, it is a standby ALUA path rather than a broken one. Check which appliance currently owns the pool, and configure multipath on the client.

An initiator is not listed as an FC remote port

If every port on the appliance reads Mode Target, this is expected and not a fault -- see FC remote ports. Check the target port's SCST sessions instead; an initiator that is logged in appears there whatever mode the port is in. If it is absent from the sessions too, the problem is upstream: zoning, the link, or the client's own HBA.

Enable FC Initiator Mode is refused

The port has active sessions. Stop I/O on the clients using it and let their sessions drop, or tick Force if you accept dropping them. As a last resort a single session can be closed from the appliance:

echo 1 > /sys/kernel/scst_tgt/targets/qla2x00t/<target WWPN>/sessions/<initiator WWPN>/force_close

Throughput is lower than the adapter's rating

Start with the negotiated speed rather than the adapter's label -- see Reading port state, mode, speed and topology for how to read it and why a 32 Gb adapter can legitimately run at 8 Gbit. If the negotiated speed is what you expect, the per-port frame and error counters under /sys/class/fc_host/host7/statistics/ distinguish a throughput problem from a physical-layer one: error_frames, dumped_frames and the CRC counters climbing under load point at the cable, the SFP or the switch port rather than at the appliance. QuantaStor also ships a per-port metric collector, qs-fcportmon, which publishes transmit and receive IOPS and byte rates for the dashboards; it is a systemd service and has to be running for those metrics to exist.

Note the FC HBA is not one of the devices the hw-controller-list view covers -- Hardware Controllers & Enclosures documents SAS and RAID controllers, and FC adapters do not appear there. The FC Ports tab is the only place the adapter's model, firmware and driver versions are reported.

CLI reference

Command Short form Purpose
fiber-channel-port-list fcp-list List FC target ports. Optionally scope with --storage-system.
fiber-channel-port-get fcp-get Full detail for one port, by --port=<WWPN> or ID.
fiber-channel-port-enable fcp-enable Switch a port into target mode.
fiber-channel-port-disable fcp-disable Switch a port into initiator mode. Add --flags=force to skip the active-session check.
fiber-channel-port-issuelip fcp-issuelip Issue a LIP on one port, or on all ports on the appliance with --flags=force.
fc-remote-port-list fcrp-list List remote FC WWPNs discovered on the fabric.
fc-remote-port-get fcrp-get Detail for one remote port, by --remote-port=<WWPN>.

Every one of these takes the port as --port, not as a port-specific argument name, and every one accepts either the WWPN or the object's UUID. There is no fc-port-list or fc-target-port-list; the target port commands are all spelled fiber-channel-port-* and only the remote port commands use the fc- prefix.

Related pages


Verified against QuantaStor 6.9.0.