LTOテープをファイルシステムとして使うLTFSについて 2022/11/09版

前回LTFSの現状についてまとめた記事から2年が経過した。
(「LTOテープをファイルシステムとして使うLTFSについて 2018/01/04版」)

LTO-8のテープメディアに関して発生していた特許騒動も解決し、ようやくLTO-8が普通に使える状況になりました。最近の状況について調査した。

2020/05/11 初回投稿
2020/11/11 部分修正
2021/02/04 LTFS 2.5.1対応
2021/03/10 IBM版の更新を反映
2022/04/11 ISOに関して追記。細々修正
2022/10/14 HPEとOracleの記述修正
2022/11/09 HPE StoreOpenがテープチェンジャ非対応ということが確定。オープンソース版追加


過去のLTFS関連記事
 「LTOテープをファイルシステムとして使うLTFS(2012/11/28)
 「テープ装置メーカ純正のLTFS一覧(2013/12/20更新)
 「IBM版LTFSをRHEL5で使ってみた(2013/05/20)
 「LTOテープをファイルシステムとして使うLTFSについて 2014/06/09版
 「LTOテープをファイルシステムとして使うLTFSについて 2015/11/18版
 「LTOテープをファイルシステムとして使うLTFSについて 2018/01/04版


LTFSとは?

LTO-5/LTO-6からは、メディアを2つの領域に分割して利用することが可能になった。
その機能を活かし、1本のテープメディアの中に、メディア内データの管理情報と、実データを分割して保存することを可能とした。
これにより、これまで実現出来なかった、1本のテープメディアだけで可搬性のあるファイルシステム構築、というものが可能となり、その実装として、LTFS(Linear Tape File System)というのがある。

使用用途としては、バックアップ用ではなく、長期保存のためのアーカイブ用や、大容量データの持ち運び用として使用されている。

LTFSを実現するためのソフトウェアについては、基本的には、IBMが大本のベースを作り、それを各LTOドライブメーカが、自社ドライブ向けにカスタマイズして提供しているような形となっている。

LTFSのバージョン(フォーマット)

LTFSには、バージョンがいくつかあり、現状の最新バージョンはLTFS v2.5
・LTFS 1.0
・LTFS 2.0 : ファイルインデックス関連で機能をいろいろ追加
・LTFS 2.1 : 2012/05/18リリース。LTFS2.0+シンボリックリンク
・LTFS 2.2 : 2013/12/21リリース。管理情報の改良。2016年4月にISO/IEC 20919:2016として登録
・LTFS 2.3 : 2016/03/08リリース。各ファイルのハッシュ情報とファイル名のエンコーディングを追加
・LTFS 2.4 : 2017/12/01リリース。ボリュームのロックなどの追加
・LTFS 2.5 : 2019/05/19リリース。(Revision Historyが規格書に書かれていない…)Incremental Indexの追加
・LTFS 2.5.1: 2020/08/18リリース。細かい修正。2021年7月にISO/IEC 20919:2021 として登録

「LTFSのバージョン」と「LTFSソフトウェアのバージョン」は別物なので注意が必要。
たとえば、OracleのLTFSソフトウェアは「ver1.2.7」だが、「LTFS 2.2」に対応している。

LTFS2.2対応は重要だが、LTFS2.3対応はそれほど重要ではないので、とりあえず、現行リリースされているLTFSソフトウェアはほぼLTFS2.2以降対応なので、あまり心配しなくてもよさそう。2022/11/09時点でもLTFS v2.5対応はまだ無い模様。

LTFSv2.5の規格書はSNIAの「Linear Tape File System (LTFS)」の「Linear Tape File System (LTFS) Format Specification」にてpdfで公開されている。
LTFS v2.5で追加された「Incremental Backup」というのは、いままでは「フルバックアップ」と「前のバックアップとの増加分のバックアップ(Diff)」という2つの概念だったものが、「前のフルバックアップからの増加分のバックアップ(Incr)」が追加されたというもので、バックアップソフト側の概念としては昔からあるものになる。

その他、いろんな情報は、LTOの規格団体の「LTFS Overview」にある。

LTFSソフトウェアの種類

LTFSの公式認証を取得しているLTFSソフトウェアについては、「LTFS Compliance Verification」にて紹介されていたが、2021/03/10現在では該当ページが消滅している。

2020/05/11時点では以下の8個が登録されていた・・・「Date tested」の最新が2016年というあたりメンテナンスされていないのがわかるページだったので消滅も仕方がない感じである。

