Backup ExecでNetAppのNDMPバックアップを行おうとしたときに0x20500106(542114054)というエラーになる


Backup ExecでNetAppのNDMPバックアップを行おうとしたときに0x20500106(542114054)というエラーになるという問題が発生した。

技術的詳細をみてみてもよく分からない。

該当の共有を確認すると日本語のディレクトリがある。

そして、NetApp上でボリュームの言語を確認するとja_JP.PCK_v2とUTF-8以外を使用している。

nas01c::> volume show -fields language
vserver   volume language
--------- ------ --------
<略>
svm1      testlang2
                 ja_JP.PCK_v2
nas01c::> 

では、日本語ではなく英数のディレクトリ名に変更

Backup Exec上で問題なく開くことができるようになった。

とりあえず、ボリュームの言語設定の問題であることは判明。

検索すると「How to enable Unicode or UTF-8 Language Support for the NDMP Option」というBackup Exec 11時代の古い記述を発見

ここに書かれている HKEY_LOCAL_MACHINE\SOFTWARE\Veritas\Backup Exec For Windows\Backup Exec\NDMP の UseUTF8の値は「0」であり、UTF-8じゃないボリュームという設定になっているように見える。

この値の変更は、NDMPアクセスをするごとに反映されるようでBackupExecサービスやサーバ再起動は不要だった。

が・・・今回のja_JP.PCK_v2ボリューム上の日本語ディレクトリ問題には対処できなかった。

では、この値変更はBackupExec 21.0で不要かというとそうではなくて、ja_JP.UTF-8ボリュームだと日本語ディレクトリが文字化けで表示される、という問題が発生している。

これが「UseUTF8」の値を「1」に設定することで文字化けが解消されることは確認できた。

さて、本題に戻って、ja_JP.PCK_v2ボリューム上に日本語ディレクトリがある場合にエラーとなる件の対処方法があるかです。

とりあえずボリューム名をクリックするとバックアップ選択はされ、バックアップも完了できました。(レジストリ UseUTF8は0で実施)

リストアを選択すると、きちんと日本語で表示されています。

共有内のファイルを削除してリストアしてみると、正常にリストアされました。

しかし、「実験」だけをリストアしようとするとエラーとなりました。

というわけで、ja_JP.PCK_v2上に日本語ディレクトリがあっても、ボリューム全体をバックアップするのであれば問題無く動作する。

リストア時も全体であればリストアが成功するが、日本語ディレクトリは個別に指定するリストアは失敗する、という動作となりました。

ちなみにja_JP.UTF-8ボリューム上の日本語ディレクトリは文字化けでした。(レジストリUseUTF8は0)

文字化けしている状態であっても、文字化けディレクトリだけを指定してリストアすると正常にリストアできていました。(レジストリUseUTF8は0)


逆にレジストリUseUTF8を1にしてバックアップしたものはリストアできるか検証

ja_JP.UTF-8ボリューム上の日本語は表示できているが、ja_JP.PCK_v2ボリューム上は文字化けています。

リストアジョブを実行してみると成功します。

ja_JP.UTF-8ボリュームではファイル名も問題無くリストアできています。

ja_JP.PCK2_v2の方は文字化けでリストアされています。

ややこしいことにディレクトリ内のファイルについては文字化けせずにリストアされています。

おそらく、指定した階層についてだけ影響があり、それ以下の階層についてはNetApp側で処理されるため元のファイル名のままリストアできたものと想定されます。

NetApp ONTAP9.xでNDMPバックアップする場合の設定項目


NetApp ONTAP 9.xでNDMPバックアップを取得する際に必要な設定項目についての覚え書き

公式のマニュアル:SVMを対象としたNDMPの設定FlexVolのSVMを対象としたNDMPモードの管理

以前は各物理ノードがNDMPを受け付けていたものが、現在はNetAppの管理Storage VM(クラスタ)がNDMPの命令を受け付けるようになっている。

(1) NDMPの有効化

まず、現状有効になっているかを「vserver services ndmp status」を実行して確認する。

ontap-select-cluster::> vserver services ndmp status
This table is currently empty.

ontap-select-cluster::>

有効にするには「vserver services ndmp on -vserver 管理SVM名」を実行する

ontap-select-cluster::> vserver services ndmp on -vserver ontap-select-cluster

