2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

NetBackup メディアIDの保持期間削除スクリプト

Last updated at Posted at 2019-11-08

ここ最近Windows OSでPowerShellスクリプトを組む機会に遭遇したのでまとめておく。
新人の頃、NetBackupのサポート時代からあった問題。2002年ごろだったかな。この仕様を変えるつもりはないんだろうなぁ。

##NetBackupのボリュームプール設計のコツ
この問題は、テープバックアップをジョブスケジューラで回す場合に絶対的について回る。

テープメディアの保持期間のExpire状態からAvailable状態への遷移中に、バックアップを実行すると、使用可能なテープメディアがないと判断されてしまう事象。
これは、テープの保持期間を強制的に削除することで解決できるのだが、外部運用スケジュールミドルウェア(JP1/AJSなど)でジョブ実行している場合は作りこみをせねばならない。

なぜこの問題が発生するかというと、テープのローテーションを最低限の本数で回そうとすると、上書きをどこかでしないといけないのだが、上書きをするためにはテープの保持期間が切れている必要がある。テープの保持期間が切れている状態とは、テープに取得したバックアップデータの保持期間がすべて期限切れとなっている状態である。例えば保持期間7日間のバックアップデータを取得した場合は、24*7時間経過した後でなければそのテープは上書き用として利用できない。
さらに、ボリュームプールに複数のテープが登録されている場合は、保持期間を持つテープが優先的にバックアップ対象として選択され、追記書きされる仕様となっていることにも注意だ。そのため、ボリュームプール設計において、各ボリュームプールに1本ずつメディアIDを登録するなどの工夫をしておくと、運用上扱いやすい設計となる。

##前提条件
前提として、ボリュームプール内のすべてのメディアの保持期限をクリアするので、テープを1本だけクリアしたい場合はこのスクリプトの例を応用して作成してほしい。

保持期間が残っているメディアのみ対象にするなどの改修が必要なので注意。

##vmqueryコマンドによるメディアの状態確認
テープメディアが下記のように設定されている状態を例に説明する。

# /usr/openv/volmgr/bin/vmquery -b
メディメディロボッ  ロボッロボット 側面/ 光         # マウント/  最終
アID   ア形式 ト形式  ト#    スロット 断面  パートナークリーニングマウント時間
-------------------------------------------------------------------------------
LTOD01  HCART  TLD      0       1     -       -          23     yyyy/mm/dd HH:MM
LTOD02  HCART  TLD      0       2     -       -           5     yyyy/mm/dd HH:MM
LTOD03  HCART  TLD      0       3     -       -           6     yyyy/mm/dd HH:MM
LTOD04  HCART  TLD      0       4     -       -           1     yyyy/mm/dd HH:MM
#

また、ボリュームプールの構成は以下例とする。
4本のテープメディアを3つのボリュームプールに所属させる。
2本は同じボリュームプールに所属している構成だ。(test_pool_03に2本設定されている)

ボリュームプール名 メディアID
---
test_pool_01   LTOD01
test_pool_02   LTOD02
test_pool_03   LTOD03
test_pool_03   LTOD04

##配列にボリュームプール内のメディアIDを入れる

PowerShellスクリプトで以下のように実装する。
ボリュームプール名は$v_TARGET_MEDIA変数にローテーションで定義するファンクションを別途実装しているが、ここでは割愛し、test_pool_01を手動設定した例にて説明。

        $v_TARGET_MEDIA = "test_pool_01"
        try{
            $media_array =@("C:\Program Files\Veritas\Volmgr\bin\vmquery" `
                                 " -b -pn "$v_TARGET_MEDIA `
                                  | ?{ $_ -match '^ *LTOD'} | Select-Object -first 2 | %{ $_.Split()[00] })
            
        }catch{
                return 1
        }

vmqueryコマンドが異常終了した場合は、return 1を返すので、ループの判定等に使用してほしい。

##保持期間のクリア処理

保持期間のクリアはbpexpdateコマンドを使用する。
メディアIDしか指定できないため、このような作りとする必要がある。
※ボリュームプールを指定可能としてしまうと、本来クリアしてはならないバックアップまで利用不可としてしまうので、製品仕様としては致し方ない。

配列$media_arrayに代入したすべてのメディアIDに対して保持期間のクリアを実行する。

        $MediaCount = $media_array.Count
    
    do{
        $media_count++
        try{
            $v_RESULT = "C:\Program Files\Veritas\NetBackup\bin\admincmd\bpexpdate" `
                             -m "$media_array[$MediaCount]" -d 0 -force
        }catch{
                return 1
        }

        }while($media_count -lt $MediaCount)

ここでもコマンドが異常終了した場合は、return 1を返すので、ループの判定等に使用してほしい。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?