CompanyProductVersionLTFS VersionLTO GenerationDate tested
QuantumQuantum Scalar LTFS Appliance2.0.22.0.1LTO5 & 69/11/13
HPHP StoreOpen Standalone2.1.02.1.0LTO5 & 69/11/13
IBMIBM Single Drive Version1.3.02.1.0LTO5 & 69/11/13
IBMIBM LTFS Library EditionV1R32.1.0LTO5 & 610/2/13
QuantumQuantum LTFS2.1.02.1.0LTO5 & 611/29/13
HPHP StoreOpen Automation1.2.02.0.1LTO5 & 611/29/13
Spectra LogicSpectra Logic Black Pearl1.12.2LTO5 & 69/11/15
MT-ConsultingNODEUM1.12.1.0LTO5 & 67/05/16

なお、LTFSソフトウェアのバージョンと、対応しているLTFSフォーマットのバージョンに直接の関連性は無いので注意が必要。

また、LTOの規格団体の「LTFS Overview」のページに「Get Started Using LTFS」として紹介されているものは「HPE LTFS」「IBM LTFS」「Quantum LTFS (リンクは死んでいる)」の3種類である。


現状開発が継続していると思われるLTFSソフトウェアについて

・オープンソース版

よく探したらgithubにオープンソース版の開発ツリーがあった

公式: https://github.com/LinearTapeFileSystem/ltfs

単体ドライブ用で、IBM,HP,Quantumドライブに対応している

v2.4.0.0リリースからgithubに移動したらしい。

・IBM

公式: IBM Spectrum Archive(IBM Linear Tape File System)

IBMのLTFSは「IBM Spectrum Archive」という商品名になっている。テープベンダのSpectra Logicとは関係がない。

サポートURLは以前は各プロダクト用ページがあったが、2022/11/09現在は見当たらず「IBM Support」から検索、という感じのようだ。それぞれ「IBM Spectrum Archive Single Drive Edition (SDE)」「IBM Spectrum Archive Library Edition (LE)」「IBM Spectrum Archive Enterprise Edition (EE)」となる。

ドキュメントは「IBM Spectrum Archive Single Drive Edition (SDE) documentation」「IBM Spectrum Archive Library Edition (LE) documentation」「IBM Spectrum Archive Enterprise Edition (EE) documentation」。

また、アップデート用ファイルの入手は、「Fix Central」にて「製品グループ:System Storage」-「Tape Systems」-「Tape drives and software」の下にある「IBM Spectrum Archive Single Drive Edition(SDE) (旧名:LTFS Single Drive Edition)」や「IBM Spectrum Archive Library Edition(LE)(旧名:LTFS Library Edition)」「IBM Spectrum Archive Enterprise Edition(EE)」を選択することで入手する。

なお、LEとEEの方はアップデータのみの配布で、元になるソフトウェアについては、IBMから別途入手する必要がある。
基本的には、Single Drive Edition(SDE)が、他の全てのLTFSソフトウェアの原型になっているもの・・・という感じである。

2022/11/09時点での最新は、
IBM Spectrum Archive Enterprise Edition: ver1.3.3.0(2022/06/30) LTO-9対応/LTFS2.4対応
IBM Spectrum Archive Library Edition : ver2.4.5.0(2022/06/30) LTO-9対応/LTFS2.4対応
IBM Spectrum Archive Single Drive Edition: ver2.4.5.0(2022/06/30) LTO-9対応/LTFS2.4対応

・HP

公式: HPE StoreOpen and Linear Tape File System (LTFS) Software
公式2: HPE StoreOpen and Linear Tape File System (LTFS) Software
日本語情報: HP LTFS (Linear Tape File System)
HPEサポートセンター: HPE LTFS Software

以前は単体ドライブ向けの「日本語の導入マニュアル」が公開されていたがアクセスできなくなっている。

ソフトウェア関連は「HPE LTFS Software」からたどる事になる。

ソフトウェアの入手は、以前は単体ドライブ向けの「HP StoreOpen Standalone」とチェンジャー向け「HP StoreOpen Automation」が分かれていたが、現在は「HPE StoreOpen Software(LTFS)」に統合されているに統合されたことになっているのだが、試してみた感じでは単体ドライブ用の機能しかなかった。

この件について「HPE StoreOpen Software Linux and Mac 3.5 User Guide Frequently asked questions」にWindows向けStoreOpen については ver 3.4.0 以降ではライブラリ/チェンジャーに対応しているが、Linux向けについては単体ドライブしかサポートしない、との記載があることを確認した

