Contents

Overview

LinuxIO is based on a SCSI engine that implements the semantics of a SCSI target as described in the SCSI Architecture Model (SAM), and supports its comprehensive SPC-3/SPC-4 feature set in a fabric-agnostic way. The SCSI target core does not directly communicate with initiators and it does not directly access data on disk.

Setup

targetcli provides a comprehensive, powerful and easy CLI tool to configure and manage LIO. targetcli was developed by Datera.

Fabric modules

Fabric modules implement the "frontend" of the SCSI target. They "speak" specific protocols that transport SCSI commands. The Fabric Hardware Abstraction Layer (F-HAL) allows all protocol-specific processing to be encapsulated in fabric modules. The following fabric modules are available:

tcm_loop: SCSI emulation device to serve any type of raw hardware to local applications and VMs as a fully SCSISPC-4 compliant block device, including emulation of advanced functionality (loopback.ko, released).

Backstores

Backstores implement the LIO "backend". They implement the methods of accessing data on disk. A backstore subsystem plugin is a physical storage object that provides the block device underlying a SCSI Endpoint.

Backstore objects can be added via the Storage Hardware Abstraction Layer (S-HAL) that brings storage hardware into LIO engine as raw block devices, on which the Linux stack just works (including complex functionality such as software RAID, LVM, snapshots, virtualization, etc.).

FILEIO (Linux VFS devices): any file on a mounted filesystem. It may be backed by a file or an underlying real block device. FILEIO is using struct file to serve block I/O with various methods (synchronous or asynchronous) and (buffered or direct). The Linux kernel code for filesystems resides in linux/fs. By default, FILEIO uses non-buffered mode (O_SYNC set).

Do not use buffered FILEIOCreating a FILEIO backend with buffered=True enables the buffer cache. While this can provide significant performance increases, it also creates a serious data integrity hazard: If the system crashes for any reason, an unflushed buffer cache can cause the entire backstore to be irrecoverably corrupted.

IBLOCK (Linux BLOCK devices): any block device that appears in /sys/block. The Linux kernel code for block devices is in linux/block.

Recommended for performanceIBLOCK backstores usually provide the best performance.

PSCSI (Linux pass-through SCSI devices): any storage object that supports direct pass-through of SCSI commands without SCSI emulation. This assumes an underlying SCSI device that appears with lsscsi in /proc/scsi/scsi, such as a SAS hard drive, etc. SCSI-3 and higher is supported with this subsystem, but only for control CDBs capable by the device firmware.

Do not use PSCSIDo not use PSCSI unless you know exactly how it will be used. Advanced SCSI CDBs such as for Persistent Reservations or ALUAs (used e.g. by VMware ESX and vSphere) are typically not implemented in the device firmware, and can cause malfunctions or crashes. Use IBLOCK for production setups instead.

The backstore devices (FILEIO, IBLOCK, pSCSI, RAMDISK, etc.) report the underlying HW limitiations for things like TCQ depth, MaxSectors, TaskAbortedStatus, UA Interlocking, etc. All of these values are available as attributes in the targetcli device context.

SCSI Primary Commands - 2 (SPC-2): contains the second-generation definition of the basic commands for all SCSI devices. SPC-2 is used in conjuction with a standard for the specific device type. In 2006, the ANSI SPC-2 standard was replaced with ISO/IEC 14776-452:2005, which is available through ANSI. Status: Published, 2001-07-18

SCSI Primary Commands - 3 (SPC-3): contains the third-generation definition of the basic commands for all SCSI devices. SPC-3 is used in conjuction with a standard for the specific device type. Status: Published, 2005-05-04

SCSI Primary Commands - 4 (SPC-4): contains the fourth-generation definition of the basic commands for all SCSI devices. SPC-4 is used in conjuction with a standard for the specific device type. Status: Development, 2010-11-16

Small Computer System Interface - 2 (SCSI-2): SCSI-2 defines the second generation of the Small Computer System Interface. Status: Published, 1993-09-07

Glossary

Access Control List (ACL): Used to specify the access rights for Initiators to TPGs.

Demo Mode: Means disabling authentification for an iSCSI Endpoint, i.e. its ACLs are diabled. Demo Mode grants read-only access to all iSCSI Initiators that attempt to connect to that specific Endpoint. See the iSCSI entry on how to enable Demo Mode.

