Windows上でのフォルダのミラーリング

前回、Win上に3種類のドライブのデータをコピーできました。

メモ: Linux→Winへのデータコピー作業

次はlinuxマシンからSATAボードをWinマシンに移動させてHDDを設置してミラーリングです。

Linux、Windowsとも電源をオフにしたらSATAボードを差し替えます。
これでドライブの物理的な配置は全て運用時と同じになります。
構成は下記の通り。

マザーのSATAポート
  • Cドライブ(OS)のSSD
  • DドライブのHDD1
  • DドライブのHDD2
  • Vドライブ

増設SATAボード
  • V:\mirrorにマウントするドライブ
  • Wドライブ
  • Xドライブ
  • X:\mirrorにマウントするドライブ

SATA-USB2.0のコネクタ経由でUSB接続
  • BD-ROMドライブ

SATA-USB3.0のコネクタ経由でUSB接続
  • W:\mirrorにマウントするドライブ



最後の W:\mirrorにマウントするドライブ をUSB接続にしたのはWドライブへのデータ書き込みがあまり無く、ミラーリングするデータも少ないからです。
なお、マザー側のUSBポートが2.0なので3.0の速度はでません。
にもかかわらず3.0コネクタなのは2.0用コネクタだと3TBのドライブを認識せず、750GBまでになってしまっていたから。
とっても3.0コネクタは数年前にDELLのノートPCサーバに外付するために買って使ってなかったものなので余計な出費はなしです。

接続したら起動します。
起動中に前回同様HDDのデータの存在を確認しておきます。

物理No.Formatデータラベルマウント先
HDD0ext0000main
HDD1NTFS0202mainX
HDD2ext0101main
HDD3NTFS0101mainW
HDD4ext0202main
HDD5NTFS0000mainV

フォーマットがextのものをNTFSにしてmirrorにします。
起動が終わったらドライブをGPTでパーティションを作成してフォーマットします。
前回と同じです。

メモ: Linux→Winへのデータコピー作業

HDD0をフォーマット、00mirrorとします。
mirror用ドライブはドライブレターを設定せずにmain側のフォルダにマウントするのでフォーマットの際にマウントポイントを指定します。
00mirrorはVドライブのmirrorになるのでマウントポイントはv:\mirrorにします。
画面キャプチャを撮り忘れたので画像はナシです。

フォーマットが完了するとマウント完了です。
Vドライブを開いてみるとこんな感じになります。

Vドライブのmirrorにマウント

あとから撮りなおした画像なのでSVNフォルダがなくなってますがmirrorはこんな感じでドライブアイコンの上にショートカットのバッジみたいなのが重なってる状態になります。
サイズもちゃんと3TB分になってます。

状態はこんな感じです。

物理No.Formatデータラベルマウント先
HDD0NTFS00mirrorV:\mirror
HDD1NTFS0202mainX
HDD2ext0101main
HDD3NTFS0101mainW
HDD4ext0202main
HDD5NTFS0000mainV

続いてデータのミラーリングです。
ミラーリングはrsyncのWin版的なrobocopyを使います。

オプションをビロロロンと出してみます。

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                              
-------------------------------------------------------------------------------

  開始: Wed Nov 13 08:53:17 2013

              使用法:: ROBOCOPY コピー元 コピー先 [ファイル [ファイル]...]

                       [オプション]

           コピー元 :: コピー元ディレクトリ (ドライブ:\パスまたは \\サーバー

                       \共有\パス)。
           コピー先 :: コピー先ディレクトリ (ドライブ:\パスまたは \\サーバー

                       \共有\パス)。
           ファイル :: コピーするファイル (名前/ワイルドカード: 既定値は「*.*」

                       です)

