ファイルサーバー(NAS)の移行統合で気をつけたこと

2019年8月31日土曜日

今回は単発シリーズで、今自分が担当しているプロジェクト、
社内のファイルサーバーをSynologyNASへ移管する上で気をつけたことをつらつら書いてみます。

なおネットワークに関しては完全に素人なので、専門的なことはサッパリなのでそこをご了承ください。

移行前の構成

ストレージ名容量製品説明
社員共有サーバー8TBWindowsFileServer2012ADセキュリティーグループによる権限設定済み
コンテンツ作業用サーバー18TBBuffaloTeraStation型番は忘れました 権限設定は無い

これらを移行後に、
Synology DS3617xs 96TB?にすべて統合するっていうものです。
管理画面はWebブラウザーからアクセスします。Linuxベースの独自OSです。
気になる方はSynologyのサイトを
https://www.synology.com/ja-jp/dsm

Synologyを持ち上げまくりですが、結構使いやすくてすげーいいっす!


作業で試したこと、気をつけたこと

SynologyNASはActiveDirectoryに参加できるのか

できます!
SynologyNASのActiveDirectory参加方法へのリンク
アクセス権限もActiveDirectoryで作成したセキュリティーグループで設定可能です。


WindowsベースからLinuxベースのファイルサーバーにアクセス権限を移譲できるのか。

できます!いろいろやり方はあると思いますが、ぼくはこれでやりました。

WindowsFileServer2012で、SynologyNASの共有フォルダーをマウントします。
そしてrobocopyでアクセス権限を含めてコピーします。

※SynologyNASはSSHできるので、恐らくトリガーをSynologyNASにすることもできそうですが試していません。
※D&Dではアクセス権限をコピーできません。またクライアントPCからrobocopyをした場合もアクセス権限をコピーできません。
※別解は下記の方法があります。今回のようにフォルダーをマウントできない場合はこちらの方法になると思われます。

なお注意書きを引用しますが、
「Windows サーバーのルートフォルダから継承された ACL 権限設定は移行されません。」
これがあったのでWindowsFileServer側にマウントする方法を取りました。


容量とファイル数が膨大で、通常のファイルコピーより時間がかかる。

細々した画像ファイルがわんさかあるため、コピーにとても時間がかかります。これはどのファイルシステムを採用していても起こりうるので、移行の際は特に気をつけたほうがいいと思います。
対応策として、robocopyによるミラーリングを複数回実施しました。
移行日前に事前コピーを実施します。
さらに移行日に差分コピーを実施すれば、更新のあったもののみ反映するため、最小限のコピー処理で済みます。
対象のファイルサーバーの更新が頻繁だったり、容量が大きい場合は、こまめにrobocopyすれば良いかと!

本番のネットワークに負荷をかけたくない

事前コピーはどうしても日中にもかかってしまうため、本番のネットワークに負荷をかけることになります。
なのでリンクローカルアドレスを使用して、ファイルサーバー同士のローカルネットワークを作成しました。



SynologyNASのLAN1に本番、LAN2にローカルを設定しました。今回は移行元のファイルサーバーが2つあるため、間にハブを噛まします。こんな感じなりました。
これでディスクへの負荷はかかりますが、ネットワークへの負荷は避けられました。
なお先ほどマウントしたフォルダーのパスを、ホスト名で設定してしまうと本番のネットワーク経由でコピーされてしまいます。必ずリンクローカルアドレスで指定してマウントしましょう。


robocopyのfromとtoを逆にしないように!

今回はミラーリングを使用します。
なので空っぽのフォルダーから本番フォルダーへミラーリングすると、ファイルが完全に消えます。
これ失敗したらシャレにならないので、ミラーリングするときは毎回指差し確認しましょう!


ショートカットやマクロに旧ホスト名がガッツリ入っているんですけど・・・?