ontap-select-cluster::> 

有効になったことを「vserver services ndmp show」を実行して確認する。

ontap-select-cluster::> vserver services ndmp show
VServer       Enabled   Authentication type
------------- --------- -------------------
ontap-select-cluster
              true      challenge
svm0          false     challenge
2 entries were displayed.

ontap-select-cluster::> 

(2) ユーザ作成

NDMPアクセス用のユーザを、NetAppのローカルユーザとして作成する。

下記の例では「backupadmin」というユーザを作成している。「role:backup」という権限で作成することが重要です。

なお、ここで指定するパスワードをそのままNDMPバックアップ時に指定するわけではありません。

ontap-select-cluster::> security login create -user-or-group-name backupadmin -application ssh -authmethod password -role backup

Please enter a password for user 'backupadmin':
Please enter it again:
ontap-select-cluster::> 

NDMPバックアップ時に使用するパスワードは、自動生成のパスワードになります。

「vserver services ndmp generate-password -vserver 管理SVM名 -user ユーザ名」でパスワードを確認します。なお、ユーザ作成時のパスワードを元に生成しているので、generate-passwordを実行するたびにパスワードが変わるということはありません。

ontap-select-cluster::>  vserver services ndmp generate-password -vserver ontap-select-cluster -user backupadmin

 Vserver: ontap-select-cluster
    User: backupadmin
Password: qG5CqQHYxw9fE57g
ontap-select-cluster::> 

(3) LIFの作成

NDMPバックアップは、ネットワークインタフェースのroleがinterclusterであるものを使用します。

現状のinterclusterを確認するには「network interface show -role intercluster」を実行します

ontap-select-cluster::> network interface show -role intercluster
There are no entries matching your query.

ontap-select-cluster::>

存在しない場合は、新規で作成するか、既存のLIFを流用するための設定を行います。

流用する場合は公式マニュアルの「LIFの設定」をみていろいろやります。(面倒くさいはず)

作成する際は、「-home-node」と「-home-port」で主として使用する物理ノードとネットワークポートを指定します。

ontap-select-cluster::> network interface create -vserver ontap-select-cluster -lif cluster_intercluster -role intercluster -service-policy default-intercluster -address 172.17.44.109 -netmask 255.255.0.0 -home-node ontap-select-node -home-port e0a

ontap-select-cluster::>

作成されたことを「network interface show -role intercluster」を実行して確認します。

ontap-select-cluster::> network interface show -role intercluster
            Logical    Status     Network            Current       Current Is
Vserver     Interface  Admin/Oper Address/Mask       Node          Port    Home
----------- ---------- ---------- ------------------ ------------- ------- ----
ontap-select-cluster
            cluster_intercluster
                         up/up    172.17.44.109/16   ontap-select-node
                                                                   e0a     true

ontap-select-cluster::> 

メモ

「vserver show -ins」で表示される「Allowed Protocols」「Disallowed Protocols」の扱い

物理ノードに対するNDMPが有効になっていないか?「system service ndmp show」で「Enabled:false」を確認

対象となるSVMと、必要となるロールの違い:SVMを対象としたNDMPモードでのユーザ認証

Storage Virtual Machine(SVM)を対象としたNDMPモードでは、NDMPユーザ認証がロールベース アクセス制御と統合されます。SVMのコンテキストでは、NDMPユーザのロールはvsadminまたはvsadmin-backupのどちらかである必要があります。クラスタのコンテキストでは、NDMPユーザのロールはadminまたはbackupのどちらかである必要があります。

SVMのfirewall policy設定でinterclusterのポリシーでNDMPが許可されているか「system services firewall policy show -policy intercluster」

NetApp NDMP設定の詳細確認「vserver services ndmp show -ins」の「Preferred Interface Role」に書かれているroleのインタフェースがNDMPに使用できる

NetVault 用firewall設定 for RHEL/Windows


NetVaultサーバをRHEL上にたてて、クライアントにNetAppとRHELとWindows Serverがいる場合のファイアウォール設定サンプル。

必要なポートについては「NetVault 12.0管理ガイド ファイアウォールの設定の例」より流用。

NetVaultサーバ/クライアント間の基本的な通信はネットワークマネージャによりポート20031のTCP/UDPで行われる。
またクライアント上でコミュニケーションマネージャがポート20032 TCPを使用する。