::
:: コピー オプション:
::
                 /S :: サブディレクトリをコピーしますが、空のディレクトリはコピ

                       ーしません。
                 /E :: 空のディレクトリを含むサブディレクトリをコピーします。
             /LEV:n :: コピー元ディレクトリ ツリーの上位 n レベルのみをコピーし

                       ます。

                 /Z :: 再起動可能モードでファイルをコピーします。
                 /B :: バックアップ モードでファイルをコピーします。
                /ZB :: 再起動可能モードを使用します。アクセスが拒否された場合、

                       バックアップ モードを使用します。
            /EFSRAW :: 暗号化されたすべてのファイルを EFS RAW モードでコピーし

                       ます。

 /COPY:コピーフラグ :: ファイルにコピーする情報 (既定値は /COPY:DAT)。
                       (コピーフラグ: D= データ、A= 属性、T= タイムスタンプ)。
                       (S= セキュリティ =NTFS ACL、O= 所有者情報、U= 監査情報)。

           /DCOPY:T :: ディレクトリ タイムスタンプをコピーします。

               /SEC :: セキュリティと共にファイルをコピーします (/COPY:DATS と

                       同等)。
           /COPYALL :: ファイル情報をすべてコピーします (/COPY:DATSOU と同等)。
            /NOCOPY :: ファイル情報をコピーしません (/PURGE と共に使用すると便

                       利)

            /SECFIX :: スキップしたファイルも含むすべてのファイルのファイル セ

                       キュリティを修正します。
            /TIMFIX :: スキップしたファイルも含むすべてのファイルのファイル時刻

                      を修正します。

             /PURGE :: 既にコピー元に存在しないコピー先のファイル/ディレクトリ

                      を削除します。
               /MIR :: ディレクトリ ツリーをミラー化します (/E および /PURGE と

                       同等)

               /MOV :: ファイルを移動します (コピー後にコピー元から削除)。
              /MOVE :: ファイルとディレクトリを移動します (コピー後にコピー元か

                       ら削除)。

     /A+:[RASHCNET] :: コピーされたファイルに指定の属性を追加します。
     /A-:[RASHCNET] :: コピーされたファイルから指定の属性を削除します。

            /CREATE :: ディレクトリ ツリーと長さ 0 のファイルのみを作成します。
               /FAT :: 8.3 FAT ファイル名のみを使用してコピー先ファイルを作成し

                       ます。
               /256 :: 256 文字を超える非常に長いパスのサポートをオフにします。

             /MON:n :: コピー元を監視し、n 回を超える変更があった場合に再度実行

                       します。
             /MOT:m :: コピー元を監視し、変更があった場合 m 分間再度実行します。

      /RH:hhmm-hhmm :: 実行時間 - 新しいコピーを開始できる時刻です。
                /PF :: 実行時間をファイルごと (パスごとではない) に確認します。

             /IPG:n :: 低速回線で帯域幅を解放するためのパケット間ギャップ (ミリ

                       秒) 。

                /SL :: 対象ではなくシンボリック リンクをコピーします。

            /MT[:n] :: n 個のスレッドのマルチスレッド コピーを実行します

                       (既定値 8)。
                       n は 1 から 128 までの値である必要があります。
                       このオプションは、/IPG および /EFSRAW オプションと互換性
                       がありません。
                       パフォーマンスの向上のため、/LOG オプションを使用して出力
                       をリダイレクトします。

::
:: ファイル選択オプション:
::
                 /A :: アーカイブ属性が設定されているファイルのみをコピーしま

                       す。
                 /M :: アーカイブ属性のあるファイルのみをコピーし、リセットしま

                       す。
    /IA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルのみを含

                       みます。
    /XA:[RASHCNETO] :: 指定されたいずれかの属性が設定されているファイルを除外し

                       ます。

         /XF ファイル [ファイル]... :: 指定された名前/パス/ワイルドカードに一致

                       するファイルを除外します。
 /XD ディレクトリ [ディレクトリ]... :: 指定された名前/パスに一致するディレクト

                        リを除外します。

                /XC :: 変更されたファイルを除外します。
                /XN :: 新しいファイルを除外します。
                /XO :: 古いファイルを除外します。
                /XX :: コピー先にだけ存在するファイルとディレクトリを除外し

                       ます。
                /XL :: コピー元にだけ存在するファイルとディレクトリを除外し

                       ます。
                /IS :: 同一ファイルを含みます。
                /IT :: 異常なファイルを含めます。

             /MAX:n :: 最大ファイル サイズ - n バイトより大きいファイルを除外し

                       ます。
             /MIN:n :: 最小ファイル サイズ - n バイトより小さいファイルを除外し

                       ます。

          /MAXAGE:n :: 最長ファイル有効期間 - n 日より古いファイルを除外します。
          /MINAGE:n :: 最短ファイル有効期間 - n 日より新しいファイルを除外しま

                       す。
          /MAXLAD:n :: 最大最終アクセス日 - n で指定する値以後に使用していない

                       ファイルを除外します。
          /MINLAD:n :: 最小最終アクセス日 - n で指定する値以後に使用されたファ

                       イルを除外します。
                       (n < 1900 の場合、n = n 日です。それ以外は、n = YYYYMMDD

                       の日付です)。

                /XJ :: 接合ポイントを除外します (通常、既定で含まれます)。

               /FFT :: FAT ファイル時間 (2 秒の粒度) を仮定します。
               /DST :: 1 時間の DST 時間差を補正します。

               /XJD :: ディレクトリの接合ポイントを除外します。
               /XJF :: ファイルの接合ポイントを除外します。

::
:: 再試行オプション:
::
               /R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。
               /W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。

               /REG :: /既定の設定としてレジストリに R:n と /W:n を保存します。

               /TBD :: 共有名が定義されるのを待ちます (再試行エラー 67)。

