Fibre Channel
The Linux SCSI Target Wiki
m |
m |
||
Line 319: | Line 319: | ||
* [[RTS OS]], [[targetcli]] | * [[RTS OS]], [[targetcli]] | ||
* [[Target]] | * [[Target]] | ||
- | * | + | * [[Fibre Channel over Ethernet|FCoE]], [[InfiniBand]], [[iSCSI]], [[tcm_loop]], [[vHost]] |
== Notes == | == Notes == |
Revision as of 23:43, 7 August 2012
![]() | |
---|---|
![]() Fibre Channel fabric module(s) | |
Original author(s) |
Nicholas Bellinger Andrew Vasquez Madhu Iyengar |
Developer(s) | Datera, Inc. |
Initial release | July 21, 2012 |
Stable release | 4.1.0 / June 20, 2012 |
Preview release | 4.2.0-rc5 / June 28, 2012 |
Development status | Production |
Written in | C |
Operating system | Linux |
Type | Fabric module |
License | GNU General Public License |
Website | datera.io |
- See Target for a complete overview over all fabric modules.
Fibre Channel (FC) provides drivers for various FC Host Bus Adapters (HBAs). Fibre Channel is a gigabit-speed network technology primarily used for storage networking.
Contents |
Overview
Fibre Channel is standardized in the T11 Technical Committee of the Inter National Committee for Information Technology Standards (INCITS), an American National Standards Institute (ANSI) - accredited standards committee.
Fibre Channel was used primarily in the supercomputer field, but has become the standard connection type for storage area networks (SAN) in enterprise storage. Despite its name, Fibre Channel signaling can run on both twisted pair copper wire and fiber-optic cables.
The Fibre Channel Protocol (FCP) is a transport protocol (similar to TCP used in IP networks) which predominantly transports SCSI commands over Fibre Channel networks.
Hardware support
The following Fiber Channel HBAs and ASICs from QLogic are supported:
- QLogic 2400 Series (single-port QLx246x), 4GBFC
- QLogic 2500 Series (dual-port QLE256x), 8GBFC
- QLogic 2600 Series (dual-port), 16 GBFC, incl. high-speed and SR-IOV extensions
The QLogic fabric module (qla2xxx.ko) went upstream into the Linux kernel 3.5 on 5/31/2012.[1]
targetcli
targetcli from Datera, Inc. is used to configure Fibre Channel targets. targetcli aggregates service modules via a core library, and exports them through an API to the Unified Target, to provide a unified single-node SAN configuration shell, independently of the underlying fabric(s).
Startup
targetcli is invoked by running targetcli as root from the command prompt of the underlying OS shell.
# targetcli Welcome to targetcli: Copyright (c) 2012 by RisingTide Systems LLC. All rights reserved. Visit us at http://www.risingtidesystems.com. Using ib_srpt fabric module. Using qla2xxx fabric module. Using iscsi fabric module. Using loopback fabric module. /> qla2xxx/ info Fabric module name: qla2xxx ConfigFS path: /sys/kernel/config/target/qla2xxx Allowed WWN list type: free Fabric module specfile: /var/target/fabric/qla2xxx.spec Fabric module features: acls Corresponding kernel module: tcm_qla2xxx />
Upon targetcli initialization, the underlying RTSlib loads the installed fabric modules, and creates the corresponding ConfigFS mount points (at /sys/kernel/config/target/<fabric>), as specified by the associated spec files (located in /var/target/fabric/fabric.spec).
Display the object tree
Use ls to list the object hierarchy, which is initially empty:
/> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- fileio ............................................... [0 Storage Object] | o- iblock ............................................... [0 Storage Object] | o- pscsi ................................................ [0 Storage Object] | o- rd_dr ................................................ [0 Storage Object] | o- rd_mcp ............................................... [0 Storage Object] o- ib_srpt ........................................................ [0 Target] o- iscsi .......................................................... [0 Target] o- loopback ....................................................... [0 Target] o- qla2xxx ........................................................ [0 Target] />
Per default, auto_cd_after_create is set to true, which automatically enters the object context (or working directory) of new objects after their creation. Set auto_cd_after_create=false to prevent RTSadmin from automatically entering the object context to new objects after their creation:
/> set global auto_cd_after_create=false Parameter auto_cd_after_create is now 'false'. />
Create a backstore
Enter the top-level backstore object, and create one (storage object) using IBLOCK or FILEIO type devices.
For instance, create an IBLOCK backstore from a /dev/sdb block device. Note that this device can be any TYPE_DISK block-device, and it can also use /dev/disk/by-id/ symlinks:
/> cd backstores/ /backstores> iblock/ create name=my_disk dev=/dev/sdb Generating a wwn serial. Created iblock storage object my_disk using /dev/sdb. Entering new node /backstores/iblock/my_disk. /backstores/iblock/my_disk>
targetcli automatically creates a WWN serial ID for the backstore device and then changes the working context to it.
The resulting object hierarchy looks as follows (displayed from the root object):
/> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- fileio ............................................... [0 Storage Object] | o- iblock ............................................... [1 Storage Object] | | o- my_disk .......................................... [/dev/sdb activated] | o- pscsi ................................................ [0 Storage Object] | o- rd_dr ................................................ [0 Storage Object] | o- rd_mcp ............................................... [0 Storage Object] o- ib_srpt ........................................................ [0 Target] o- iscsi .......................................................... [0 Target] o- loopback ....................................................... [0 Target] o- qla2xxx ........................................................ [0 Target] />
Instantiate a target
The Fibre Channel ports that are available on the storage array are presented in the WWN context with the following WWNPs:
- 21:00:00:24:ff:31:4c:48
- 21:00:00:24:ff:31:4c:49
Instantiate a Fibre Channel target, in this example for QLogic HBAs, on the existing IBLOCK backstore device my_disk:
/backstores/iblock/my_disk> /qla2xxx create 21:00:00:24:ff:31:4c:48 Created target 21:00:00:24:ff:31:4c:48. Entering new node /qla2xxx/21:00:00:24:ff:31:4c:48. /qla2xxx/21:0...4:ff:31:4c:48>
targetcli automatically changes the working context to the resulting tagged Endpoint.
Export LUNs
Declare LUNs for the backstore device, to form a valid SAN storage object:
/qla2xxx/21:0...4:ff:31:4c:48> luns/ create /backstores/iblock/my_disk Selected LUN 0. Successfully created LUN 0. Entering new node /qla2xxx/21:00:00:24:ff:31:4c:48/luns/lun0. /qla2xxx/21:0...:48/luns/lun0>
targetcli per default automatically assigns the default ID '0' to the LUN, and then changes the working context to the new SAN storage object. The target is now created, and exports /dev/sdb as LUN 0.
Return to the underlying Endpoint as the working context, as no attributes need to be set or modified for standard LUNs:
/qla2xxx/21:0...:48/luns/lun0> cd < Taking you back to /qla2xxx/21:00:00:24:ff:31:4c:48. /qla2xxx/21:0...4:ff:31:4c:48>
Define access rights
Configure the access rights to allow logins from initiators. This requires setting up individual access rights for each initiators, based on its WWPN.
Determine the WWPN for the respective Fibre Channel initiator. For Linux initiator systems, e.g., use:
# cat /sys/class/fc_host/host*/port_name | sed -e s/0x// -e 's/../&:/g' -e s/:$//
For a simple setup, allow access to the initiator with the WWPN as determined above:
/qla2xxx/21:0...4:ff:31:4c:48> acls/ create 21:00:00:24:ff:31:4c:4c Successfully created Node ACL for 21:00:00:24:ff:31:4c:4c. Created mapped LUN 0. Entering new node /qla2xxx/21:00:00:24:ff:31:4c:48/acls/21:00:00:24:ff:31:4c:4c. /qla2xxx/21:0...4:ff:31:4c:4c> cd / />
targetcli then automatically adds the appropriate mapped LUNs per default.
Display the object tree
The resulting Fibre Channel SAN object hierarchy looks as follows (displayed from the root object):
/> ls o- / ..................................................................... [...] o- backstores .......................................................... [...] | o- fileio ............................................... [0 Storage Object] | o- iblock ............................................... [1 Storage Object] | | o- my_disk .......................................... [/dev/sdb activated] | o- pscsi ................................................ [0 Storage Object] | o- rd_dr ................................................ [0 Storage Object] | o- rd_mcp ............................................... [0 Storage Object] o- ib_srpt ........................................................ [0 Target] o- iscsi .......................................................... [0 Target] o- loopback ....................................................... [0 Target] o- qla2xxx ........................................................ [1 Target] o- 21:00:00:24:ff:31:4c:48 ....................................... [enabled] o- acls .......................................................... [1 ACL] | o- 21:00:00:24:ff:31:4c:4c .............................. [1 Mapped LUN] | o- mapped_lun0 ........................................... [lun0 (rw)] o- luns .......................................................... [1 LUN] o- lun0 .................................... [iblock/my_disk (/dev/sdb)] />
Persist the configuration
The target configuration can be persisted across OS reboots by using saveconfig from the root context:
/> saveconfig WARNING: Saving rtsnode1 current configuration to disk will overwrite your boot settings. The current target configuration will become the default boot config. Are you sure? Type 'yes': yes Making backup of srpt/ConfigFS with timestamp: 2012-02-27_23:19:37.660264 Successfully updated default config /etc/target/srpt_start.sh Making backup of qla2xxx/ConfigFS with timestamp: 2012-02-27_23:19:37.660264 Successfully updated default config /etc/target/qla2xxx_start.sh Making backup of loopback/ConfigFS with timestamp: 2012-02-27_23:19:37.660264 Successfully updated default config /etc/target/loopback_start.sh Making backup of LIO-Target/ConfigFS with timestamp: 2012-02-27_23:19:37.660264 Successfully updated default config /etc/target/lio_backup-2012-02-27_23:19:37.660264.sh Making backup of Target_Core_Mod/ConfigFS with timestamp: 2012-02-27_23:19:37.660264 Successfully updated default config /etc/target/tcm_backup-2012-02-27_23:19:37.660264.sh Generated Target_Core_Mod config: /etc/target/backup/tcm_backup-2012-02-27_23:19:37.660264.sh Successfully updated default config /etc/target/lio_start.sh Successfully updated default config /etc/target/tcm_start.sh />
Spec file
RTS spec files define the fabric-dependent feature set, capabilities and available target ports of the specific underlying fabric.
In particular, the QLogic spec file /var/target/fabric/qla2xxx.spec is included via RTSlib. WWN values are extracted via /sys/class/fc_host/host*/port_name in wwn_from_files_filter, and are presented in the targetcli WWN working context to register individual Fibre Channel port GUIDs.
# WARNING: This is a draft specfile supplied for demo purposes only. # The qla2xxx fabric module uses the default feature set. features = acls # Non-standard module naming scheme kernel_module = tcm_qla2xxx # The module uses hardware addresses from there wwn_from_files = /sys/class/fc_host/host*/port_name # Transform '0x1234567812345678' WWN notation to '12:34:56:78:12:34:56:78' wwn_from_files_filter = "sed -e s/0x// -e 's/../&:/g' -e s/:$//" # The configfs group is default # configfs_group = qla2xxx
Specifications
The following specifications are available as T10 Working Drafts:
- Fibre Channel Protocol (FCP): FCP defines the protocol to be used to transport SCSI commands over the T11 Fibre Channel interface, 12/4/1995
- SCSI Fibre Channel Protocol - 2 (FCP-2): FCP-2 defines the second generation Fibre Channel Protocol to be used to transport SCSI commands over the T11 Fibre Channel interface, 10/23/2002
- Fibre Channel Protocol - 3 (FCP-3): FCP-3 defines the third generation Fibre Channel Protocol to be used to transport SCSI commands over the T11 Fibre Channel interface, 9/13/2005
- Fibre Channel Protocol - 4 (FCP-4): FCP-4 defines the fouth generation Fibre Channel Protocol to be used to transport SCSI commands over the T11 Fibre Channel interface, 11/9/2010
Glossary
- Host Bus Adapter (HBA): provides the mechanism to connect Fibre Channel devices to processors and memory.
RFCs
- RFC 2625: IP and ARP over Fibre Channel
- RFC 2837: Definitions of Managed Objects for the Fabric Element in Fibre Channel Standard
- RFC 3723: Securing Block Storage Protocols over IP
- RFC 4044: Fibre Channel Management MIB
- RFC 4625: Fibre Channel Routing Information MIB
- RFC 4626: MIB for Fibre Channel's Fabric Shortest Path First (FSPF) Protocol
Timeline
Timeline of the LinuxIO | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Release | Details | 2011 | 2012 | 2013 | 2014 | 2015 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | ||
4.x | Version | 4.0 | 4.1 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Feature | LIO Core | Loop back | FCoE | iSCSI | Perf | SRP | CM WQ | FC USB 1394 | vHost | Perf | Misc | 16 GFC | iSER | Misc | VAAI | Misc | DIF Core NPIV | DIF iSER | DIF FC vhost | TCMU Xen | Misc | Misc | virtio 1.0 | Misc | NVMe OF | ||||||||||||||||||||||||||||||||||||
Linux | 2.6.38 | 2.6.39 | 3.0 | 3.1 | 3.2 | 3.3 | 3.4 | 3.5 | 3.6 | 3.7 | 3.8 | 3.9 | 3.10 | 3.11 | 3.12 | 3.13 | 3.14 | 3.15 | 3.16 | 3.17 | 3.18 | 3.19 | 3.20 | 3.21 | 3.22 |
See also
Notes
- ↑ Linus Torvalds (5/31/2012). "scsi-misc". lkml.org.
External links
- RTS OS Admin Manual
- RTSlib Reference Guide [HTML][PDF]
- Fibre Channel Wikipedia entry
- QLogic Wikipedia entry
- QLogic website
- Emulex website
- T11 home page