LTO ドライブを購入したので購入経緯や mt コマンドの使用方法をまとめてみた

中古の LTO-5 ドライブを購入してみました。HP の Ultrium 3000 BRSLA-0904-DC です。

NAS に保管しているデータのフルバックアップと、すぐには必要のないデータの長期保管場所を探していました。バックアップ先のメディアについて検討した結果、磁気テープを使ってみたいと思い、買ってみました。

個人でテープドライブを使ってみたいと思う方の参考になればと思い、本記事では導入に至った経緯や実際の運用について書いてみたいと思います。 本業でバリバリ運用しているわけではないので、完全に手探り状態で進めています。

導入に至る経緯

もともと、NAS に保管しているデータのバックアップと、すぐには必要のないデータの長期保管場所として、オンラインストレージを利用していました。

Amazon Drive US 版に登録してみた - yukirii blog

自宅に設置してある NAS のディザスタリカバリ的なバックアップ用途や、消えても構わないが捨てるのも気が引けるデータ(ほとんどが録画したけど見てないアニメだな…) などなど、それらを置いておけるクラウドストレージを探しておりました。Amazon Drive の US 版が容量・速度・価格の面で良さそうだったので、試しに登録してみました。.co.jp じゃなくて .com のほうです。https://www.amazon.com/clouddrive/homeMac や Linux の環境で、スクリプトからファイルアップロードを行うことを想定して、 rclone を使って簡単にアップロード速度の面などを観察してみました。

しかし、同期に利用していた rcloneAmazon から BAN されたり、 容量制限無しだった Unlimited ストレージプランが終了するなど、継続利用は難しそうでした。

やはり自前でバックアップを持つか、と一周して戻ってきた感じに。バックアップの自前運用をすべく、バックアップ先メディアについて改めて検討してみました。

僕がデータのバックアップ/アーカイブ先メディアに求める要件は、

  • 大容量であること (最低 1TB 程は欲しい)
  • 故障や劣化を避けるため記録メディアの構造が単純であること
  • メディアが安価で入手しやすいこと
  • 長期保存に向いていること

この条件に当てはまりそうなメディアを調べていたところ、磁気テープが候補に上がりました。デジタルデータを書き込むテープというと、数十年前のデータレコーダや DAT のイメージがありましたが、今は LTO という規格が主流のようです。

LTO 自体の詳細はここでは割愛。Wikipedia LTO (Linear Tape-open) 辺りを見ていただければと思います。そのほか、コンピュータストレージ向けの磁気テープに関する一般的な情報は、 JEITA の テープストレージ専門委員会 のページに資料がまとまっています。

LTO テープについて上記の要件に当てはめてみると、

  • LTO-5 以降は 1TB 以上の容量がある
    • 圧縮もサポートしており最大で規格容量の2倍 (例えば LTO-5 なら 3.0TB) まで記録可能
  • テープ自体の構造は単純
    • 逆にドライブ側が複雑
  • メディアが安価で入手しやすい
  • 長期保存に向いている

個人で中古市場のドライブを購入するとなると、 LTO-4 もしくは LTO-5 あたりが値段/流通量的にターゲットとなってきます。

今回 LTO-5 を選択した理由は、

  • 圧縮なしで 1TB は欲しい
  • 将来新しい世代のドライブに買い替えても読める
    • LTO ドライブは2世代前までのカートリッジをリードできることを規格として求めている
    • LTO-5 テープは 2017 年現在主流の LTO-7 ドライブで読み込める
  • LTFS (Linear Tape File System) が使える

LTO カートリッジはヨドバシカメラや Amazon で簡単に入手することができるようです。 LTO-5 カートリッジで 1 本あたり 4000~5000 円程。まとめ買いや Amazon のセールを狙えば 1 本あたり 3000 円前後と更に安くなります。

自宅鯖に導入してみた

ということで中古ドライブを購入し、 VMWare ESXi が稼働する自宅のサーバに導入してみました。ドライブは中古で4.3万円、SASカードは約3000円でした。どちらもヤフオクで入手したものです。

サーバへの SAS カードを取り付けた話は別の記事に書いています。

LSI SAS9212-4i HBA カードを ESXi サーバに導入する - yukirii blog

SAS 接続の LTO ドライブを使うため、中古の LSI SAS 9212-4i を購入しました。VMWare ESXi 6.0 Update 2 で使えるようにドライバをインストールするまでの作業メモを紹介します。

ドライブは ESXi 上で HP Serial Attached SCSI Tape として認識され、仮想マシンの編集で SCSI デバイスとしてアタッチすることができました。

コマンドオペレーション

仮想マシン上の CentOS 7.2 でコマンドで実行し、テープドライブの動きを確認してみました。 バックアップスクリプトで使いそうなコマンドを中心に動作をまとめてみます。

テープドライブの状態確認

テープドライブのデバイスファイルは 2 種類存在し、それぞれで書き込みが終了したあとの動作が違う。

$ ls /dev | grep st0$
nst0
st0
  • /dev/st0
    • 書き込みが完了したら自動的に巻き戻しが行われる
  • /dev/nst0
    • 書き込みが完了したら次の書込み可能な位置にヘッドが移動する
    • 複数回書き込み操作を行い追記するときに使う

lsscsi でドライブのデバイスファイル名を確認できる。

$ lsscsi -g
[0:0:0:0]    disk    VMware   Virtual disk     1.0   /dev/sda   /dev/sg0
[0:0:1:0]    tape    HP       Ultrium 5-SCSI   Z5AD  /dev/st0   /dev/sg1
[2:0:0:0]    cd/dvd  NECVMWar VMware IDE CDR10 1.00  /dev/sr0   /dev/sg2