また、NDMPバックアップの場合、NetVaultサーバ側でポート10000 TCPと40000 TCPを使用する。

設定はOS側のfirewall設定と、NetVault側のファイアウォール設定の2つを行う。

NetVault側ファイアウォール設定

NetVaultサーバ側は以下のように設定する。設定したあとはサービス再起動が必須。

デバイス待ち受けポート50100-50199
デバイス接続ポート50200-50299
メッセージ チャンネルの待ち受けポート50300-50399
メッセージ チャンネルの接続ポート50400-50499
NDMPコントロール チャンネルの接続ポート10000
NetVault NDMPデータ チャンネルの待ち受けポート40000
NetVaultマシン間の内部的な通信に使用するポート50500-50599

クライアント側はNDMP関連設定がなくでも良い。設定したあとはサービス再起動が必須。

デバイス待ち受けポート50100-50199
デバイス接続ポート50200-50299
メッセージ チャンネルの待ち受けポート50300-50399
メッセージ チャンネルの接続ポート50400-50499
NDMPコントロール チャンネルの接続ポート
NetVault NDMPデータ チャンネルの待ち受けポート
NetVaultマシン間の内部的な通信に使用するポート50500-50599

クライアント側のfirewallが動いている場合、NetVaultサーバからの設定変更を受け付けることができない。この場合は、NetVaultクライアント側で「txtconfig」コマンドを実行して設定を変更する。

実行すると以下のような画面が表示される。

「p」と入力すると、2枚目のメニューが表示される。この中の「19. ファイアウォール」を変更するため「19」と入力する。

上から順に設定を変更していく。

最後は「s」を入力し、変更を保存して終了する。(qだと設定を反映しない)

OS側firewall設定

サーバ側として以下を開ける
 ・8443 TCP (管理画面)
 ・10000 TCP (NDMP)
 ・40000 TCP (NDP)
 ・20031-20032 TCP
 ・20031 UDP
 ・50100-50599 TCP

クライアント側は管理画面用の8443と、NDMP用の10000と40000の設定を抜く。

CentOS7の場合以下とした

# firewall-cmd --permanent --zone=public --add-port=8443/tcp
# firewall-cmd --permanent --zone=public --add-port=10000/tcp
# firewall-cmd --permanent --zone=public --add-port=40000/tcp
# firewall-cmd --permanent --zone=public --add-port=20031-20032/tcp
# firewall-cmd --permanent --zone=public --add-port=20031/udp
# firewall-cmd --permanent --zone=public --add-port=50100-50599/tcp
# firewall-cmd --reload

Windowsクライアントの場合以下とした。

netsh advfirewall firewall add rule name=”NVBU TCP in ports” dir=in protocol=tcp localport=20031-20032 action=allow
netsh advfirewall firewall add rule name=”NVBU TCP in ports” dir=in protocol=tcp localport=50100-50599 action=allow

netsh advfirewall firewall add rule name=”NVBU TCP out ports” dir=out protocol=tcp localport=20031-20032 action=allow
netsh advfirewall firewall add rule name=”NVBU TCP out ports” dir=out protocol=tcp localport=50100-50599 action=allow

netsh advfirewall firewall add rule name=”NVBU UDP in ports” dir=in protocol=udp localport=20031 action=allow
netsh advfirewall firewall add rule name=”NVBU UDP out ports” dir=out protocol=udp localport=20031 action=allow

最後にNetVaultのクライアント管理にてクライアント追加を行う際に「クライアントはファイアウォールの外側に存在」にチェックを入れることを忘れないこと。(入れないとNetVaultサーバからクライアントへのアクセスに指定したポートを使用しない)

塩漬けにしていたNetBackup 8.xがEXIT STATUS 5978でログインできない


テスト環境用にバックアップとして作成し、1年近く放置してあったNetBackup環境を起動させたところ、SSL証明書の有効期限切れでログインできなくなっていた。

例えばこんな感じ

# /usr/openv/netbackup/bin/nbcertcmd -getCrl
マスターサーバー [netbackup.adosakana.local] の最新の証明書失効リストの取得に失敗 しました。エラー: [5978]
EXIT STATUS 5978: 証明書失効リストの更新に失敗しました。
#