Q: Can I use LTFS with tape libraries?
A: From v3.4, the Windows version of StoreOpen Software does offer support for HPE’s range of tape libraries; however the Linux & Mac versions do not provide such support. Tape drives located in tape libraries can be used, but there is no support for listing or changing cartridges. It may be possible to use other third party utilities for such purposes but that is beyond the scope of StoreOpen Software and HPE is unable to support customers experimenting with such configurations.

2022/11/09時点での最新は、
HP StoreOpen Software : ver3.5.0(2022/01/24) LTO-9対応/LTFS 2.4対応
また、ソースコードもダウンロードできる。

・Quantum

公式: Linear Tape File System

ソフトウェア入手は上記の公式ページの「Software」タブから行う。
ソースコードについては、LTFS Open Source Filesから。どちらも2019年から更新されていない。

2022/11/09時点での最新は下記
Linux/Mac : ver2.4.0.2(2019/03) LTO-8/LTFS2.4対応
Windows Model Bドライブ向け: ver3.0(2016/04) LTO-6以降という曖昧な記述のみ
Windows Model Cドライブ向け: ver2.4.0.2(2018/04) LTO-8/LTFS2.4対応。おそらくLinux/Mac向けと同じベース

Linux版のReleasenoteには、Quantum LTOドライブのほか、IBM LTOドライブにも対応という記述がある。

・Spectra Logic

公式:Linear Tape File System (LTFS)

LTFSを紹介するページはあるものの、LTFSを利用するソフトウェアに関するページが見当たらない。
「Spectra libraries are compatible with LTFS software and hardware solutions from a range of providers.」とあるので自社では直接提供していないようだ。

・MT-C NODEUM

公式:NODEUM

リストには「MT-Consulting」とあるが「MT-C」と改称した模様。
階層型ストレージとして、ディスクとテープなどを組み合わせて使用できるようにする、ソフトウェアのみを販売している?



リストに載っていないか死んだLTFS

・Quantum Scalar LTFS Appliance

公式:Scalar LTFSアプライアンス

ハードウェアがセットになったアプライアンス。
これの下にFC経由などでテープチェンジャーを繋いで使うもの。

バックアップアプライアンスに統合されたんだと思われる。

・TANDBERG DATA

2022/04/11時点のメーカWebには掲載が無くなっていたが、2022/11/09に再確認したら、「LTO Ultrium LTFS」でページは復帰していた。しかし、LTFS Softwareの入手先として「IBM SPECTRUM ARCHIVE SINGLE DRIVE EDITION」とIBM版を直接示すようになっているため、独自開発からは撤退した模様。

公式: LTFS for Archive

以前は「LTFS for Big Data」という扱いだったが、「Archive」にかえたようだ。

ソフトウェアの入手は「LTFS Downloads for LTO-5/6(legacy drive)」か「LTFS Downloads for OV-TAD LTO(LTO-7/8)」から行う。

2021/03/10時点での最新は
LTO-5/6向け: ver 3.3.0
LTO-7/8向け: ver 2.4.1.2

ページは英語表記だが、ドキュメントアイコンが日の丸になってるとおり、ダウンロードできるドキュメントはLinux用/Windows用が日本語化されている。
一部TANBERGカスタマイズが入っているようだが、基本的にはIBM Archive Single Drive Edition相当品。

・Oracle

2022/04/11時点ではメーカWebから記載が消えた。ossサイトにあったものも消えた。
2022/10/14時点では、https://lb-oss.oracle.com/projects/ltfs/ から単体ドライブ用のltfs-1.2.7が入手可能となっていた。

公式: Oracle’s StorageTek Linear Tape File System, Open Edition
以前はOracle製品としてのページ: Oracle StorageTek Linear Tape File System (LTFS), Open Edition and Library Edition があったが2021/03/10現在では消滅しているので基本は自社提供はしていないようだ。

現状でも、Oracle版のLTFSソフトウェアのうち単体ドライブ向けの入手は「https://oss.oracle.com/projects/ltfs/files/」から行うことはできる。(ライブラリ向けLTFS-LEは入手不可)

2021/03/10時点での最新は2015年時点と変わらず
ltfs-1.2.7(2015/10/07)

IBM LTFS 2.2.0.2とHP LTFS 2.2.1を組み合わせ、Oracle/StorageTek用の設定を入れたもの。
Oracle LTOドライブ,IBM LTOドライブ,HP LTOドライブに対応している。

LTFS For Dummies」という51ページのPDFを公開しているのが興味深い。
??? For Dummiesは、アメリカで販売されているいろんな分野の初心者向け書籍シリーズ。「ダミー人形向けの」→「バカでも分かる」というものなんだけど・・・このLFS for Dummies、解説具合が微妙過ぎるなぁ・・・

