Posted at

mhVTLによるテープライブラリの動作検証方法

More than 1 year has passed since last update.

膨大な量のデータを安価に管理するため、昨今「磁気テープ」に注目が集まっています。大量のテープを管理するにはテープライブラリと呼ばれる装置が用いられます。テープライブラリは、大量の磁気テープを収納するスロット、磁気テープからデータを読み書きするドライブ、スロットとドライブの間で磁気テープを移動するロボットにより構成されます。こちらの動画を見ると、テープライブラリとはどのようなものか、よくわかると思います(リンク先の動画では、ロボットが手前と奥に一台ずつあり、手前のロボットは右側にある二台のドライブにテープを出し入れしています)。

今後、データの量が増え続けると、このようなテープライブラリを触る機会があるかもしれません。そこで、mhVTLと呼ばれるテープライブラリのエミュレータで遊んでみました。


mhVTLの設定方法

mhVTLの設定方法は、本家のサイトに詳しく載っています。私はRHEL6.5の仮想マシン上で試してみました。まずは、ELRepo.orgをyum repositoryとして登録します。

[root@localhost ~]# rpm -Uvh http://elrepo.org/elrepo-release-6-5.el6.elrepo.noarch.rpm

次に、mhVTLをインストールします。

[root@localhost ~]# yum install kmod-mhvtl mhvtl-utils

最後に、mhVTLを起動します。これで、仮想テープライブラリを使用する準備ができました。

[root@localhost ~]# service mhvtl start

lsscsiというコマンドを入れると、二つの仮想テープ装置が起動していることが確認できます。下の例では、/dev/sg10というデバイスが一つ目のロボット、/dev/sg2-5がそのロボットとセットのドライブ、/dev/sg11が二つ目のロボット、/dev/sg6-9がそのドライブとなっています。

[root@localhost ~]# lsscsi -g

[1:0:0:0] cd/dvd VBOX CD-ROM 1.0 /dev/sr0 /dev/sg0
[2:0:0:0] disk ATA VBOX HARDDISK 1.0 /dev/sda /dev/sg1
[4:0:0:0] mediumx STK L700 0104 /dev/sch0 /dev/sg10
[4:0:1:0] tape IBM ULT3580-TD5 0104 /dev/st0 /dev/sg2
[4:0:2:0] tape IBM ULT3580-TD5 0104 /dev/st1 /dev/sg3
[4:0:3:0] tape IBM ULT3580-TD4 0104 /dev/st2 /dev/sg4
[4:0:4:0] tape IBM ULT3580-TD4 0104 /dev/st3 /dev/sg5
[4:0:8:0] mediumx STK L80 0104 /dev/sch1 /dev/sg11
[4:0:9:0] tape STK T10000B 0104 /dev/st4 /dev/sg6
[4:0:10:0] tape STK T10000B 0104 /dev/st5 /dev/sg7
[4:0:11:0] tape STK T10000B 0104 /dev/st6 /dev/sg8
[4:0:12:0] tape STK T10000B 0104 /dev/st7 /dev/sg9


mtxコマンドによるテープライブラリの操作方法

mtxというコマンドを入れると、このテープライブラリを操作することができます。

[root@localhost ~]# yum install mtx

mtxコマンドの"-f"オプションにロボットを指定して、statusサブコマンドを実行すると、そのテープライブラリ内のスロット、磁気テープおよびドライブの一覧を取得することができます。下の例では、「Data Transfer Element」がドライブ、「Storage Element」がスロットであり、それぞれ「Full」と表示されている場所に磁気テープがあることを示しています。それぞれの磁気テープは「VolumeTag = <磁気テープのID>」により区別されます。「Import/Export」と表示されている行は、テープライブラリ装置からの磁気テープの挿入・取り出し口です。

[root@localhost ~]# mtx -f /dev/sg10 status

Storage Changer /dev/sg10:4 Drives, 43 Slots ( 4 Import/Export )
Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = E01001L4
Data Transfer Element 1:Empty
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
Storage Element 1:Empty
Storage Element 2:Full :VolumeTag=E01002L4
Storage Element 3:Full :VolumeTag=E01003L4
Storage Element 4:Full :VolumeTag=E01004L4
Storage Element 5:Full :VolumeTag=E01005L4
Storage Element 6:Full :VolumeTag=E01006L4
Storage Element 7:Full :VolumeTag=E01007L4
Storage Element 8:Full :VolumeTag=E01008L4
Storage Element 9:Full :VolumeTag=E01009L4
Storage Element 10:Full :VolumeTag=E01010L4
Storage Element 11:Full :VolumeTag=E01011L4
Storage Element 12:Full :VolumeTag=E01012L4
Storage Element 13:Full :VolumeTag=E01013L4
Storage Element 14:Full :VolumeTag=E01014L4
Storage Element 15:Full :VolumeTag=E01015L4
Storage Element 16:Full :VolumeTag=E01016L4
Storage Element 17:Full :VolumeTag=E01017L4
Storage Element 18:Full :VolumeTag=E01018L4
Storage Element 19:Full :VolumeTag=E01019L4
Storage Element 20:Full :VolumeTag=E01020L4
Storage Element 21:Empty
Storage Element 22:Full :VolumeTag=CLN101L4
Storage Element 23:Full :VolumeTag=CLN102L5
Storage Element 24:Empty
Storage Element 25:Empty
Storage Element 26:Empty
Storage Element 27:Empty
Storage Element 28:Empty
Storage Element 29:Empty
Storage Element 30:Full :VolumeTag=F01030L5
Storage Element 31:Full :VolumeTag=F01031L5
Storage Element 32:Full :VolumeTag=F01032L5
Storage Element 33:Full :VolumeTag=F01033L5
Storage Element 34:Full :VolumeTag=F01034L5
Storage Element 35:Full :VolumeTag=F01035L5
Storage Element 36:Full :VolumeTag=F01036L5
Storage Element 37:Full :VolumeTag=F01037L5
Storage Element 38:Full :VolumeTag=F01038L5
Storage Element 39:Full :VolumeTag=F01039L5
Storage Element 40 IMPORT/EXPORT:Empty
Storage Element 41 IMPORT/EXPORT:Empty
Storage Element 42 IMPORT/EXPORT:Empty
Storage Element 43 IMPORT/EXPORT:Empty

