Cuturnの適当日記

徒然なるままに適当に駄文を吐き出しております

NetAppを利用した安くできるボリュームバックアップ 筐体間も出来るはずよ?

あまり日本語の記事を見かけなかったので備忘録代わりに投稿しておく。
参考にしたURLは以下の通り。

My journy with NetApp : Which is faster, NDMPcopy or vol copy?

NetApp FASシリーズを利用したバックアップというのを考えたとき、バックアップと一言で言っても案外人によって感覚が異なったりする。

  1. 単にファイルを戻せる断面が欲しいだけでデータの保管という意味ではない場合⇒Snapshot
  2. データの永続保管が目的の場合⇒SnapVault
  3. 有事にRPOを短縮するためのミラー⇒SnapMirror

さて、上記のSnapVaultとSnapMirrorは有料で、入れないと困ると考えがちだが、NetAppのCLIなど利用してよいのであればボリュームの別シェルフ等へのバックアップを行う方法はちゃんとある。筐体間でちょっとまだ試せてないが出来るはず。大体ボリュームやファイルを指定する際にファイラーのIPやホスト名を付ければOKのはず。ただhosts書き換えろとかいろいろあるようだが・・・。

「vol copy」を利用したボリューム全体のコピー

vol copy start {ソースボリューム} {デスティネーションボリューム}

上記コマンドを利用することで、ブロックレベルコピーを行うことができる。ただし、宛先ボリュームは完全にソースボリュームのコピーボリュームになるので元のデータは消去されるし、転送中は宛先ボリュームをオフラインにしておく必要がある。
また、ブロックレベルコピーのため毎回フルコピーを行うのでそれ相応に時間がかかることに注意。

実行例
FAS01> vol copy start aggr0_mig01 aggr0_mig01_bkup
This can be a long-running operation. Use Control - C (^C) to interrupt.
Copy Volume: aggr0_mig01 on machine 127.0.0.1 to Volume: aggr0_mig01_bkup
VOLCOPY: Starting on volume 1.
Volume 'aggr0_mig01_bkup' is now restricted.
11:13:49 JST : vol copy restore 0 : begun, 32204 MB to be copied.
Fri Feb 21 11:13:49 JST
[FAS01:volcopy.dst.autoRestrictMsg:notice]: Vol copy automatically
restricting destination volume aggr0_mig01_bkup (currently offline).
11:14:33 JST : vol copy restore 0 : 5 % done. Estimate 15 minutes remaining.
11:14:59 JST : vol copy restore 0 : 10 % done. Estimate 11 minutes remaining.
...
11:21:33 JST : vol copy restore 0 : 95 % done. Estimate 1 minutes remaining.
11:22:20 JST : vol copy restore 0 : 100% done, 32204 MB copied.

「ndmpcopy」コマンドを利用したコピー

ndmpcopy [-l 0|1|2 ] {ソースパス} {デスティネーションパス}

ndmpcopyコマンドを利用することで、ファイル単位での筐体間、ボリューム間コピーが可能。「vol copy」コマンドと異なるのは宛先ボリュームがオンラインの状態で可能なこと、そしてインクリメンタルコピーが可能なこと。「-l 0」と指定するとフルバックアップを取得し、「-l 1」を指定するとフルバックアップとの差分のバックアップを取得する。「-l 2」は「-l 1」との差分となる。

