ボリューム言語切り替えは面倒
NetAppのボリューム言語をja_JP.PCKからutf8mb4に変えたいな、と思うとsnapmirrorでのボリューム以降ではなくて、rsyncやrobocopyなどを使ってコピーする必要がある。
例えば、robocopyでやるなら以下の様なバッチファイルを動かしてコピーする
@echo off
set TIME2=%TIME: =0%
set LOGDATE=%DATE:~0,4%%DATE:~5,2%%DATE:~8,2%-%TIME2:~0,2%%TIME2:~3,2%
robocopy \\netappfs\shares1 \\netappfsnew\shares1 /mir /copyall /R:0 /W:0 /LOG+:D:\LOGS\netappfs-shares1-%LOGDATE%.txt
robocopy \\netappfs\document \\netappfsnew\document /mir /copyall /R:0 /W:0 /LOG+:D:\LOGS\netappfs-document-%LOGDATE%.txt
D:\LOGS に実行ログを吐き出すが、バッチファイルの実行開始時間を元にしたファイル名となるので、ログ確認がしやすい
失敗した切り替え手順
IPアドレスが確保出来なかったということなので、旧NetAppのサービス用IP と 新NetAppの仮接続用IPしかない、ということなので
旧NetAppのネットワークケーブル抜いてから
新NetApp側のIPアドレスを切り替えてAD参加
旧NetApp側のIPアドレスを新NetAppについてた仮接続用IPに切り替え
旧NetAppのネットワークケーブルを接続して、AD参加
ということをやればいいかなーと以下の手順で実施した。
が・・・これだと旧NetAppがnetappfsとして参加していた情報の方が勝つらしく、12の段階で旧サーバがnetappfsだとしてAD上のアクセス情報を持っていこうとしているっぽく、問題が発生した。
このため新NetAppをもう1度Active Directoryに参加させるという対処を行う羽目になった。
- 旧NetAppが ADに netappfs で参加している
- 新NetAppが ADに netappfsnew で参加してデータ移行
新::> vserver cifs create -vserver netappfs -cifs-server netappfsnew - 切り替え日
- 旧NetAppのADをdown
旧::> vserver cifs modify -vserver netappfs -state-admin down - 新NetAppのADをdown
新::> vserver cifs modify -vserver netappfs -state-admin down - 旧NetAppのネットワークケーブルを外す
(旧NetAppのIPアドレスは変更していない) - 新NetAppでIPを引き継ぎ
新::> network interface modify -vserver netappfs -lif ~ -address サービス用IP - 新NetAppをnetappfsとしてAD参加
新::> vserver cifs modify -vserver netappfs -cifs-server netappfs - 新NetAppにクライアントからアクセスできるか確認
問題ないことを確認 - ケーブルを外した状態で旧NetAppのIPを変更
旧::> network interface modify -vserver netappfs -lif ~ -address 別IP1 - 旧NetAppのネットワークケーブルをつなぐ
- 旧NetAppをAD再参加
旧::> vserver cifs modify -vserver netappfs -cifs-server netappfs-old
→ クライアントから新NetApp(netappfs)にアクセスできなくなる
新NetAppで「vserver cifs check」コマンドを実行すると
「down SecD Error: no server available」といったエラーが出ている - 新NetAppのAD登録名を一時的に別のものに参加したあと、正式名で再参加
新::> vserver cifs modify -vserver netappfs -state-admin down
新::> vserver cifs modify -vserver netappfs -cifs-server netappfstmp
新::> vserver cifs modify -vserver netappfs -state-admin down
新::> vserver cifs modify -vserver netappfs -cifs-server netappfs
→ クライアントから新NetApp(netappfs)にアクセスできるようになる
同じではないが、OUがちゃんと変更されていない場合の再変更手順「Organizational Unit (OU) is not updated in ONTAP after Active Directory object move」を見ると「vserver cifs stop -vserver netappfs」で止めたあと、もう1回「vserver cifs modify -vserver netappfs -cifs-server netappfs -ou OU=NewOU」と実行する、という風になっていた
いつもの切り替え手順
いつもは旧NetAppのサービス用IP と 新NetAppの仮接続用IP、旧NetAppの仮接続用IPの3つを用意してもらって切り替えている
1. 旧NetAppが ADに netappfs で参加している
2. 新NetAppが ADに netappfsnew で参加してデータ移行
新::> vserver cifs create -vserver netappfs -cifs-server netappfsnew
3. 切り替え日
4. 旧NetAppのADをdown
旧::> vserver cifs modify -vserver netappfs -state-admin down
5. ケーブルを外した状態で旧NetAppのIPを変更
旧::> network interface modify -vserver netappfs -lif ~ -address 旧NetAppの仮接続用IP
6. 旧NetAppをAD再参加
旧::> vserver cifs modify -vserver netappfs -cifs-server netappfs-old
7. 新NetAppのADをdown
新::> vserver cifs modify -vserver netappfs -state-admin down
8. 新NetAppでIPを引き継ぎ
新::> network interface modify -vserver netappfs -lif ~ -address サービス用IP
9. 新NetAppをnetappfsとしてAD参加
新::> vserver cifs modify -vserver netappfs -cifs-server netappfs
10. 新NetAppにクライアントからアクセスできるか確認
問題ないことを確認
メモ
secd logにログが出ているらしい?
/mroot/etc/log/mlog/secd.log というパス? (Overview of ONTAP Logs)
SVMのマシンアカウントのパスワードを再設定する「vserver cifs domain password reset」を実行することで解消する?
2023/11/23追加
Windowsサーバ→NetAppのrobocopy実行時にいくつか問題がある
(1) audit/監査設定周り
Windowsサーバ上で監査設定をちゃんと使っている場合、NetApp ONTAP側で使える監査機能との差異によって監査設定が期待通りにコピーできずにrobocopyがエラーになる。
具体的には「/copyall」もしくは「/copy:DATSOU」ではエラーとなる
robocopy D:\share\ \\netapp\share\ /COPYALL /MIR /B /EFSRAW /R:1 /W:1 /NP
<略>
古い 3.0 g SW_DVD5_Windows_Svr_DC_EE_SE_Web_2008_R2_64Bit_Japanese_w_SP1_MLF_X17-22600.ISO
2023/11/01 xx:xx:xx エラー 31 (0x0000001F) NTFS セキュリティをコピー先ファイルにコピーしています D:\share\ISO\SW_DVD5_Windows_Svr_DC_EE_SE_Web_2008_R2_64Bit_Japanese_w_SP1_MLF_X17-22600.ISO
システムに接続されたデバイスが機能していません。
<略>
2023/11/01 xx:xx:xx エラー 32 (0x00000020) ファイルをコピーしています F:\COMMON\document\testdocument.docx
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
エラー: 再試行が制限回数を超えました。
<略>
(オマケ:Notepad++でrobocopyのログ確認する時は、「^(.+新しいディレクトリ).+\r\n」「^(.+新しいファイル).+\r」「^(.+更新済み).+\r\n」の3つを「」(置き換え文字列を何も指定しない)に置き換えると問題となっているファイルを探しやすい。英語の場合はNew Dir,Newer,New File,Modified)
How to move files to a NetApp CIFS server using Robocopy to retain Windows ACLs
Does robocopy need to use /copy:datso option if the source has Windows Mandatory Level permission? (対象がcloud volumes ONTAPと書いてあるが、一般のONTAPも対象)
Robocopy unable to set all ACLs on a file (The SACL includes a Mandatory Label which is not supported by ONTAP)
対象方法は「/copy:DATSO」でコピーする、とある
(2) 毎回modifyになるという事象
タイムスタンプまわりの挙動がWindowsサーバとONTAPとで違うらしく、それが差分と認識されることがあるようだ。
ただ、情報の更新だけが行われているようで、ファイルの実体コピーは行われていない模様
robocopyのログで出る「*EXTRA File」は、コピー先にしか存在しないファイル
代表的なrobocopyエラーコードと対処一覧
エラー 2 (0x00000002)→指定したフォルダが存在しない
エラー 5 (0x00000005)→アクセス権がない。robocopyに/Bオプションを付ける
エラー 31 (0x0000001F)→コピー先に元と同じNTFSセキュリティ設定が行えない(OS制約などの可能性)
エラー 32 (0x00000020)→ファイルがアプリケーションからロックされているのでアプリを閉じる
エラー 64 (0x00000040)→指定した共有にアクセスできない
エラー 87 (0x00000057)→指定した共有にアクセスするためのユーザ名/パスワード指定が誤っている
エラー 112(0x00000070)→コピー先容量が足らない
参考:SEの道標 「【robocopy】のログの見方、エラーコード一覧〜不一致、EXTRAS〜」
robocopyのエラーコードはWin32のエラーコードそのままなので上記以外については 「Win32 Error Codes」を参照