証明書の更新方法を探すと「Tomcat and nbwebsvc certificates are not renewed automatically on the master server with non-English locale.」を発見。

   1) /usr/openv/netbackup/bin/nbwmc -terminate

   2) /usr/openv/netbackup/bin/admincmd/nbcertconfig -u -i

   3) /usr/openv/netbackup/bin/admincmd/nbcertconfig -m

   4) On 8.0 and 8.1: /usr/openv/netbackup/bin/admincmd/nbcertconfig -t      

      On 8.1.1 and 8.1.2:  /usr/openv/netbackup/bin/admincmd/nbcertconfig -t -f

   5) /usr/openv/wmc/bin/install/configureWmc

   6) /usr/openv/wmc/bin/install/configureCerts

   7) /usr/openv/wmc/bin/install/setupWmc

   8) /usr/openv/netbackup/bin/nbwmc -start

   9) /usr/openv/netbackup/bin/nbcertcmd -getCACertificate

  10) /usr/openv/netbackup/bin/nbcertcmd -getCertificate -force

      If the operation fails, perform the steps at “Create a token” section then return to this step.

  11) Remove the /usr/openv/var/global/vxss/nbcertservice/install_token file

上記の手順をそのまま実行してみた。

# /usr/openv/netbackup/bin/nbcertcmd -getCrl
マスターサーバー [netbackup.adosakana.local] の最新の証明書失効リストの取得に失敗 しました。エラー: [5978]
EXIT STATUS 5978: 証明書失効リストの更新に失敗しました。
# /usr/openv/netbackup/bin/nbwmc -terminate
# /usr/openv/netbackup/bin/admincmd/nbcertconfig -u -i
Web サービスユーザー向け NetBackup AT サービス構成が正常に完了しました。
# /usr/openv/netbackup/bin/admincmd/nbcertconfig -m
Web サービス向け NetBackup AT サービス構成が正常に完了しました。
# /usr/openv/netbackup/bin/admincmd/nbcertconfig -t
セキュリティ証明書が tomcat に対して正常に生成されました。
# /usr/openv/wmc/bin/install/configureWmc
# /usr/openv/wmc/bin/install/configureCerts
# /usr/openv/wmc/bin/install/setupWmc
# /usr/openv/netbackup/bin/nbwmc -start
Starting NetBackup Web Management Console could take a couple of minutes ... started.
# /usr/openv/netbackup/bin/nbcertcmd -getCACertificate
CA 証明書は正常にサーバー netbackup.adosakana.local から格納されました。
# /usr/openv/netbackup/bin/nbcertcmd -getCertificate -force
ホスト証明書と証明書失効リストをサーバー netbackup.adosakana.local から正常に受信 しました。
# /usr/openv/netbackup/bin/nbcertcmd -getCrl
マスターサーバー [netbackup.adosakana.local] の証明書失効リストを正常に取得しまし た
# ls /usr/openv/var/global/vxss/nbcertservice/install_token
/usr/openv/var/global/vxss/nbcertservice/install_token
# ls -l /usr/openv/var/global/vxss/nbcertservice/install_token
-rw-r--r--. 1 nbwebsvc nbwebgrp 16  5月 27 12:11 /usr/openv/var/global/vxss/nbcertservice/install_token
# cat /usr/openv/var/global/vxss/nbcertservice/install_token
UPUKFQGMOPVUEQMI
#

これでログインできるようになりました。

NetBackupの操作をコマンドで行う


NetBackupのJava GUI(jnbSA)上で行う操作をCLIコマンドで行うためのメモ書き。

トラブル調査用コマンドについては→「NetBackupのトラブル調査とログ取り

アクティビティモニター

アクティビティモニターの一覧表示:bpdbjobs

アクティビティモニターの一覧は「bpdbjobs」をオプション無しで実行すると得られる。

フルパスは「/usr/openv/netbackup/bin/admincmd/bpdbjobs」

アクティビティモニターで各ジョブの詳細ログ確認:bpdbjobs -report -jobid 番号 -all_columns

各ジョブの詳細ログを確認する場合は「bpdbjobs -report -jobid 番号 -all_columns」となるのだが、これだと「,」区切りで1行に全てを出力してしまう。

人の目だと見にくいので「bpdbjobs -report -jobid 番号 -all_columns | sed s/,/,\n/ig」と実行すると、改行が入り多少見やすくなる。