::
:: ログ オプション:
::
                 /L :: リストのみ - いずれのファイルにも、コピー、タイムスタン

                       プの追加、または削除を実施しません。
                 /X :: 選択されたファイルのみではなく、余分なファイルをすべて報

                       告します。
                 /V :: スキップされたファイルを示す詳細出力を作成します。
                /TS :: 出力にコピー元ファイルのタイム スタンプを含めます。
                /FP :: 出力にファイルの完全なパス名を含めます。
             /BYTES :: サイズをバイトで出力します。

                /NS :: サイズなし - ファイル サイズをログに記録しません。
                /NC :: クラスなし - ファイル クラスをログに記録しません。
               /NFL :: ファイル リストなし - ファイル名をログに記録しません。
               /NDL :: ディレクトリなし - ディレクトリ名をログに記録しません。

                /NP :: 進行状況なし - コピーの完了率を表示しません。
               /ETA :: コピーするファイルの推定完了時刻を表示します。

      /LOG:ファイル :: ログ ファイルに状態を出力します (既存のログを上書きしま

                       す)。
     /LOG+:ファイル :: ログ ファイルに状態を出力します (既存のログ ファイルに

                          追加します)。

   /UNILOG:ファイル :: ログ ファイルに UNICODE で状態を出力します (既存のログを

                       上書きします)。
  /UNILOG+:ファイル :: ログ ファイルに UNICODE で状態を出力します (既存のログに

                       追加します)。

               /TEE :: コンソール ウィンドウとログ ファイルに出力します。

               /NJH :: ジョブ ヘッダーがありません。
               /NJS :: ジョブ概要がありません。

           /UNICODE :: 状態を UNICODE で出力します。

::
:: ジョブ オプション:
::
      /JOB:ジョブ名 :: 名前の付いたジョブ ファイルからパラメーターを取得します。
     /SAVE:ジョブ名 :: 名前の付いたジョブ ファイルにパラメーターを保存します。
              /QUIT :: コマンド ラインの処理後に終了します (パラメーターの表示の

                       ため)。 
              /NOSD :: コピー元ディレクトリを指定しません。
              /NODD :: コピー先ディレクトリを指定しません。
                /IF :: 後続のファイルを含みます。

オプションがいっぱいありますね。
この中で必要そうなものを選ぶとこんな感じです。

  • /MIR :: ディレクトリ ツリーをミラー化します (/E および /PURGE と同等)
  • /R:n :: 失敗したコピーに対する再試行数: 既定値は 1,000,000。
  • /W:n :: 再試行と再試行の間の待機時間: 既定値は、30 秒です。
  • /V :: スキップされたファイルを示す詳細出力を作成します。
  • /DCOPY:T :: ディレクトリ タイムスタンプをコピーします。
  • /TEE :: コンソール ウィンドウとログ ファイルに出力します。
  • /XJD :: ディレクトリの接合ポイントを除外します。
  • /XJF :: ファイルの接合ポイントを除外します。
  • /NP :: 進行状況なし - コピーの完了率を表示しません。
  • /LOG:ファイル :: ログ ファイルに状態を出力します (既存のログを上書きします)。
  • /XD ディレクトリ [ディレクトリ]... :: 指定された名前/パスに一致するディレクトリを除外します。

なんとなくわかると思いますが、XJD,XJFはジャンクションポイントなんかストレージにおかないというのと、NPをOFFにしておかないとログが巨大になってしまうから。
XDはゴミ箱をチェックしないというものです。

では実行してみます。
コマンドにすると↓です。

robocopy "V:\main" "V:\mirror"  /MIR /R:0 /W:0 /V /DCOPY:T /LOG:"%USERPROFILE%\Desktop\v.log" /TEE /XJD /XJF /NP /XD "$RECYCLE.BIN"

時間かかりました。
1.5TBで約 8時間15分です。

ログは中略です。

-------------------------------------------------------------------------------
   ROBOCOPY     ::     Windows の堅牢性の高いファイル コピー                              
-------------------------------------------------------------------------------

  開始: Wed Nov 13 08:58:57 2013

   コピー元 : V:\main\
     コピー先 : V:\mirror\

    ファイル: *.*
     
  オプション: *.* /TEE /S /E /COPY:DAT /DCOPY:T /PURGE /MIR /NP /XJF /XJD /R:0 /W:0 

------------------------------------------------------------------------------


