膨大な量のデータを安価に管理するため、昨今「磁気テープ」に注目が集まっています。大量のテープを管理するにはテープライブラリと呼ばれる装置が用いられます。テープライブラリは、大量の磁気テープを収納するスロット、磁気テープからデータを読み書きするドライブ、スロットとドライブの間で磁気テープを移動するロボットにより構成されます。こちらの動画を見ると、テープライブラリとはどのようなものか、よくわかると思います(リンク先の動画では、ロボットが手前と奥に一台ずつあり、手前のロボットは右側にある二台のドライブにテープを出し入れしています)。
今後、データの量が増え続けると、このようなテープライブラリを触る機会があるかもしれません。そこで、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で操作方法を練習してみてください。