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.
The 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.5.
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. |
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 | Published as 20919:2016 |
2.3.1 | Published | - |
2.4 | Published | - |
2.5.1 | Published | Published as 20919:2021 |
This section is for person who already have a machine the LTFS is installed. Instruction how to use the LTFS is also available on Wiki.
# ltfs -o device_list
The output is like follows. You can have 3 drives in this example and you can use "Device Name" field, like /dev/sg43
in this case, as the argument of ltfs command to mount the tape drive.
50c4 LTFS14000I LTFS starting, LTFS version 2.4.0.0 (10022), log level 2.
50c4 LTFS14058I LTFS Format Specification version 2.4.0.
50c4 LTFS14104I Launched by "/home/piste/ltfsoss/bin/ltfs -o device_list".
50c4 LTFS14105I This binary is built for Linux (x86_64).
50c4 LTFS14106I GCC version is 4.8.5 20150623 (Red Hat 4.8.5-11).
50c4 LTFS17087I Kernel version: Linux version 3.10.0-514.10.2.el7.x86_64 ([email protected]) (gcc version 4.8.5 20150623 (Red Hat 4.8.5-11) (GCC) ) #1 SMP Mon Feb 20 02:37:52 EST 2017 i386.
50c4 LTFS17089I Distribution: NAME="Red Hat Enterprise Linux Server".
50c4 LTFS17089I Distribution: Red Hat Enterprise Linux Server release 7.3 (Maipo).
50c4 LTFS17089I Distribution: Red Hat Enterprise Linux Server release 7.3 (Maipo).
50c4 LTFS17085I Plugin: Loading "sg" tape backend.
Tape Device list:.
Device Name = /dev/sg43, Vender ID = IBM , Product ID = ULTRIUM-TD5 , Serial Number = 9A700L0077, Product Name = [ULTRIUM-TD5] .
Device Name = /dev/sg38, Vender ID = IBM , Product ID = ULT3580-TD6 , Serial Number = 00013B0119, Product Name = [ULT3580-TD6] .
Device Name = /dev/sg37, Vender ID = IBM , Product ID = ULT3580-TD7 , Serial Number = 00078D00C2, Product Name = [ULT3580-TD7] .
As described into the LTFS format specifications, LTFS uses the partition feature of the tape drive. It means you can't use a tape just after you purchase a tape. You need format the tape before using int on LTFS.
To format a tape, you can use mkltfs
command like
# mkltfs -d 9A700L0077
In this case, mkltfs
tries to format a tape in the tape drive 9A700L0077
. You can use a device name /dev/sg43
instead.
After you prepared a formatted tape, you can mount it through a tape drive like
# ltfs -o devname=9A700L0077 /ltfs
In this command, the ltfs command try to mount the tape in the tape drive 9A700L0077
to /ltfs
directory. Of cause, you can use a device name /dev/sg43
instead.
If mount process is successfully done, you can access to the LTFS tape through /ltfs
directory.
You must not touch any st
devices while ltfs is mounting a tape.
You can use following command when you want to unmount the tape. The ltfs command try to write down the current meta-data to the tape and close the tape cleanly.
# umount /ltfs
One thing you need to pay attention here is it is not a unmount completion when umount command is returned. It just a finish of trigger to notify the unmount request to the ltfs command. Actual unmount is completed when the ltfs command is finished.
The ltfsee_ordered_copy
is a program to copy files from source to destination with LTFS order optimization.
It is written by python and it can work on both python2 and python3 (Python 2.7 or later is strongly recommended). You need to install the pyxattr
module for both python2 and python3.
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Please refer this page.
./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.
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 | |
macOS 10.15 | 12.4 | Homebrew | OK - Not checked automatically |
macOS 11 | 12.4 | Homebrew | OK - Not checked automatically |
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 - Not checked automatically |
12 | x86_64 | OK - Not checked automatically |
./autogen.sh
./configure
make
make install
Version | Arch | Status |
---|---|---|
8.1 | amd64 | OK - Not checked automatically |
8.0 | i386 | OK - Not checked automatically |
7.2 | amd64 | OK - Not checked automatically |
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