Data Integrity Field (DIF): Is an approach to protect data integrity in computer data storage. It was proposed in 2003 by the T10 committee of the International Committee for Information Technology Standards.

Extended Unique Identifier (EUI): A 64-bit number that uniquely identifies every device in the world. The format consists of 24 bits that are unique to a given company, and 40 bits assigned by the company to each device it builds.

I_T Nexus: An I_T Nexus denotes a live session between an Initiator and a target.

Initiator: The originating end of a SCSI session. Typically a controlling device such as a computer.

Internet Protocol Storage (IPS): The class of protocols or devices that use the IP protocol to move data in a storage network. FCIP, iFCP, and iSCSI are all examples of IPS protocols.

iSCSI Qualified Name (IQN): A name format for iSCSI that uniquely identifies every device in the world (e.g. iqn.5886.com.acme.tapedrive.sn-a12345678).

Initiator Session Identifier (ISID): A 48-bit number, generated by the Initiator, that uniquely identifies a session between the Initiator and the target. This value is created during the login process, and is sent to the target with a Login PDU.

Multipath I/O (MPIO): A method by which data can take multiple redundant paths between a server and storage.

Network Portal: The combination of an iSCSI Endpoint with an IP address plus a TCP port. The TCP port number for the iSCSI protocol defined by IANA is 3260.

Network Interface Card (NIC): An Ethernet PCIe network adapter.

N_Port ID Virtualization (NPIV): is a Fibre Channel facility allowing multiple N_Port IDs to share a single physical N_Port. This allows multiple Fibre Channel initiators to occupy a single physical port, easing hardware requirements in Storage Area Network design, especially where virtual SANs are called for. NPIV is defined by the Technical Committee T11 in the Fibre Channel - Link Services (FC-LS) specification.

Non-Transparent Bridging (NTB): Non-transparent bridges in PCI systems support intelligent adapters in enterprise systems and multiple processors in embedded systems. The Intel DrawBridge established the paradigm of the embedded bridge and became a defacto standard in such environments as Compact PCI and intelligent adapters for enterprise systems. In these systems, the non-transparent bridge functions as a gateway between the local subsystem and the backplane.[4]

Organizationally Unique Identifier (OUI) is a 24-bit number that is purchased from the IEEE Registration Authority. This identifier uniquely identifies a vendor, manufacturer, or other organization (referred to by the IEEE as the “assignee”) globally or worldwide and effectively reserves a block of each possible type of derivative identifier (such as MAC addresses, group addresses, Subnetwork Access Protocol protocol identifiers, etc.) for the exclusive use of the assignee, see OUI Wikipedia entry. The OUI is subsequently used by the assignee to create particular instances of these identifiers for various purposes, such as the identification of a particular piece of equipment.

Target Port: The combination of an iSCSI Endpoint with one or more LUNs.

TCP/IP Offload Engine (TOE): An enhanced NIC that runs a full TCP/IP stack independent from the main CPU and OS.

Target Portal Group (TPG): A list of IP addresses and TCP port numbers that determines which interfaces a specific iSCSI target will listen to.

Target Session Identifier (TSID): A 16-bit number, generated by the target, that uniquely identifies a session between the initiator and the target. This value is created during the login process, and is sent to the initiator with a Login Response PDU.

World Wide Name (WWN) or World Wide Identifier (WWID) is a unique identifier which identifies a particular Fibre Channel, ATA or SAS target. Each WWN is an 8 byte number derived from an IEEE OUI and vendor-supplied information, see also WWN Wikipedia entry. There are two formats of WWN defined by the IEEE:

Original format: addresses are assigned to manufacturers by the IEEE standards committee, and are built into the device at build time, similar to an Ethernet MAC address. The first 2 bytes are either hex 10:00 or 2x:xx (where the x's are vendor-specified) followed by the 3-byte vendor identifier and 3 bytes for a vendor-specified serial number

New addressing schema: the first nibble is either hex 5 or 6 followed by a 3-byte vendor identifier and 36 bits for a vendor-specified serial number

Inclusion in Linux distributions

LIO and targetcli are included in most Linux distributions per default. Here is an overview over the most popular distributions: