中古 LTO-6 ドライブでホンモノの tape archive を作ったり LTFS を使ったりする

はじめに

複数のファイルを 1 つのアーカイブにまとめたいとき、サーバ管理者はしばしば tar というコマンドを使います。アーカイブの出力先には HDD 上のファイルや stdout を選ぶことが多いでしょう*1

ここで FreeBSD の tar(1) の man ページを見てみると、「tape archive の操作をする」という簡素な説明が掲載されています。

tar -- manipulate tape archives

英語版 Wikipedia の記事によると、そもそも tar コマンドはファイルシステムを持たない sequential な I/O デバイスにデータを書き込むために開発されたものであったようで、その代表例として磁気テープの利用が挙げられています。tar という名称も tape archive が由来であるようです。

The name is derived from "tape archive", as it was originally developed to write data to sequential I/O devices with no file system of their own, such as devices that use magnetic tape.

tar (computing) - Wikipedia

これらのことから、「tar コマンドを使って磁気テープに書き込んだらそれはホンモノの tape archive では?」と思い、一生に一度は体験しておきたいと強く思ったため(?)早速機材を揃えて試すことにしました。

なお、この記事の執筆にあたっては Ubuntu 22.04 が動作する環境で作業を行いました。

必要となる機材

tape archive を残すためにコンピュータで利用できる磁気テープ技術の一つとして LTO(Linear Tape-Open)が挙げられます。LTO には物理的な規格が 2 つありますが、一般的には Ultrium という規格が用いられているようです。

また、LTO には世代があり、LTO-1, LTO-2 と続いて 2024 年 6 月現在では LTO-9 まで出ています。世代が進むとテープ単位の容量や速度が向上します。 今回はオークションサイト上で売りに出ていた中で最新だった LTO-6 世代のドライブやテープカートリッジを使うことにしました。この世代のテープは容量が 2.5 TB で、読み書きの速度は最大 160 MB/s です。

必要となった機材および購入時の価格は以下の通りです。テープカートリッジ以外は中古品で揃えました。また、クリーニングカートリッジは未使用のためカッコで括ってありますが、合計金額に含まれています。

機材 価格(円)
IBM LTO Ultrium 6-H(LTO-6 ドライブ) 31,980
SAS3041E-HP(SAS HBA カード) 3,000
SFF-8482 から SATA への変換アダプタ 967
IBM Ultrium LTO-6 テープカートリッジ 5,550
(クリーニングカートリッジ) 2,400

合計して 43,897 円かかりました。 LTO-5 の機材にすれば初期投資は 2 万円ぐらい安くなりそうですが、テープ毎の容量は 1.5 TB に下がります(ただ、読み書き速度に関しては LTO-5 で最大 140 MB/s であり、LTO-6 と比較して 20 MB/s しか変わらない)。

SAS 接続と SAS HBA カード

LTO ドライブは企業等によるデータのバックアップやアーカイブを想定して作られているため、一般消費者が使うコンピュータには通常用意されていない SAS という規格で接続する必要があります。 今回購入した LTO ドライブには SFF-8482 という端子が生えていましたが、これは変換アダプタを付けることで SATA と同じ端子に変換できました。しかし、仮にこの状態で SATA の端子を介してマザーボードに直接接続しても、普通のマシンでは SAS をサポートしていないため LTO ドライブは使えません。そこで、SAS HBA カードをマザーボードに挿し、そのカードに用意されている SATA のメス端子と LTO ドライブを接続します。これで LTO ドライブが認識されるようになります*2電源ケーブルは普通の HDD や SSD と同じものを適当に挿しておけば OK です。

テープカートリッジの挿入と書き込み

Ubuntu を起動すると、特に新たな kernel module 等を読み込まなくても /dev/{n,}st0 が出現しました。 テープカートリッジを挿入口に押し込むと、途中からドライブがカートリッジを吸い込んでくれます。その後 sudo mt -f /dev/nst0 status を実行するとカートリッジの状態を確認できました。

準備万端の状態で、いざ tar cvf /dev/nst0 path/to/input を実行するとアーカイブが磁気テープに書き込まれ始めます。少しばかり待機して tar が正常終了したそのとき、テープドライブの中にはホンモノの tape archive ができあがりました。感激です。sudo mt -f /dev/nst0 rewind でテープを巻き戻してから tar dvf /dev/nst0 を実行して、アーカイブが正しく書き込まれたことも確認できました。

LTFS の構築・マウント・読み書き

LTFS(Linear Tape File System)は、LTO テープ上に作成できるファイルシステムで、これを使えば普通のディスクや USB メモリと同じ感覚で磁気テープ上のファイルにアクセスできるようになります。

LTO ドライブを販売する各社は LTFS を利用するための実装を配布しているようでもありましたが、それらの入手に手間取りたくなかったため、今回は github.com 上の LinearTapeFileSystem/ltfs リポジトリにあるリファレンス実装を利用しました。

github.com

必要なライブラリを入れてビルドおよびインストールすると、ltfs や mkltfs コマンドが利用できるようになります。 自分は依存関係の 1 つである net-snmp の入手方法がわからなかったため、./configure でオプション --disable-snmp を与えました*3

LTFS の作成も正常に完了し、読み書きが 160 MB/s 程度の速度で行えることが確認できました。

今のところ、大量の小さなファイルを保持したり複数のテープにまたがってデータを保管したり*4するときは tar で直接書き込んで、少量の大きなファイルを単一のテープ内で保持するときには LTFS を使うと利便性が高いのかなとなんとなく思っていますが、このあたりは実際に使ってみて肌感覚を掴みたいところです。
2024/06/14 追記: LTFS を使っているとファイルマネージャ等でディレクトリを開いたときに意図しないシークが発生することがあって若干不便なため、結局 tar で書き込んで必要になったら一時的に HDD に展開してからファイルを閲覧するやり方が便利なのかなあ……と思い始めました。書き込んだファイルの名前とディレクトリ名を適当なところに保存しておき、それを見てアーカイブの一部だけ展開するのも使い方の一つだと思います。

おわりに

ホンモノの tape archive が作れて大満足です。

2024 年 6 月現在でのテープ単体のコスパを考えると、同じ容量の HDD を購入するよりはほんの少しだけ安く済む計算になると思います。LTO ドライブや SAS HBA カード、変換アダプタの元を取りたいという野望がある方は、おそらく百数十個のテープカートリッジを購入する必要があるため、数 PB 単位でのバックアップをしなければならない場合以外はやめておいた方がよさそうです(その量になったらテープライブラリが欲しくなりそう)。

それでも可搬性の面では HDD よりもラフに扱えるという利点はありますし、メディアの形状や読み書き中の音からは(若干騒がしいけど)ロマンを感じられて大変楽しめました。

機材はオークションサイト等ですべて揃うため、興味があればぜひ試してみてください!

*1:tar | lzop | ssh のように組み合わせて巨大なファイル群を転送することもあるかも

*2:大学の先輩に SASSAS HBA カードの存在について教えていただいたことに感謝

*3:https://github.com/LinearTapeFileSystem/ltfs/issues/127#issuecomment-483202049 を参照

*4:https://www.gnu.org/software/tar/manual/html_section/Using-Multiple-Tapes.html を参照