移行元のファイルサーバーにも当然ホスト名があるわけです。それを新しいファイルサーバーに移すので、当然ホスト名も変わります。
ショートカットくらいならいいんですけど、マクロやAccessが大量にある弊社では書き換えてテスト、なんてやってられないのです。

そこでActiveDirectoryのDNSサーバーに、静的DNSとして登録します。旧ホスト名に対して新ファイルサーバーのIPを登録すると、ユーザーが旧ホスト名でアクセスしたとしても、ちゃんと新サーバーに向いてくれます。

ただしDNSの更新が確実にクライアントPCまで更新されるとは限りません。
そこでGPOのスタートアップスクリプトに、DNSキャッシュをクリアするコマンドを設定します。
ipconfig /flushdns
ただしこれはWindowsの場合、Macの場合はスタートアップスクリプトは実行されないため、手動でコマンドを打たなくてはいけないです


いかがでしたでしょうか?家に帰ってきてから書いているので、まだ気をつけたことあったかと思います。 会社の作業設計書に色々書いたので、漏れがあったら追記しますね!


(追記1)

2つのファイルサーバーを統合するから、LANの帯域が不足するかも・・・

大きなファイルサーバー2つを統合します。
ディスクIOも心配なのですが、2本のLANが1本になるため1Gbpsで対応できるのか非常に不安。
そこでリンクアグリゲーション(LAG)を使用します。細かい技術的背景は省きますが、簡単に言うとNASのLANに2本接続することで、負荷分散をするっていうことができます。
Synologyには全部で4つのモードを使用することができます、詳しくはこちら

さて今回の環境では、LANインフラがすげー貧弱でハブ側がLAGに対応していません。しかしご安心を。負荷分散モードであれば使用できます。いずれにしろ、接続先のハブがLAGに対応しているかどうかをちゃんと調べてからモードを選択しましょう。

なんかループが心配、って素人は思うのですが、どうやらできちゃうらしい。

(追記2)

robocopyがすべてのファイルを常に更新済みとして扱い、差分コピーではなくすべて上書きコピーしてしまう


こーれー(#^ω^)解決するのに2時間は使いました。
結論からすると、X026というバージョンのrobocopyならば差分として扱われなくなります。

条件
TeraStationとSynologyの組み合わせでは起きません。
WindowsなNTFSと別ファイルシステムの間でrobocopyする際には、よく起きる現象らしい。
詳しくはこちらのブログ

まずオプションで回避できないか試してみる。

  • NTFSのタイムスタンプ誤差を埋める「/ttf」:×
  • ファイルの接合ポイントを除外する。/XJF:×
  • フォルダの接合ポイントを除外する。/XJD:×


ハイダメー

ということで結局robocopyのバージョンを下げることに。robocopyのEXEだけ抜き出して別な場所に置いて実行したいので、下記の方法で抜き出しました。

RobocopyのGUI版(んなもんあるんか・・・)をダウンロード
EXEを解凍ソフトで2回解凍、でてきたmsiを下記のコマンドで展開。
msiexec /a setup.msi targetdir="<既存のrobocopyを置いていない適当なフォルダーパス>" /qn
「SystemFolder」の中にrobocopyがあります!

んでそいつにパスを切って実行、引数はそのままで「robocopy」の部分をX026なrobocopyのフルパスにします。
したっけ見事に差分扱いされなくなりました。
はーrobocopyゴミ

ちなみにこのX026というバージョンの確認方法は、プロパティの詳細から見られるのですが、
なにせ古いバージョンのrobocopyで、Windows10のrobocopyのバージョン表記と全然違います。新しいものはx.xxxxxxみたいな表記。
なのでお使いのrobocopyがどのバージョンなのかより、さっさと上記の方法でX026を手に入れることをおすすめいたします。
ただし古いバージョンなので、「DCOPY:DA」などのオプションに対応していないです。どうしても差分扱いされてしまう場合にのみ使ったほうが良いでしょう。
robocopyは「system32」か「sysWOW64」の中にあります。