StorageTek Linear Tape File System, Library Edition Japanese Online Documentation」にて日本語ドキュメント群がhtml/pdfで公開されている。以下の4種類がすべてちゃんとした日本語なのは貴重。

StorageTek Linear Tape File System, Library Edition 計画およびインストールガイド
StorageTek Linear Tape File System, Library Edition 管理ガイド
StorageTek Linear Tape File System, Library Edition Web サービスアプリケーションプログラミングインタフェースプログラマーズガイド
StorageTek Linear Tape File System, Library Edition セキュリティーガイド


LTFS関連のツール紹介

・LTOpers

公式: https://github.com/amiaopensource/ltopers

LTFSを使いやすくするためのBASHスクリプトのフロントエンドプログラム
Quantum LTFS 2.4向けで、Homebrewでインストールし、ということなので、MacOSX向けとして作られているようだが、スクリプトを読むと.linuxbrewディレクトリがあった場合の条件分岐があるので、Linuxでも使えそう。


ドキュメント紹介

・富士通のドキュメント

富士通のWebにいくつか日本語解説ページがある。

カートリッジテープに記録されているデータをファイル形式で扱える LTFSオプション

書庫探(しょこたん) > ストレージ技術用語解説 > LTFSとは

マニュアル一覧にて「テープライブラリ (ETERNUS LT)」で検索して出てくる「ETERNUS LT series 用 LTFSオプション ユーザーズガイド

とくに「LTFSオプション ユーザーズガイド」はLTFS全般に関して日本語で解説されているよい文章と言える

コマンド操作についてはチェンジャー/オートローダー利用時の使い方がメインであるが、単体ドライブの場合についてもだいたい同じである。

・Oracleのドキュメント

いまは更新が停止しているがOracle版ltfsについては日本語マニュアルが完備している。

StorageTek Linear Tape File System, Library Edition Japanese Online Documentation Library
Release 1.0

 ・Planning and Installation Guide
 ・Administration Guide
 ・Application Programming Interface Guide
 ・Security Guide

samba 4で構築したドメインにNetApp 9.5が登録できない

注:この記事での事象はsamba 4で使用していた証明書の期限切れが原因でした。
「LDAP Error: Strong authentication is required Details」もしくは「「Unable to connect to NetLogon service on」」というエラーがでる場合については別途「ONTAP 9.5でsambaドメインに参加できない & ONTAP 9.7で失敗」という記事にしています。


テスト環境作成のためNetAppシミュレータの9.5P6を作ってsamba 4で構築したActive Directory環境に登録しようとした・・・

netapp95sim::*> vserver cifs create -cifs-server netappcifs -domain ad.osakana.net -ou CN=Computers -vserver netappcifs -netbios-aliases netappcifs

In order to create an Active Directory machine account for the CIFS server, you must supply the name and password of a
Windows account with sufficient privileges to add computers to the "CN=Computers" container within the "AD.OSAKANA.NET"
domain.

Enter the user name: administrator

Enter the password:

Error: Machine account creation procedure failed
  [   215] Loaded the preliminary configuration.
  [   267] Successfully connected to ip 172.17.44.49, port 88 using
           TCP
  [   342] Successfully connected to ip 172.17.44.49, port 636 using
           TCP
  [   379] Required certificate with CA ADSERVER.ad.osakana.net is
           not installed
  [   381] Unable to start LDAPS: Can't contact LDAP server
  [   381] Additional info: error:14090086:SSL
           routines:ssl3_get_server_certificate:certificate verify
           failed
  [   381] Unable to connect to LDAP (Active Directory) service on
           adserver.ad.osakana.net (Error: Can't contact LDAP
           server)
**[   381] FAILURE: Unable to make a connection (LDAP (Active
**         Directory):AD.OSAKANA.NET), result: 7642

Error: command failed: Failed to create the Active Directory machine account "netappcifs". Reason: LDAP Error: Cannot
       contact the LDAP server.

netapp95sim::*>

エラー発生。

なんか調べたところ、active-directoryというコマンドでも登録できるらしいのでそれでもテストしてみる。

netapp95sim::*> active-directory create -vserver netappcifs -account-name adserver -domain ad.osakana.net
  (vserver active-directory create)

In order to create an Active Directory machine account, you must supply the name and password of a Windows account with
sufficient privileges to add computers to the "CN=Computers" container within the "AD.OSAKANA.NET" domain.

Enter the user name: administrator

Enter the password:

Error: Machine account creation procedure failed
  [   179] Loaded the preliminary configuration.
  [   230] Successfully connected to ip 172.17.44.49, port 88 using
           TCP
  [   298] Successfully connected to ip 172.17.44.49, port 636 using
           TCP
  [   333] Required certificate with CA ADSERVER.ad.osakana.net is
           not installed
  [   335] Unable to start LDAPS: Can't contact LDAP server
  [   335] Additional info: error:14090086:SSL
           routines:ssl3_get_server_certificate:certificate verify
           failed
  [   336] Unable to connect to LDAP (Active Directory) service on
           adserver.ad.osakana.net (Error: Can't contact LDAP
           server)
**[   336] FAILURE: Unable to make a connection (LDAP (Active
**         Directory):AD.OSAKANA.NET), result: 7642

Error: command failed: Failed to create the Active Directory machine account "ADSERVER". Reason: LDAP Error: Cannot
       contact the LDAP server.

netapp95sim::*>

同じようにエラー。

この後いろいろ試行錯誤した結果、自己証明CAをNetAppに入れればいいのでは?とやってみた。(「クラスタまたはSVMがクライアントであるSSLサーバを認証するためのサーバCA証明書のインストール」)

netapp95sim::*> security certificate install -vserver netappcifs -type server-ca

Please enter Certificate: Press <Enter> when done
-----BEGIN CERTIFICATE-----
<sambaの/usr/local/samba/private/tls/ca.pemの内容を張り付け>
-----END CERTIFICATE-----


Error: command failed: The certificate has expired.

netapp95sim::*>

ん?「The certificate has expired.」???

samba公式「Configuring LDAP over SSL (LDAPS) on a Samba AD DC」の「Verifying the certificate」に書いてある手法で確認してみます。

# ls -l  /usr/local/samba/private/tls
合計 12
-rw-r--r--. 1 root root 2041  3月 27  2018 ca.pem
-rw-r--r--. 1 root root 2045  3月 27  2018 cert.pem
-rw-------. 1 root root 3243  3月 27  2018 key.pem
#

# openssl verify /usr/local/samba/private/tls/cert.pem -CApath /usr/local/samba/private/tls/ca.pem
/usr/local/samba/private/tls/cert.pem: O = Samba Administration, OU = Samba - temporary autogenerated HOST certificate, CN = ADSERVER.AD.OSAKANA.NET
error 20 at 0 depth lookup:unable to get local issuer certificate
Error opening certificate file -CApath
140285523859344:error:02001002:system library:fopen:No such file or directory:bss_file.c:402:fopen('-CApath','r')
140285523859344:error:20074002:BIO routines:FILE_CTRL:system lib:bss_file.c:404:
unable to load certificate
/usr/local/samba/private/tls/ca.pem: O = Samba Administration, OU = Samba - temporary autogenerated CA certificate, CN = ADSERVER.AD.OSAKANA.NET
error 18 at 0 depth lookup:self signed certificate
O = Samba Administration, OU = Samba - temporary autogenerated CA certificate, CN = ADSERVER.AD.OSAKANA.NET
error 10 at 0 depth lookup:certificate has expired
OK
#

はい。証明書の有効期限切れでした。

手順がめんどいので、/usr/local/samba/private/tlsにあるファイルをリネームしてから「systemctl stop samba-ad-dc.service」「systemctl start samba-ad-dc.service」で強制再作成させました。

rsyncによるディレクトリ同期を行う際、並列実行により高速化する手法

rsyncを高速化するために、分散して実行することにした。

全部を1つのスクリプトとしてもいいのだが、デバグがしやすいように分割して作業を行えるようにしている。

また、下記の記述はLinuxの/usrをコピーすることを想定している。環境に応じて書き換えること。

まず、/usr/xxx以下にあるファイルまでをコピーするために以下を実行する。

# rsync --archive -v --exclude="*/*/" /usr/ /mnt/vol/voltest

このexcludeオプションをつけている場合、「/usr/xxx/yyy」のファイルとシンボリックリンクはコピーされる。しかし「/usr/xxx/zzz/」のディレクトリはコピーされない。

次に、「/usr/xxx/zzz/」のディレクトリ一覧を取得する。

# find /usr -mindepth 2 -maxdepth 2 -type d -print

このディレクトリ一覧を下記のperlスクリプトに食わせる。(下記スクリプトは” find /usr -mindepth 2 -maxdepth 2 -type d -print > list.txt”で取得したlist.txtを使う想定)

#!/usr/bin/perl

use threads;
use Thread::Queue;

my $LOGDIR="/root/test";
my $MAXSESSION=5;