テープの状態確認

テープの制御には mt コマンドを使用する。yum でインストールすることができる。詳しくは mt の manual を参照。

$ sudo yum install mt-st

現在のテープの状態を確認するには mt status コマンドを実行する。 以下は、カートリッジをドライブに挿入した直後のコマンドの出力結果。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN

File number は 0 から始まり、 EOF が現れる度に 1 ずつ増える。最終行の BOT はドライブのヘッドがテープの一番先頭に位置していることを示している。

テープの状態を図で表すと以下のようになる。

テープへの書き込み

データをテープに書き込むには tar コマンドを使用する。

$ tar cvf /dev/nst0 -C /home/user source1

# 複数のテープにまたがって書くときは M (multi-volume) オプションを使う
# 復元の場合も M オプションをつける
$ tar cvfM /dev/nst0 -C /home/user source1

## 実際にファイルを書き込んでみる
$ tar cvf /dev/nst0 file01
file01

## 書き込みが終了した後に status を確認してみる
## File number が 0 から 1 に変わった
$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=1, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

追記を行うには

書き込みが終わり、 File number が増え EOF にヘッドが位置していることを確認し、次の書き込みを開始する。

## まずファイルを書き込む
$ tar cvf /dev/nst0 file02
file02

## 現在の File number は 2
$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN
 
## 追記を行う
$ tar cvf /dev/nst0 file03
file03

## Fine number が 3 に変わった
$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=3, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

書き込み内容のベリファイ

$ tar dvf /dev/nst0 file01

テープの移動方法

テープドライブのヘッドはコマンド操作により BOT EOF EOD 各 archive file の末尾 の4つのいずれかの位置に停止する。

テープへの読み書きの際は、現在ヘッドがテープのどこに位置しているかを確認してから操作を実行する必要がある。誤ったヘッド位置でテープを操作すると、データロストの危険性がある。

ここではテープの位置制御に必要なコマンドの動作についてまとめてみます。 コマンドごとの動作が少しずつ異なり、ややこしいため図にしてみました。

mt fsf

テープを進める。テープは引数で指定した数の分だけ先の EOF に移動する。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN
 
$ mt -f /dev/nst0 fsf 1

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=1, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

mt fsfm

テープを進める。テープは、引数で指定した数の分だけ先の EOF へ移動し、更にその 1 つ前のファイルの最後のブロックに移動する。 つまり EOF の直前の領域で停止する。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN
 
$ mt -f /dev/nst0 fsfm 1

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (1010000):
 ONLINE IM_REP_EN

mt bsf

テープを巻き戻す。テープは引数で指定した数の分だけ前の EOF へ移動し、更にその 1 つ前のファイルの最後のブロックに移動する。 つまり EOF の直前の領域で停止する。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=3, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (9010000):
 EOD ONLINE IM_REP_EN
 
$ mt -f /dev/nst0 bsf 1

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (1010000):
 ONLINE IM_REP_EN

mt bsfm

テープを巻き戻す。テープは引数で指定した数の分だけ前の EOF に移動する。 ファイルを書き終えてその内容を確認するには、 bsfm 1 ではなく bsfm 2 とする必要がある。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=3, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN
 
$ mt -f /dev/nst0 bsfm 2

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

mt asf

指定した File number にテープを移動する。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (1010000):
 ONLINE IM_REP_EN
 
$ mt -f /dev/nst0 asf 2

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=2, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (81010000):
 EOF ONLINE IM_REP_EN

mt eod

テープの末尾の EOF に移動する。

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=0, block number=0, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (41010000):
 BOT ONLINE IM_REP_EN
 
$ mt -f /dev/nst0 eod

$ mt -f /dev/nst0 status
SCSI 2 tape drive:
File number=3, block number=-1, partition=0.
Tape block size 0 bytes. Density code 0x58 (no translation).
Soft error count since last status=0
General status bits on (9010000):
 EOD ONLINE IM_REP_EN

テープの内容を表示する

内容を表示したいアーカイブファイルの先頭にテープを移動させ、 tar t で内容の一覧を確認することができる。

$ tar tvf /dev/nst0
-rw-r--r-- 1001/1001 3773378080 2014-01-12 19:41 file01

データの復元

復元したいアーカイブファイルの先頭にテープを移動させ、 tar x で内容を取り出すことができる。 ディレクトリを指定しない場合はカレントディレクトリに展開される。

$ tar xvf /dev/nst0

テープの巻き戻し

$ mt -f /dev/nst0 rewind

テープの全消去

かなり時間がかかる。LTO-5 テープで約 3 時間かかった。

$ mt -f /dev/nst0 erase

テープの取り出し

$ mt -f /dev/nst0 eject

さいごに

LTO ドライブを購入するに至った経緯と、使用するためのコマンド操作についてまとめてみました。tar (Tape ARchive) コマンドはアーカイブファイルの作成/圧縮に使うコマンドだ、ぐらいの認識でしたが、元々は磁気テープの操作コマンドだったんですね。

今回入手したのは LTO-5 のドライブであるため、 LTFS を使用することができます。今考えている運用としては、バックアップ目的の書き込みはスクリプトによる書き込みで行い、しばらく必要としないファイルの長期保存では LTFS を使うという使い分けを検討しています。 近いうちに Linux 上で LTFS を使用する場合の操作についても、調べてまとめてみようかと思います。

₍ (ง ˙ω˙)ว ⁾⁾ ではまた。

参考リンク


comments powered by Disqus