zfs_lto_20140830

Download Report

Transcript zfs_lto_20140830

#01
ZFSでのテープの使い方
~ ご注文はLTOですか? ~
A IPv6 personal user
Kunitaka Nmaba ( @ipv6labs )
http://negi.ipv6labs.jp/
テープの種類(DDS/LTO)
規格
容量/圧縮時
速度
LTO-1
100/200GB
20MB/sec
LTO-2
200/400GB
40MB/sec
LTO-3
400/800GB
80MB/sec
LTO-4
0.8/1.6TB
120MB/sec
LTO-5
1.5/3TB
140MB/sec
LTO-6
2.5/6.25TB
160MB/sec
規格
容量/圧縮時
速度
DDS-3
12/24GB
1.1MB/sec
DDS-4
20/40GB
2.4MB/sec
DAT 72
36/72GB
3.5MB/sec
DAT 160
80/160GB
6.9MB/sec
DAT 320
160/320GB
12MB/sec
DDSは衰退しました
pg 2
Solarisにおけるテープの扱い①
認識に応じて、/dev/rmt/{N} が振られる。
{N} は SAS/SCSI-ID と同じ。(と思う)
$ ls
0
0b
0bn
/dev/rmt
0c
0cn 0hbn 0lb 0m
0mn 0ub 1
1c
1cn 1hbn 1lb 1m
1mn 1ub
0cb 0h 0hn 0lbn 0mb 0n 0ubn 1b 1cb 1h 1hn 1lbn 1mb 1n 1ubn
0cbn 0hb 0l
0ln 0mbn 0u 0un 1bn 1cbn 1hb 1l
1ln 1mbn 1u 1un
{N}n、{N}m といったパスが複数存在するが、テープ装置への
命令を含む特別なパスになる。(args相当と思えばよい)
{N}nは“巻き戻しなし”であり、 {N}mは“巻き戻しせよ”となる。
参考情報: テープドライブの管理 (手順)
http://docs.oracle.com/cd/E26924_01/html/E25880/bkuptapedevice-42512.html
DDSは衰退しました
pg 3
Solarisにおけるテープの扱い②
SAS(SCSI)デバイスでもあるので、cfgadm -al コマンドにも
リストアップされる。 例)c3::rmt/0 等
$ cfgadm -al | grep "::rmt/"
c1::rmt/0
tape
c2::rmt/1
tape
connected
connected
configured
configured
unknown
unknown
保守対応時などは –c unconfigure を行ってパージする。
DDSは衰退しました
pg 4
Solarisにおけるテープの操作①
テープ関係の操作は mt コマンドを使用します。
代表的なものを幾つか紹介しておきます。
テープ装置の状態を知るには status オプションを使用します。
以下のような出力があれば、テープへの書き出しができます。
エラーとなる場合は、テープが挿入されていない可能性が
あります。
また、Busy と返される場合は他のプロセスが使用中です。
# mt -f /dev/rmt/0 status
HP
Ultrium 5-SCSI
tape drive:
sense key(0x0)= No Additional Sense
file no= 0
block no= 0
DDSは衰退しました
residual= 0
retries= 0
pg 5
Solarisにおけるテープの操作②
テープはディスクと異なり、ランダムアクセス出来ないため操作
に応じて巻き戻しなどが必要になります。
撒き戻すには rewind オプションを使用します。
LTO規格のテープはかなり長い(LTO-5/6 で 846m)ので、
末尾からの巻き戻しだと最大98秒必要です。(LTO-1~6共通)
# mt -f /dev/rmt/0 rewind
DDSは衰退しました
pg 6
Solarisにおけるテープの操作③
テープであるため“たわみ”が生じることがあります。
Read/Writeエラーの原因となるので、おまじないとして
テープ投入時1回実施しておくとよいでしょう。
オプションはそのまま retension です。
# mt -f /dev/rmt/0 retension
テープの排出ですが、ejcet ではありません。
offline オプションを使用します。
# mt -f /dev/rmt/0 offline
DDSは衰退しました
pg 7
Solarisにおけるテープへの読み書き①
旧来の方法として tar(gtar)、cpio、dd、
ufsdump(ufsrestore) が使用できます。
汎用性の高い、tar の例を載せておきます。
(書き込み)# tar cf /{Backup_Dir} /dev/rmt/{N}
(読み取り)# tar xf /dev/rmt/{N} /{Restore_Dir}
圧縮する場合は tar のオプションより、テープ装置に委任
したほうがリソース消費や(無駄な)多重圧縮を回避できます。
参考情報: Sun 周辺機器 使用の手引き 第 3 章 テープドライブの設定と使用
http://docs.oracle.com/cd/E19620-01/805-5649/6j5b636ik/index.html
DDSは衰退しました
pg 8
Solarisにおけるテープへの読み書き②
ZFS領域と直接ブロックでテープに読み書きことも可能です。
zfs send/receive コマンドを使用することができます。
# zfs snapshot mypool/mydir@YYYYMMDD-NN
(書き込み)# zfs send mypool/mydir@YYYYMMDD-NN > /dev/rmt/{N}
(読み取り)# zfs receive mypool/mydir_restore < /dev/rmt/{N}
ZFS領域およびテープ装置が重複していなければ、問題なく
並列実行することができる。
(Stream1)# zfs send mypool1/mydir@YYYYMMDD-NN > /dev/rmt/0
(Stream2)# zfs send mypool2/mydir@YYYYMMDD-NN > /dev/rmt/1
DDSは衰退しました
pg 9
Solarisにおけるテープへの読み書き③
より高度な方法として、OpenSSLを間に挟むことで書き込み
ブロックを暗号化することが可能になる。
# nohup zfs send zpool/backup@tape | \
openssl enc -e -aes-256-cbc -pass pass:MYPASSWORD > /dev/rmt/0 &
ZFSにも暗号化機能はあるが、sendした時点で複合化されて
しまう。(そのまま送るには dd を使うしかない?)
暗号化方式をAESとしているのは、“AES-NI”の支援を受ける
為である。(効果はある模様)
OpenSSL部がシングルスレッドなので、CPUの得意な暗号化
を選択する必要がある。
DDSは衰退しました
pg 10
Solarisにおけるテープへの読み書き④
OpenSSLで暗号化書き込みを行ったテープから普通に
zfs receive を行うと読み取りエラーとなる。
# zfs receive -nv zpool/restore < /dev/rmt/0
cannot receive: failed to read from stream
OpenSSLを再度挟むことで複合しつつデータをZFS領域に
送ることができる。
# nohup openssl enc -d -aes-256-cbc -pass pass:MYPASSWORD < /dev/rmt/0 | \
zfs receive zpool/restore &
Xeon E5-2609(2.4GHz)で平均読み書き50MB/sec程度、
LTO-5の場合おおよそ7~8時間必要になる。
瞬間最大性能は80MB/sec程度だった。
DDSは衰退しました
pg 11
Solaris上でのテープ読み書き性能比較
LTO-5規格(理論上140MB/sec)のテープとテープ装置を使用し、
約1.5TBを書き込んだ結果です。
zfs send ではほぼ限界性能まで出し切っています。
測定環境:
Solaris11.1
Xeon E5-2609(2.4GHz)
OpenSSL-1.0.0(標準pkg)
DDSは衰退しました
pg 12