my $sourcepathbase="/usr";
my $destpathbase="/mnt/vol/voltest";

my $stream = Thread::Queue->new;

open(FILE,"list.txt");
while(my $tmp=<FILE>){
        $stream->enqueue("$tmp");

}
close(FILE);

sub SyncExecute{
        while(my $str = $stream->dequeue){
                # 改行削除
                $str =~ s/\n//ig;
                $str =~ s/\r//ig;
                # ログ出力用ファイル名
                my $filename=$str;
                $filename =~ s/\//-/ig;
                $filename =~ s/\.//ig;
                $filename =~ s/-$//ig;
                $filename =~ s/#//ig;
                $filename =~ s/^-//ig;
                $filename =~ s/ //ig;
                my $logfile="$LOGDIR/test-$filename.log";
                # rsync元と先の処理
                my $tmp,$st,$ed;
                my $sourcepath,$destpath;
                $tmp=substr($str,0,1);
                if($tmp eq "/"){
                        $sourcepath=$sourcepathbase.$str."/";
                        $destpath=$destpathbase.$str;
                }else{
                        $sourcepath=$sourcepathbase."/".$str."/";
                        $destpath=$destpathbase."/".$str;
                }
                `date >> $logfile`;
                print "rsync -v --archive $sourcepath $destpath >> $logfile 2>&1 \n";
                `rsync -v --archive $sourcepath $destpath >> $logfile 2>&1 `;
                `date >> $logfile`;
                #`sleep 5`;
        }
}


my @kids;
foreach(1..$MAXSESSION){
        my $kid = threads->new(\&SyncExecute,$stream);
        push(@kids,$kid);
        $stream->enqueue(undef);
}


print "wait\n";

foreach(@kids){
        my ($return) =$_ -> join;
}

このスクリプトは、rsyncの同時実行数5で、並列にrsyncを実行していくものになっている。

実行したサーバの負荷状況に応じて「my $MAXSESSION=5;」で設定している 同時実行数 を調整する。あまり大きくしすぎるとサーバからの応答が遅くなりすぎるのでほどほどに・・・


2020/03/10追記

上記で実行するrsyncコマンドはハードリンクの処理を行わないものとなっている。

このため、ハードリンクされているファイルがある場合、コピー先のファイルが1つではなく複数別個のものとしてコピーされる。

ハードリンクをそのままコピーしたい場合は「–hard-links」オプションを追加する必要があるのだが、ハードリンク処理の効力範囲は同一プロセス内で処理すること、という条件があるため、今回のような分割処理して高速化する、という場合には不適切となっている。

このため、ハードリンクファイルがある場合は、初回同期は分割処理で行い、2回目はディレクトリ全体を–hard-linksオプションをつけて1プロセスで処理してハードリンク処理を行わせる、という手法をとる必要がある。

なお、ハードリンク処理が完了したあと、分割処理の対象となった場合、すでにファイルが存在しているので再コピーされる、ということは発生しない。

ONTAP9でボリューム削除して再作成しようとしたら空き容量がないと言われる

NetApp ONTAP8 7-modeで使用中のボリュームがあり、それをNetApp ONTAP9.5環境に対してtransitionのsnapmirrorを行った。

が・・・元ボリュームがqtree snapmirror中であったため、最後の処理で失敗した。(event log showの結果より)

1/14/2020 05:52:49  netapp95         ERROR         smc.snapmir.init.fail: Initialize from source volume 'netapp7mode:vol211' to destination volume 'netapp95svm:vol211' failed with error 'Transfer failed.'. Relationship UUID 'a3555a83-3360-11ea-a0b6-00a098f844df'.
1/14/2020 05:52:49  netapp95         ERROR         replication.dst.err: SnapMirror: destination transfer from netapp7mode:vol211 to vol211 : replication transfer failed to complete.
1/14/2020 05:52:49  netapp95         ERROR         snapmirror.dst.OnlineErr: SnapMirror not able to bring destination volume vol211 online, CR_TRANS_QTREE_REPLICA.
1/14/2020 05:52:46  netapp95         ERROR         wafl.voltrans.qtree.replica: The source of volume vol211 is a qtree replica. It cannot be transitioned to clustered Data ONTAP.

これについては、元のボリューム(netapp7mode:vol211)が受け側となっているqtree snapmirror全てに対して、「snapmirror quiesce netapp7mode:/vol/vol211/~」 と「snapmirror break netapp7mode:/vol/vol211/~」 を実行し、snapmirrorのステータスが「Broken-off」であれば7mode→ONTAP9へのtransition snapmirrorが成功することを確認。

