The Linux SCSI Target Wiki

Revision as of 02:17, 12 March 2016 by Marcf (Talk | contribs)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search
LIO 150513.png
Original author(s) Nicholas Bellinger
Developer(s) Datera, Inc.
Initial release January 14, 2011 (2011-01-14)
Stable release 4.1.0 / June 20, 2012;
10 years ago
Preview release 4.2.0-rc5 / June 28, 2012;
10 years ago
Development status Production
Written in C
Operating system Linux
Type SCSI target
License GNU General Public License, version 2 (GPLv2)
architecture overview.
LIO iSCSI architecture diagram.
SCSI Portal Group and multipath architecture overview.
SCSI standards diagram.
QLogic Fibre Channel running at line rate in target mode with PCIe device passthrough and MSI-X polled interrupts across Linux/SCSI qla2xxx LLD request and response rings.
The IEEE Firewire driver exporting IBLOCK LUNs to a MacOS-X based IEEE-1394/FireWire client.

LinuxIO (LIO) has been the Linux SCSI target since kernel version 2.6.38.[1][2] It supports a rapidly growing number of fabric modules, and all existing Linux block devices as backstores.



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.

LIO has obtained VMware vSphere 4 Ready certification on Buffalo [PDF] and QNAP [PDF] systems, and vSphere 5 Ready certification on Netgear [PDF] and Pure Storage [PDF] systems.

Native support in OpenStack (setup, code), starting with the Grizzly release, makes LIO also an attractive storage option for cloud deployments.

The LIO core (target_core.ko, see Linux kernel driver database) was released with Linux kernel 2.6.38 on January 14, 2011 (2011-01-14).[3]


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:


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.).

LIO supports the SCSI-3 standard for all backstore devices (block devices and/or VFS):

SCSI functionality is implemented directly in the LIO engine in a fabric-agnostic way, including a number of high-end features, such as Persistent Reservations (PRs), Asymmetric Logical Unit Assignment (ALUA), vStorage APIs for Array Integration (VAAI) following the SPC-4 standard.

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.


The following specifications are available as T10 Working Drafts:


Inclusion in Linux distributions

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

Distribution Version[Linux 1] Release Archive Install Source git[Linux 2] Documentation
CentOS 6.2 2011-12-20 CentOS mirror su -c 'yum install fcoe-target-utils' targetcli-fb.git Tech Notes
Debian 7.0 ("wheezy") TBA Debian pool su -c 'apt-get install targetcli' targetcli
Fedora 16, 17/18 2011-11-08 Fedora Rawhide su -c 'yum install targetcli' targetcli-fb.git Target Wiki
openSUSE 12.1 2011-11-08 Requires manual installation from targetcli.
RHEL 6.2 2011-11-16 Fedora Rawhide su -c 'yum install fcoe-target-utils' targetcli-fb.git Tech Notes
Scientific Linux 6.2 2012-02-16 SL Mirror su -c 'yum install fcoe-target-utils' targetcli-fb.git Tech Notes
SLES SP2 2012-02-15 Requires manual installation from targetcli.
Ubuntu PrecisePangolin v12 2012-04-26 Ubuntu universe su -c 'apt-get install targetcli' targetcli
  1. The distribution release where LIO was included first.
  2. Technical support, and qualified backports to other kernels and distributions are available from Datera.


LIO and fabric modules have gone upstream into the Linux kernel as follows:



Please direct all technical discussion on targetcli to the target-devel mailing list (post, subscribe, list info, gmane archive). Please see Support for more information.

See also


  1. Thorsten Leemhuis (2011-03-02). "Kernel Log: Coming in 2.6.38 (Part 4) - Storage". Heise Online. 
  2. Jonathan Corbet (2010-12-22). "Shooting at SCSI targets". 
  3. Linus Torvalds (2011-03-14). "Linux 2.6.38". 
  4. Mark J. Sullivan (January 2010). Intel® Xeon® Processor C5500/C3500 Series Non-Transparent Bridge. 323328-001. Santa Clara: Intel. 
  5. Linus Torvalds (2011-03-14). "Linux 2.6.38". 
  6. Linus Torvalds (2011-01-14). "Target merge". 
  7. Linus Torvalds (2011-05-18). "Linux 2.6.39". 
  8. Linus Torvalds (2011-07-21). "Linux 3.0". 
  9. Linus Torvalds (2011-10-24). "Linux 3.1". 
  10. Linus Torvalds (2011-07-27). "iSCSI merge". 
  11. Linus Torvalds (2012-03-18). "Linux 3.3 release". 
  12. Linus Torvalds (2012-01-18). "InfiniBand/SRP merge". 
  13. Linus Torvalds (2012-07-21). "Linux 3.5 released". 
  14. Linus Torvalds (2012-05-31). "scsi-misc". 
  15. Linus Torvalds (2012-05-22). "usb-target-merge". 
  16. Linus Torvalds (2012-05-23). "sbp-target-merge". 
  17. Linus Torvalds (2012-10-01). "Linux 3.6". 
  18. Linus Torvalds (2012-08-13). "tcm_vhost: Initial merge for vhost level target fabric driver". 
  19. Linus Torvalds (2013-04-28). "Linux 3.9 released". 
  20. Linus Torvalds (2013-06-30). "Linux 3.10". 
  21. Linus Torvalds (2013-11-03). "Linux 3.12 released..". 
  22. "Linux 3.14". 2014-03-30. 
  23. "Linux 3.15". 2014-06-08. 
  24. "Linux 3.16". 2014-08-03. 
  25. "Linux 3.17". 2014-10-05. 

External links

Timeline of the LinuxIO
Release Details 2011 2012 2013 2014 2015
123456789101112 123456789101112 123456789101112 123456789101112 123456789101112
4.x Version 4.0 4.1
Feature LIO Core Loop back FCoE iSCSI Perf SRP
vHost Perf Misc 16 GFC iSER Misc VAAI Misc DIF Core
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
Personal tools
Google AdSense