テープドライブの操作

デバイスモニターの一覧表示:tpconfig -l か tpconfig -d

デバイスモニターで確認出来る各テープドライブのステータスは「tpconfig -l」か「tpconfig -d」で確認出来る。

「tpconfig -d」だとテープドライブのみの確認で、「tpconfig -l」だとロボット番号を含めて確認しやすい形となるので「tpconfig -l」の方を実行することをお勧めする。

フルパスは「/usr/openv/volmgr/bin/tpconfig」

ドライブステータスの変更:vmoprcmd -up ドライブ番号

状態が「DOWN(停止)」となっているテープドライブを「UP(有効)」にするには「vmoprcmd -up ドライブ番号」を実行する。

[root@nbuserver ~]# /usr/openv/volmgr/bin/tpconfig -l
デバイスロボットドライブ       ロボット                    Drive                Device     Second
形式     番号 インデックス  形式 ドライブ番号 状態  Comment    Name                 Path       Device Path
ロボット      0    -    TLD    -       -  -          -                    /dev/sg3
  ドライブ    -    0 hcart2    1  停止  -          IBM.ULT3580-TD5.000  /dev/nst1
ロボット      1    -    TLD    -       -  -          -                    /dev/sg2
  ドライブ    -    1    dlt    1  停止  -          QUANTUM.SDLT600.000  /dev/nst0
[root@nbuserver ~]# /usr/openv/volmgr/bin/vmoprcmd -up 0
[root@nbuserver ~]# /usr/openv/volmgr/bin/vmoprcmd -up 1
[root@nbuserver ~]# /usr/openv/volmgr/bin/tpconfig -l
デバイスロボットドライブ       ロボット                    Drive                Device     Second
形式     番号 インデックス  形式 ドライブ番号 状態  Comment    Name                 Path       Device Path
ロボット      0    -    TLD    -       -  -          -                    /dev/sg3
  ドライブ    -    0 hcart2    1  有効  -          IBM.ULT3580-TD5.000  /dev/nst1
ロボット      1    -    TLD    -       -  -          -                    /dev/sg2
  ドライブ    -    1    dlt    1  有効  -          QUANTUM.SDLT600.000  /dev/nst0
[root@nbuserver ~]#

フルパスは「/usr/openv/volmgr/bin/vmoprcmd」

ロボットのインベントリ実行:vmupdate -rt tld -rn ロボット番号

ロボットに対してインベントリを実行するには「vmupdate -rt tld -rn ロボット番号」を実行します。

ロボット番号については「tpconfig -l」で確認します。

「-recommend」オプションをつけて実行すると「インベントリ操作-内容とボリュームの構成の比較」となります。

-recommendなしが「 インベントリ操作 -ボリューム構成の更新」になります。

[root@nbuserver ~]# /usr/openv/volmgr/bin/vmupdate -rt tld -rn 0 -recommend
推奨された変更のリストを生成しています...

次のように、ボリュームの構成を更新します。
=====================================================
ボリュームの構成は、ロボット内と同じ最新の状態です。
[root@nbuserver ~]# /usr/openv/volmgr/bin/vmupdate -rt tld -rn 0
推奨された変更のリストを生成しています...

次のように、ボリュームの構成を更新します。
=====================================================
ボリュームの構成は、ロボット内と同じ最新の状態です。
[root@nbuserver ~]#

ロボットの中のテープ一覧を表示:vmquery -b -rn ロボット番号

ロボット上で認識されているテープメディアを確認するには「vmquery -b -rn ロボット番号」を実行します。

[root@nbuserver ~]# /usr/openv/volmgr/bin/vmquery -b -rn 0
メディメディロボッ  ロボッロボット 側面/ 光         # マウント/  最終
アID   ア形式 ト形式  ト#    スロット 断面  パートナークリーニングマウント時間
-------------------------------------------------------------------------------
O500L5  HCART2 TLD      0       1     -       -          23     2019/06/03 16:59
O501L5  HCART2 TLD      0       2     -       -           5     2019/06/03 17:10
O502L5  HCART2 TLD      0       3     -       -           6     2019/06/03 15:26
O503L5  HCART2 TLD      0       4     -       -           1     2019/05/21 17:51
O504L5  HCART2 TLD      0       5     -       -          13     2019/06/03 11:24
[root@nbuserver ~]#