では、mtxコマンドを使って、磁気テープをスロットからドライブに移動してみましょう。「load」コマンドを使って、2番のスロットにある磁気テープを1番のドライブに移動してみます。

[root@localhost ~]# mtx -f /dev/sg10 load 2 1

Loading media from Storage Element 2 into drive 1...done

すると、2番のスロットが「Empty」に、1番のドライブが「Full」に変わったことがわかるかと思います。

[root@localhost ~]# mtx -f /dev/sg10 status

Storage Changer /dev/sg10:4 Drives, 43 Slots ( 4 Import/Export )
Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = E01001L4
Data Transfer Element 1:Full (Storage Element 2 Loaded):VolumeTag = E01002L4
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
Storage Element 1:Empty
Storage Element 2:Empty
Storage Element 3:Full :VolumeTag=E01003L4
Storage Element 4:Full :VolumeTag=E01004L4
Storage Element 5:Full :VolumeTag=E01005L4
...

「unload」コマンドでドライブからスロットに磁気テープを戻すことができます。

[root@localhost ~]# mtx -f /dev/sg10 unload 2 1

Unloading drive 1 into Storage Element 2...done
[root@localhost ~]# mtx -f /dev/sg10 status
Storage Changer /dev/sg10:4 Drives, 43 Slots ( 4 Import/Export )
Data Transfer Element 0:Full (Storage Element 1 Loaded):VolumeTag = E01001L4
Data Transfer Element 1:Empty
Data Transfer Element 2:Empty
Data Transfer Element 3:Empty
Storage Element 1:Empty
Storage Element 2:Full :VolumeTag=E01002L4
Storage Element 3:Full :VolumeTag=E01003L4
Storage Element 4:Full :VolumeTag=E01004L4
Storage Element 5:Full :VolumeTag=E01005L4
...


磁気テープへのデータの読み書き方法

磁気テープにデータを読み書きするには、バックアップソフトを使う方法などがありますが、この記事ではtarコマンドを使った方法をご紹介します。まず、テープに書き込むファイルを用意してみます。

[root@localhost ~]# echo "hello world" > hello.txt

[root@localhost ~]# echo "hello hello" > hello2.txt

次に、磁気テープをドライブにロードし、ドライブに対してtarコマンドを発行してファイルをテープに書き込みます。私の環境では、指定するドライブのデバイス名はlsscsi -gコマンドにより出力される/dev/st*の方を指定する必要がありました。tarコマンドのcvfオプションで磁気テープにファイルを書き込むことができます。ファイルを追記するにはrvfオプションを指定する必要があります。

[root@localhost ~]# mtx -f /dev/sg10 load 2 1

Loading media from Storage Element 2 into drive 1...done
[root@localhost ~]# tar cvf /dev/st1 hello.txt
hello.txt
[root@localhost ~]# tar rvf /dev/st1 hello2.txt
hello2.txt

磁気テープに書き込んだファイルの一覧を取得するには、tarコマンドのtvfオプションを使います。

[root@localhost ~]# tar tvf /dev/st1

-rw-r--r-- root/root 12 2016-11-01 00:57 hello.txt
-rw-r--r-- root/root 12 2016-11-01 00:57 hello2.txt

さて、磁気テープからファイルを復元してみましょう。復元先のディレクトリを用意し、そこにテープからファイルを読み戻してみます。

[root@localhost ~]# mkdir restore

[root@localhost ~]# cd restore
[root@localhost restore]# tar xvf /dev/st1 hello.txt
hello.txt
[root@localhost restore]# tar xvf /dev/st1 hello2.txt
hello2.txt
[root@localhost restore]# cat hello.txt
hello world
[root@localhost restore]# cat hello2.txt
hello hello

磁気テープに書き込んだファイルが復元できたことが確認できました。


おわりに

以上が、mhVTLによるテープライブラリの操作方法のご紹介です。テープの管理にmtxコマンド、データの読み書きにtarコマンドを使っており、テープライブラリの管理が煩雑に思えるかもしれません。しかし、例えばSpectrum Archive Library Editionのようなソフトウェアを用いると、ファイルシステムを扱うようにテープライブラリに保管したデータを操作することができます。

今後、データの量が増えると、いつか職場でテープライブラリの管理を任される日が来るかもしれません。テープライブラリの管理者に任命されたときは、ぜひこの記事を思い出してmhVTLで操作方法を練習してみてください。