------------------------------------------------------------------------------

                  合計     コピー済み      スキップ       不一致        失敗    Extras
   ディレクトリ:     13422     13421         0              0         0         1
       ファイル:    259023    259020         0              0         3         0
         バイト:   1.316 t   1.316 t         0              0    3.57 m         0
           時刻:   7:13:31   6:40:57                            0:00:00   0:32:34


       速度:            60170012 バイト/秒
       速度:            3442.955 MB/分

       終了: Wed Nov 13 16:12:28 2013

Extrasはゴミ箱のようです。

物理No.Formatデータラベルマウント先
HDD0NTFS0000mirrorV:\mirror
HDD1NTFS0202mainX
HDD2ext0101main
HDD3NTFS0101mainW
HDD4ext0202main
HDD5NTFS0000mainV

無事成功したので次はWドライブです。
フォーマットします。

物理No.Formatデータラベルマウント先
HDD0NTFS0000mirrorV:\mirror
HDD1NTFS0202mainX
HDD2NTFS01mirrorW:\mirror
HDD3NTFS0101mainW
HDD4ext0202main
HDD5NTFS0000mainV

フォーマットしたらデータコピーです。
今回はUSB接続のドライブへのコピーなので超時間かかります。しかも3TB近い。

robocopy "W:\main" "W:\mirror"  /MIR /R:0 /W:0 /V /DCOPY:T /LOG:"%USERPROFILE%\Desktop\w.log" /TEE /XJD /XJF /NP /XD "$RECYCLE.BIN"

待つこと1日半。
合計33時間かかりました。
とんでもない時間です。

物理No.Formatデータラベルマウント先
HDD0NTFS0000mirrorV:\mirror
HDD1NTFS0202mainX
HDD2NTFS0101mirrorW:\mirror
HDD3NTFS0101mainW
HDD4ext0202main
HDD5NTFS0000mainV

最後にXドライブ。
フォーマットします。

物理No.Formatデータラベルマウント先
HDD0NTFS0000mirrorV:\mirror
HDD1NTFS0202mainX
HDD2NTFS0101mirrorW:\mirror
HDD3NTFS0101mainW
HDD4NTFS02mirrorX:\mirror
HDD5NTFS0000mainV

フォーマットしたのでコピー実行

robocopy "X:\main" "X:\mirror"  /MIR /R:0 /W:0 /V /DCOPY:T /LOG:"%USERPROFILE%\Desktop\x.log" /TEE /XJD /XJF /NP /XD "$RECYCLE.BIN"

こちらはSATA接続同士なので早かった。
合計12時間でした。
Wドライブより200GB位少なかったのですがさすがSATA、USB2.0と比較しちゃいけないレベルでした。

物理No.Formatデータラベルマウント先
HDD0NTFS0000mirrorV:\mirror
HDD1NTFS0202mainX
HDD2NTFS0101mirrorW:\mirror
HDD3NTFS0101mainW
HDD4NTFS0202mirrorX:\mirror
HDD5NTFS0000mainV

これで移行完了です。

あとは定期的にミラーリングですが、Winマシンはサーバではないし電気代ももったいないので常時起動にはしません。
ミラーリングスクリプトをDドライブのルートにでも置いておいて手動で実行する程度です。

batファイルを作成しておきます。
メモ帳なんかで下記の内容をぺたっと貼って mirroring.bat とでも名前をつけて保存しましょう。
なお、ログファイルのパスで使っているパスの Desktop はWindows7用です。
XPだとカタカナじゃないといけないとかあった気がしますが使わないので調べもしてません。

@echo off
set /p result="Sync(y/n)?  : %result%"

if not "%result%"=="y" (
 exit
)

set time2=%time: =0%
robocopy "V:\main" "V:\mirror"  /MIR /R:0 /W:0 /V /DCOPY:T /LOG:"%USERPROFILE%\Desktop\v_%date:~-10,4%%date:~-5,2%%date:~-2,2%_%time2:~0,2%%time2:~3,2%.log" /TEE /XJD /XJF /NP /XD "$RECYCLE.BIN"
set time2=%time: =0%
robocopy "W:\main" "W:\mirror"  /MIR /R:0 /W:0 /V /DCOPY:T /LOG:"%USERPROFILE%\Desktop\w_%date:~-10,4%%date:~-5,2%%date:~-2,2%_%time2:~0,2%%time2:~3,2%.log" /TEE /XJD /XJF /NP /XD "$RECYCLE.BIN"
set time2=%time: =0%
robocopy "X:\main" "X:\mirror"  /MIR /R:0 /W:0 /V /DCOPY:T /LOG:"%USERPROFILE%\Desktop\x_%date:~-10,4%%date:~-5,2%%date:~-2,2%_%time2:~0,2%%time2:~3,2%.log" /TEE /XJD /XJF /NP /XD "$RECYCLE.BIN"

これで実行するとドライブごとのログファイルがデスクトップに日時付で出力されます。

おわり。

コメント