テープのQuick Erase:bplabel

NetBackupで記録したテープメディア内の登録を削除する場合「bplabel」コマンドを実行します。

ただ、有効期限が切れていないメディアに対しては実行できません。

その場合は「bpexpdate -d 0 -m メディアID」コマンドを実行して有効期限を切ってから、bplabelを実行する形となります。

[root@nbuserver logs]# /usr/openv/netbackup/bin/admincmd/bplabel -m O501L5 -d hcart2 -erase
メディアが割り当てられていますが、ラベルが付けられません
[root@nbuserver logs]# /usr/openv/netbackup/bin/admincmd/bpexpdate -d 0 -m O501L5
メディア O501L5 が 2019/06/04 17:47:09 で期限切れになります
このメディアのデータは本当に業務に必要ではありませんか
、 O501L5 を本当に削除しますか y/n(n)? y
[root@nbuserver logs]# /usr/openv/netbackup/bin/admincmd/bplabel -m O501L5 -d hcart2 -erase
メディアはすでに NetBackup 形式です。メディア ID = O501L5。消去 を実行しますか? y/n (n) y
消去が完了しました。
[root@nbuserver logs]#

なお、「-erase」がQuick Eraseで「-erase -l」がLong Eraseとなります。

リストア操作を手動で実施する場合

その1:使用可能なバックアップの捜索

「bpimmedia -client クライアント名」もしくは「bpimmedia -client クライアント名 -U」で指定したクライアントに関するバックアップIDを一覧化する。

-Uオプションの方が人が見やすい形となるが、sort/grepで抜き出す場合は-Uなしで実行した方が良い。

その2:リストアしたいバックアップデータを含む「バックアップ時刻」を確認

「bpimagelist -backupid バックアップID -U」を実行し、該当するバックアップIDの「バックアップ時刻」を取得。

この「バックアップ時刻」の文字列をこの後で使う。

その3:該当するバックアップに含まれるファイルを確認

UNIX系(Standard形式)クライアントの場合は「-t 0」なので「bplist -C クライアント名 -t 0 -s バックアップ時刻 -l -R /」

Windows(MS-Windows形式)クライアントの場合は「-t 13」なので 「bplist -C クライアント名 -t 13 -s バックアップ時刻 -l -R /」

なお、選択したバックアップ時刻が最新のバックアップでない場合は「-e バックアップ時刻」を追加し、データを限定する。

[root@nbuserver ~]#  /usr/openv/netbackup/bin/bplist -C nbuwindows -t 13 -s 2019/04/24 09:11 -l /C/Users/Administrator/Documents/test.txt
-rwx------ root;Admi root;None          32  4月 10日 19:47 /C/Users/Administrator/Documents/test.txt
[root@nbuserver ~]#

その4:リストアしたいファイルを選択

リストアしたいファイルの選択は、テキストファイル内にフルパスを記載することで行う。

先ほどのbplistの出力結果に記載されているパスを使用する。

Windowsの場合、「\」は使用できず「/」で代替するため「C:\Users\」が「/C/Users/」という風になる。

[root@nbuserver ~]# cat /tmp/list.txt
/C/Users/Administrator/Documents/test.txt
[root@nbuserver ~]#

その5:リストア先を変更する場合は、変更する規則を記載

リストア先のディレクトリを変更したい場合、変更する規則をテキストファイル内に記載します。

たとえば「C:\Users\Administrator\Documents\」を「C:\tmp\」に変えたい場合は下記の様に記載します。

[root@nbuserver ~]# cat /tmp/change.txt
change /C/Users/Administrator/Documents/ to /C/tmp/
[root@nbuserver ~]#

「change 元パス to 変更後パス」という書式で、複数の変更がある場合は、それぞれ列挙します。

その6:リストアを実行

bprestoreコマンドでリストアを実行します。

バックアップを取得したクライアントとは別のクライアントにリストアしたい場合は「-D 宛先クライアント」を指定します。

Windows(MS-Windows形式)の場合、「/usr/openv/netbackup/bin/bprestore -C クライアント名 -t 13 -s <バックアップ時刻> -D 宛先クライアント -R 変更規則ファイル -f リストア対象ファイル 」といったように実行します。