で、snapmirrorの初期化(snapmirror initialize)にした場合、受け側のボリューム(今回はnetapp95svm:vol211)を削除して、再作成する必要がある。

netapp95上で「snapmirror delete -destination-path netapp95svm:vol211」でsnapmirror登録を消した後、ボリュームを「volume offline -vserver netapp95svm -volume vol211」でオフラインにしてから「volume delete -vserver netapp95svm -volume vol211」 で削除。

そして、「volume create -vserver netapp95svm -volume vol211 -aggregate aggr名 -size 22t -state online -type DP」で作成!

netapp95::> volume create -vserver netapp95svm -volume vol211 -aggregate aggr名 -size 22t -state online -type DP
[Job 351] Job is queued: Create vol211.                                        

Error: command failed: [Job 351] Job failed: Failed to create the volume on
       node "netapp95svm". Reason: Request to create volume "vol211" failed
       because there is not enough space in aggregate "aggr名". Either
       create 10.9TB of free space in the aggregate or select a size of at most
       11.2TB for the new volume. 
netapp95::>

おや?

netapp95::> storage aggregate show
Aggregate     Size Available Used% State   #Vols  Nodes            RAID Status
--------- -------- --------- ----- ------- ------ ---------------- ------------
<略>
aggr名 
           29.41TB   11.29TB   62% online       2 netapp95svm      raid_dp,
                                                                   normal
<略>
netapp95::>

まだ使用中という認識になっている???

いろいろ調べた結果、ONTAP 8.3より導入されたVolume Recovery Queueにより、削除したボリュームは12時間残しておく、という機能によるものだった。

How to use the Volume Recovery Queue feature in clustered Data ONTAP 8.3
How to enable the volume recovery queue in clustered Data ONTAP 8.3
After deleting a volume, the volume is brought offline with type DEL

強制的に削除するにはdiagモードにあるvolume recovery-queue purgeを使用する。

netapp95::> set diag 
Warning: These diagnostic commands are for use by NetApp personnel only.
Do you want to continue? {y|n}: y

netapp95::*> volume recovery-queue show
Vserver   Volume      Deletion Request Time     Retention Hours
--------- ----------- ------------------------  ---------------
netapp95svm vol211_1032_1032 
                      Thu Jan 16 14:33:18 2020               12

netapp95::*> 

上記の「volume recovery-queue show」で現在保持している削除したボリュームを確認できる。

削除は「volume recovery-queue purge -vserver netapp95svm -volume vol211_1032_1032」というような感じで実行する。

netapp95::*> volume recovery-queue purge -vserver netapp95svm -volume vol211_1032_1032 
Queued private job: 251                                                        

netapp95::*> volume recovery-queue show
This table is currently empty.

netapp95::*> 

消えたのでaggregateは復活したはず!!!

netapp95::*> df -A -h
Aggregate                total       used      avail capacity
<略>
aggr名                    29TB       18TB       11TB      61%
aggr名/.snapshot            0B         0B         0B       0%
<略>
netapp95::*>

あれ????

なぜだろー??

なぜだろー???としばらく検索してから、再度実行

netapp95::*> df -A -h
Aggregate                total       used      avail capacity
<略>
aggr名                    29TB       16TB       12TB      57%
aggr名/.snapshot            0B         0B         0B       0%
<略>
netapp95::*> 

おや?空き容量が少し増えてる?

「df -A」の実行に切り替えてみると、徐々に空き容量が増えていっていることが判明。

どうやら内部処理に時間がかかっているだけのようでした。

ちなみに別件でトラブった時にサポートに聞いたら、この徐々に空き容量が増える、という内部処理を無くすことはできない、とのことでした。

cluster ONTAP/ONTAP9のNFS exports設定にNISホスト名が使えないのでdnsmasqでごまかすことにした

NetAppのcluster ONTAP8.x/ONTAP9はNISを使える、と書いてあるものの、詳細を確認すると、NISホスト名は使用できず、NISユーザとパスワード、NISグループ、NIS netgroup(ホスト名用のグループ)しか使えないとのこと。

NIS netgroup対応といっても、netgroupに含まれるホスト名にNIS ホスト名が許されるわけではなく、DNS起因のホスト名の使用が許される、というものでした。(ONTAPシミュレータで確認)

既存のDNSサーバにエントリを追加してもらえれば解決ではありますが、できるかどうかわからないので、お手軽にできる回避策として、RHEL6/RHEL7などの標準パッケージ群に含まれているdnsmasqを使用した簡易DNSサーバを立ててみることにした。