実行例
※フルダンプ
FAS01> ndmpcopy /vol/aggr0_mig01 /vol/aggr0_mig01_bkup
Ndmpcopy: Starting copy [ 2 ] ...
Ndmpcopy: dcdapst01: Notify: Connection established
Ndmpcopy: dcdapst01: Notify: Connection established
Ndmpcopy: dcdapst01: Connect: Authentication successful
Ndmpcopy: dcdapst01: Connect: Authentication successful
Ndmpcopy: dcdapst01: Log: DUMP: creating
"/vol/aggr0_mig01/../snapshot_for_backup.5" snapshot.
Ndmpcopy: dcdapst01: Log: DUMP: Using Full Volume Dump
Ndmpcopy: dcdapst01: Log: DUMP: Date of this level 0 dump: Fri Feb 21
12:00:48 2014.
Ndmpcopy: dcdapst01: Log: DUMP: Date of last level 0 dump: the epoch.
Ndmpcopy: dcdapst01: Log: DUMP: Dumping /vol/aggr0_mig01 to NDMP connection
Ndmpcopy: dcdapst01: Log: DUMP: mapping (Pass I)[regular files]
Ndmpcopy: dcdapst01: Log: DUMP: mapping (Pass II)[directories]
Ndmpcopy: dcdapst01: Log: DUMP: estimated 80826044 KB.
Ndmpcopy: dcdapst01: Log: DUMP: dumping (Pass III) [directories]
Ndmpcopy: dcdapst01: Log: DUMP: dumping (Pass IV) [regular files]
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:00:50 2014: Begin
level 0 restore
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:00:50 2014: Reading
directories from the backup
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:00:50 2014: Creating
files and directories.
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:00:51 2014: Writing
data to files.
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:05:49 2014 : We have
read 33475649 KB from the backup.
Ndmpcopy: dcdapst01: Log: DUMP: Fri Feb 21 12:05:49 2014 : We have
written 33476563 KB.
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:10:49 2014 : We have
read 68779944 KB from the backup.
Ndmpcopy: dcdapst01: Log: DUMP: Fri Feb 21 12:10:49 2014 : We have
written 68781186 KB.
Ndmpcopy: dcdapst01: Log: ACL_START is '80485616640'
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:12:09 2014: Restoring NT ACLs.
Ndmpcopy: dcdapst01: Log: DUMP: dumping (Pass V) [ACLs]
Ndmpcopy: dcdapst01: Log: RESTORE: RESTORE IS DONE
Ndmpcopy: dcdapst01: Log: DUMP: 78599242 KB
Ndmpcopy: dcdapst01: Log: DUMP: DUMP IS DONE
Ndmpcopy: dcdapst01: Notify: restore successful
Ndmpcopy: dcdapst01: Log: DUMP: Deleting
"/vol/aggr0_mig01/../snapshot_for_backup.5" snapshot.
Ndmpcopy: dcdapst01: Log: DUMP_DATE is '5687918944'
Ndmpcopy: dcdapst01: Notify: dump successful
Ndmpcopy: Transfer successful [ 0 hours, 11 minutes, 28 seconds ]
Ndmpcopy: Done
※レベル1のインクリメンタルダンプ 1Gだけ更新して行ったが1分で終わった
FAS01> ndmpcopy -l 1 /vol/aggr0_mig01 /vol/aggr0_mig01_bkup
Ndmpcopy: Starting copy [ 3 ] ...
Ndmpcopy: dcdapst01: Notify: Connection established
Ndmpcopy: dcdapst01: Notify: Connection established
Ndmpcopy: dcdapst01: Connect: Authentication successful
Ndmpcopy: dcdapst01: Connect: Authentication successful
Ndmpcopy: dcdapst01: Log: DUMP: creating
"/vol/aggr0_mig01/../snapshot_for_backup.7" snapshot.
Ndmpcopy: dcdapst01: Log: DUMP: Using inowalk incremental dump for Full Volume
Ndmpcopy: dcdapst01: Log: DUMP: Date of this level 1 dump: Fri Feb 21
12:57:08 2014.
Ndmpcopy: dcdapst01: Log: DUMP: Date of last level 0 dump: Fri Feb 21
12:00:48 2014.
Ndmpcopy: dcdapst01: Log: DUMP: Dumping /vol/aggr0_mig01 to NDMP connection
Ndmpcopy: dcdapst01: Log: DUMP: mapping (Pass I)[regular files]
Ndmpcopy: dcdapst01: Log: DUMP: mapping (Pass II)[directories]
Ndmpcopy: dcdapst01: Log: DUMP: estimated 6476070 KB.
Ndmpcopy: dcdapst01: Log: DUMP: dumping (Pass III) [directories]
Ndmpcopy: dcdapst01: Log: DUMP: dumping (Pass IV) [regular files]
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:57:11 2014: Begin
incremental restore
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:57:12 2014: Reading
directories from the backup
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:57:12 2014: Creating
new files and directories.
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:57:12 2014: Writing
data to files.
Ndmpcopy: dcdapst01: Log: ACL_START is '6605280256'
Ndmpcopy: dcdapst01: Log: RESTORE: Fri Feb 21 12:58:07 2014: Restoring NT ACLs.
Ndmpcopy: dcdapst01: Log: DUMP: dumping (Pass V) [ACLs]
Ndmpcopy: dcdapst01: Log: RESTORE: RESTORE IS DONE
Ndmpcopy: dcdapst01: Log: DUMP: 6450476 KB
Ndmpcopy: dcdapst01: Log: DUMP: DUMP IS DONE
Ndmpcopy: dcdapst01: Notify: restore successful
Ndmpcopy: dcdapst01: Log: DUMP: Deleting
"/vol/aggr0_mig01/../snapshot_for_backup.7" snapshot.
Ndmpcopy: dcdapst01: Log: DUMP_DATE is '9982889620'
Ndmpcopy: dcdapst01: Notify: dump successful
Ndmpcopy: Transfer successful [ 0 hours, 1 minutes, 7 seconds ]
Ndmpcopy: Done

これらをスクリプトやジョブ管理ソフトウェアで回せるのであれば、SnapMirrorライセンスに頼らずともそこまで時間と手間のかからないボリューム全体バックアップを維持できると思う。

RPO1週間とかでいい環境であれば、このような仕組みを作った方がコスト対効果が出るのではないだろうか。バックアップソフトも要らない。

勿論SnapMirrorはボリュームのSnapshotをSnapshot容量分の転送だけで素早く簡単にコピーできて、いいことづくめ。「ndmpcopy」や「vol copy」もそれなりにCPUやDiskUtil値を高めるし、SnapMirrorには同期モードもあるし。なので適材適所ではある。ただSnapMirrorがないと筐体間のコピーができない、ミラーが組めない、と思い込むのはちょっとした損になるなぁと思う。