This is the master
branch of the LTFS project. At this time, this branch is used for version 2.5 development. So it wouldn't be stable a little. Please consider to follow the tree on v2.4-stable
branch if you want to use stable codes.
Linear Tape File System (LTFS) is a filesystem to mount a LTFS formatted tape in a tape drive. Once LTFS mounts a LTFS formatted tape as filesystem, user can access to the tape via filesystem API.
Objective of this project is being the reference implementation of the LTFS format Specifications in SNIA.
At this time, the target of this project to meet is the LTFS format specifications 2.4. (https://www.snia.org/sites/default/files/technical_work/LTFS/LTFS_Format_2.4.0_TechPosition.pdf).
LTFS Format Specification is specified data placement, shape of index and names of extended attributes for LTFS. This specification is defined in SNIA first and then it is forwarded to ISO as ISO/IEC 20919 from version 2.2.
The table below show status of the LTFS format Specification
Version | Status of SNIA | Status of ISO |
---|---|---|
2.2 | Published the Technical Position | Published |
2.3.1 | Published the Technical Position | - |
2.4 | Published the Technical Position | On going |
2.5 | Published the Technical Position | Not started yet |
This section is for person who already have a machine the LTFS is installed.
Instruction how to use the LTFS is on Wiki. Please take a look!
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
-
Linux
- automake 1.13.4 or later
- autoconf 2.69 or later
- libtool 2.4.2 or later
- fuse 2.6.0 or later
- uuid 1.36 or later (Linux)
- libxml-2.0 2.6.16 or later
- net-snmp 5.3 or later
- icu4c 4.8 or later
-
OSX (macOS)
Following packages on homebrew
- automake
- autoconf
- libtool
- osxfuse (brew cask install osxfuse)
- ossp-uuid
- libxml2
- icu4c
- gnu-sed
-
FreeBSD:
- FreeBSD 10.2 or 11.0 or later (for sa(4) driver changes)
- automake
- autoconf
- libtool
- fusefs-libs
- net-snmp
- e2fsprogs-libuuid
- libxml2
- icu
-
NetBSD:
- NetBSD 7.0 or higher (for FUSE support)
- automake
- autoconf
- libtool
- libfuse
- net-snmp
- libuuid
- libxml2
- icu
Vendor | Drive Type | Minimum F/W Level |
---|---|---|
IBM | LTO5 | B170 |
IBM | LTO6 | None |
IBM | LTO7 | None |
IBM | LTO8 | HB81 |
IBM | TS1140 | 3694 |
IBM | TS1150 | None |
IBM | TS1155 | None |
IBM | TS1160 | None |
HP | LTO5 | T.B.D. |
HP | LTO6 | T.B.D. |
HP | LTO7 | T.B.D. |
HP | LTO8 | T.B.D. |
Quantum | LTO5 (Only Half Height) | T.B.D. |
Quantum | LTO6 (Only Half Height) | T.B.D. |
Quantum | LTO7 (Only Half Height) | T.B.D. |
Quantum | LTO8 (Only Half Height) | T.B.D. |
./autogen.sh
./configure
make
make install
./configure --help
shows various options for build and install.
In some systems, you might need sudo ldconfig -v
after make install
to load the shared libraries correctly.
LTFS uses the sg driver by default. You can improve reliability to change parameters of the sg driver below.
def_reserved_size=1048576
In RHEL7, you can put following file as /etc/modprobe.d/sg.conf
.
options sg def_reserved_size=1048576
You can check current configuration of sg driver to see the file /proc/scsi/sg/debug
like
$ cat /proc/scsi/sg/debug
max_active_device=44 def_reserved_size=32768
>>> device=sg25 1:0:10:0 em=0 sg_tablesize=1024 excl=0 open_cnt=1
FD(1): timeout=60000ms bufflen=524288 (res)sgat=16 low_dma=0
cmd_q=1 f_packid=0 k_orphan=0 closed=0
No requests active
>>> device=sg26 1:0:10:1 em=0 sg_tablesize=1024 excl=0 open_cnt=1
FD(1): timeout=60000ms bufflen=524288 (res)sgat=16 low_dma=0
cmd_q=1 f_packid=0 k_orphan=0 closed=0
No requests active
You can improve performance to change parameters of the sg driver below. But this option may cause I/O error reported as #144 in some HBAs.
allow_dio=1
In RHEL7, you can put following file as /etc/modprobe.d/sg.conf
.
options sg allow_dio=1
At this time, we know following HBA's works correctly.
- QLogic 8Gb FC HBAs
And following HBA's doesn't work correctly.
- ATTO ExpressSAS H680
- Emulex FC HBAs (Some drivers work but some drivers dont work, see this section)
In the lpfc driver (for Emulex Fibre HBAs), the table size of the scatter-gather is 64 by default. This configuration may cause I/O errors intermittently when allow_dio=1
is set and scatter-gather table cannot be reserved. To avoid this error, you need to change the parameter lpfc_sg_seg_cnt
to 256 or greater like below.
options lpfc lpfc_sg_seg_cnt=256
In some versions of the lpfc driver (for Emulex Fibre HBAs), the table size of the scatter-gather cannot be changed correctly. You can check the value is changed or not in sg_tablesize
value in /proc/scsi/sg/debug
. If you don't have a correct value (256 or greater) in sg_tablesize
, removing allow_dio=1
configuration of the sg driver is strongly recommended.
LTFS doesn't support the HBAs which doesn't handle the transfer length of SCSI data by default. The reason is because the safety of the data but LTFS provides a option to relax this limitation.
You can use such kind of HBAs if you run the configure
script with --enable-buggy-ifs
option and build.
List of the HBA --enable-buggy-ifs
is needed is below.
HBA list require --enable-buggy-ifs
You need to add --enable-lintape
as an argument of ./configure script if you want to build the backend for lin_tape. You also need to add DEFAULT_TAPE=lin_tape
if you set the lin_tape backend as default backend.
Currently, automatic build checking is working on GitHub Actions and Travis CI.
For Ubuntu20.04 and Debian10, dummy icu-config
is needed in the build machine. See Issue #153.
Before build on macOS, you need to configure the environment like below.
export ICU_PATH="/usr/local/opt/icu4c/bin"
export LIBXML2_PATH="/usr/local/opt/libxml2/bin"
export PKG_CONFIG_PATH="/usr/local/opt/icu4c/lib/pkgconfig:/usr/local/opt/libxml2/lib/pkgconfig"
export PATH="$PATH:$ICU_PATH:$LIBXML2_PATH"
Before build on OSX (macOS), some include path adjustment is required.
brew link --force icu4c
brew link --force libxml2
On OSX (macOS), snmp cannot be supported, you need to disable it on configure script. And may be, you need to specify LDFLAGS while running configure script to link some required frameworks, CoreFundation and IOKit.
./autogen.sh
LDFLAGS="-framework CoreFoundation -framework IOKit" ./configure --disable-snmp
make
make install
./configure --help
shows various options for build and install.
OS | Xcode | Package system | Status |
---|---|---|---|
macOS 10.14.6 | 11.3 | Homebrew |
Note that on FreeBSD, the usual 3rd party man directory is /usr/local/man. Configure defaults to using /usr/local/share/man. So, override it on the command line to avoid having man pages put in the wrong place.
./autogen.sh
./configure --prefix=/usr/local --mandir=/usr/local/man
make
make install
Version | Arch | Status |
---|---|---|
11 | x86_64 | OK |
./autogen.sh
./configure
make
make install
Version | Arch | Status |
---|---|---|
8.1 | amd64 | OK |
8.0 | i386 | OK |
7.2 | amd64 | OK |
Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests to us.
This project is licensed under the BSD License - see the LICENSE file for details