dnsmasqは/etc/hostsもしくはhostsフォーマットに準じたファイルを指定して、そこのエントリを元にDNS応答を返すことができる。

NISホスト名を「ypcat hosts」で一括出力するとhostsフォーマットでエントリが取得できるので、crontabで定期的に「ypcat hosts」を実行して情報更新を行い、dnsmasqでDNSで応答を返せるようにした。

まずは、DNSサーバのインストール。

[root@nisclient ~]# yum install dnsmasq
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Loading mirror speeds from cached hostfile
 * base: ftp.nara.wide.ad.jp
 * extras: ftp.nara.wide.ad.jp
 * updates: ftp.nara.wide.ad.jp
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package dnsmasq.x86_64 0:2.48-18.el6_9 will be インストール
--> 依存性解決を終了しました。

依存性を解決しました

================================================================================
 パッケージ       アーキテクチャ  バージョン                リポジトリー   容量
================================================================================
インストールしています:
 dnsmasq          x86_64          2.48-18.el6_9             base          150 k

トランザクションの要約
================================================================================
インストール         1 パッケージ

総ダウンロード容量: 150 k
インストール済み容量: 294 k
これでいいですか? [y/N]y
パッケージをダウンロードしています:
dnsmasq-2.48-18.el6_9.x86_64.rpm                         | 150 kB     00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : dnsmasq-2.48-18.el6_9.x86_64                    1/1
  Verifying               : dnsmasq-2.48-18.el6_9.x86_64                    1/1

インストール:
  dnsmasq.x86_64 0:2.48-18.el6_9

完了しました!
[root@nisclient ~]#

/etc に配置された設定ファイルを確認。

[root@nisclient ~]# ls -l /etc/dnsmasq.*
-rw-r--r--. 1 root root 21214 10月  3 08:18 2017 /etc/dnsmasq.conf

/etc/dnsmasq.d:
合計 0
[root@nisclient ~]#

NISで配布されたhostsを/etc/hosts-from-nisに保存するということにして、/etc/hosts は使用しない、ということにして、/etc/dnsmasq.conf の以下を変更

変更前
# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
#no-hosts
# or if you want it to read another file, as well as /etc/hosts, use
# this.
#addn-hosts=/etc/banner_add_hosts
変更後
# If you don't want dnsmasq to read /etc/hosts, uncomment the
# following line.
no-hosts
# or if you want it to read another file, as well as /etc/hosts, use
# this.
addn-hosts=/etc/hosts-from-nis

上記以外のエントリは標準設定のままです。NISから配布されたhostsを/etc/hosts-from-nisに保存

[root@nisclient ~]# ypcat hosts > /etc/hosts-from-nis
[root@nisclient ~]# cat /etc/hosts-from-nis
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
172.17.44.100   nfstest
172.17.44.49    server49      server49.vm2.example.com
172.17.44.49    server49      server49.vm2.example.com
172.17.44.87    server87
172.17.44.88    server88
172.17.44.89    server89
[root@nisclient ~]#

続いてfirewalld/iptablesの設定変更して、ポート53のtcp/udpを許可。

[root@nisclient ~]# cat /etc/sysconfig/iptables
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 53 -j ACCEPT
-A INPUT -m state --state NEW -m udp -p udp --dport 53 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT
[root@nisclient ~]# service iptables restart
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]
[root@nisclient ~]#

firewalldの場合は以下

-bash-4.2# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: dhcpv6-client ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

-bash-4.2# firewall-cmd --permanent --zone=public --add-service=dns
success
-bash-4.2# firewall-cmd --reload
success
-bash-4.2# firewall-cmd --list-all
public (active)
  target: default
  icmp-block-inversion: no
  interfaces: ens192
  sources:
  services: dhcpv6-client dns ssh
  ports:
  protocols:
  masquerade: no
  forward-ports:
  source-ports:
  icmp-blocks:
  rich rules:

-bash-4.2#

で、dnsmasqを起動して、DNSにより名前解決ができるか確認してみます。

[root@nisclient ~]# service dnsmasq status
dnsmasq は停止しています
[root@nisclient ~]# service dnsmasq start
Starting dnsmasq:                                          [  OK  ]
[root@nisclient ~]# service dnsmasq status
dnsmasq (pid  1556) を実行中...
[root@nisclient ~]#

[root@nisclient ~]# nslookup nfstest 127.0.0.1
Server:         127.0.0.1
Address:        127.0.0.1#53

Name:   nfstest
Address: 172.17.44.100

[root@nisclient ~]#
モバイルバージョンを終了