顧客のサーバーリプレースなどで古いサーバー(=数年前のサーバーでCPU,Disk I/O性能が低い)から新しいサーバーにファイルをコピーします。
− よく有るケース 500万ファイル以上/トータルサイズ2TB以上
ファイルコピーに24時間以上かかることも結構あります。
社内で似た環境を創りだすのが難しく、以下の知見をお持ちでしたら
知恵を貸して頂けると嬉しいです。
- 新、旧 どちらのサーバーでコマンドを動かすと効率がいいのか?
[想像]CPU,I/Oともに性能が低い旧サーバーがボトルネックになると考えられるので、旧サーバーで動かしたほうが良い。
2. rsyncのデーモンモード、compressなど転送効率が上がりそうなオプションは有効か?
3. robocopyに転送効率につながるオプションは有るか?
今の対策としては日付など条件付きで何回かに分けてコピーし、最後に完全同期させています。
顧客の本番環境なので中々思い切った事が出来ませんが、以下も試したいなぁ。試したこと有る方います?社内SEな方なら試したことあるかな。
- 新旧サーバー間 LAN直結(ネットワーク利用率を上げる)
- ジャンボフレームにして(パケットの効率を上げる)
- OS標準外のコマンドでいいのがあれば(Windowsだとfastcopy?)
- tarやzipで固めてファイル数少なくして転送する。(ファイルを固める/展開するオーバーヘッドや余分なファイル領域を考えると非現実的)
- USB-HDDにコピー(かえって遅い?)
気になる質問をクリップする
クリップした質問は、後からいつでもマイページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
下記のような質問は推奨されていません。
- 質問になっていない投稿
- スパムや攻撃的な表現を用いた投稿
適切な質問に修正を依頼しましょう。
回答3件
11
ベストアンサー
何がボトルネックになるのかは環境によりけりで一概に言えません。必ずしもディスクI/Oだけが問題になるわけではなく、CPUやメモリ容量、ネットワーク速度なども要因になります。そのため、どんな場合でもうまくいくという方法は存在しません。基本的には移行のリハーサルを行い、本番での時間を予測し、予定時間を超えるようであれば、手法の変更を試みると言うことの繰り返しになります。
それらを踏まえて、いくつかの指針を書きます。
1. rsyncやrobocopyはシングルスレッドなので、処理するディレクトリをわける。
こんな感じのツリー構成になっていたとしましょう。
sample ├── a │ ├── a0 │ └── a1 ├── b │ └── b0 └── c
実際はa
ディレクトリの中にもより多くのファイルやディレクトリがあるとします。rsyncやデフォルトオプションでのrubocopyはシングルスレッドであるため、これらを一つ一つ辿っていくことになります。つまり、a
を見て、一覧を出して、a0
をコピーして、次にa1
をコピーしてと一つ一つです。しかし、これらの処理は、ディスクIOの処理とリストの比較と言った処理、また、ファイルを転送したり、それに伴って圧縮・展開や暗号化・復号化(設定している場合)等の処理があります。ディスクIOの処理中はCPUはほとんど使いませんし、逆に他の処理中はCPUばかり使ってディスクIOを使いません。つまり、一つ一つのリソースを見ると使ったり、使わなかったりを繰り返し、非常に無駄が多いことになります。そこで、もし、ディスクIOを行っていない処理の間に他のディレクトリやファイルを読みに行っていたらどうでしょうか?そうすれば、リソースを無駄なく限界まで使って、これ以上は無理と言うこと頃まで出来るはずです。
ということで、処理を分散させることで全体の速度を上がる場合があります。例えば、一番上のトップだけを対象にするのではなく、トップ配下のディレクトリそれぞれわけてrsyncやrobocopyを走らせると言うことです。もし、とても大きなディレクトリがあるのであれば、そのサブディレクトリをさらに分けると言うことも必要になるでしょう。ただ、余りに分けすぎると逆に重くなる場合があります。一度に走らせる数を限定する、小さい物は順番に実行する、等の工夫が必要です。
また、最新のWindowsでのrobocopyでは/MTというマルチスレッドオプションがあります。これは上記のような分散処理をrobocopyが自動的に行ってくれるという物です。ただ、旧Windowsのバージョンには不具合があるようですので、Windows 10やWindows Server 2016以外では使用しない方が良いでしょう。
2. ネットワークがネックならデータを圧縮する。
コピー先が遠隔地にあって、回線が細いVPN経由になるといった場合に有効です。ただし、CPUを多く使いますので、遅いマシンでは必ずしも速くなるとは限りません。
3. マシンを分ける。
ファイルサーバー同士の移行であれば、ファイルサーバー上で実行するのではなく、同期用のマシンを別に用意します。1.の分散処理と合わせて、それらマシン一つ一つでそれぞれ別のディレクトリについて同期を行うという手法です。ファイルサーバーはSMBやNFSの処理に専念できるため、ほぼディスクIOに従った速度が出ることになります。ネックはネットワークですが、1Gpbsのそれなりのスイッチで接続していれば、十分なことが多いです。
4. CPUの負荷が高い処理は新しいマシンで行う。
同期のメインはディレクトリ内のエントリーを比較し、どれをコピーをするのかという処理になります。単純な処理ではありますが、ディレクトリ数が多い場合はバカに出来ないほどの高負荷です。ですので、rsyncやrobocopyの本体は新しいマシンで行う方が良いでしょう。ただ、そこそこの速度のマシンをベット用意できるのであれば、3.の選択肢も考慮に入れるべきです。
5. ファイルサーバーの機能が速いとは限らない。
NetAppのDataOnTapですとsnapmirrorというボリューム間をコピーする専用の機能があるのですが、ぶっちゃけ、バージョンが違うと制限があったり、最初の同期に数日かかると出たり、分割して出来なかったり、ダメだったら初めからだったりと、計画的に使わないと使える物ではありませんでした。事実、私は一度、急遽サーバーを5台作ってrsyncでコピーするに切り替えたことがあります。
選択肢の一つとして利用するのはありでも、絶対大丈夫だと思ってはいけません。
6. リトライを繰り返さない。
robocopyでよくあるのはアクセス権やファイル名が壊れたためにコピーできないファイルが存在すると言うことです。間隔をあけて何度かリトライして諦めるのですが、このデファルト値が30秒間隔で100万回です。たいていの場合、翌朝来たら終わっていると思ったら、リトライを繰り返していただけだったと言うがオチです。/R:nと/W:nは必ず変更してください。本番でこれを忘れると確実に間に合いません。
なお、コピーできないデータは利用者と相談し、削除するなり、リネームするなりして、事前に正常なデータにしておきます。
7. ダウンタイム0を目指す。
現在のファイルシステムにもよりますが、リアルタイム同期という機能がある物もあります。うまく使いこなせばダウンタイム0で移行できます。
8. ACLのコピー忘れに注意。
リハーサルで、適当なファイルについてACLを確認しておくことをお勧めします。オプションの指定漏れは洒落になりません。
9. スナップショットまでコピーしてしまう。
ファイルシステムの設定によってはスナップショット領域が見えてしまって、そのままコピーしてしまう場合があります。除外するようにしましょう。
10. 大事なのは全てがコピーされたことをどうやって保証するか。
rsyncやrobocopyがエラー無く終わったというログを残すことが第一です。しかし、rsyncやrobocopyにバグがないという保証はありません。また、よくあるのは、オプションミスでコピー漏れが発生していたと言うことです。
そのため、別の方法で確実にコピーされたことを担保する必要があります。
- ディレクトリやファイル数。
Windowsであれば簡単に確認できます。 - ファイルの合計サイズ
こちらもWindowsであれば簡単に確認できます。ディスク上のサイズは必ずしも一致しないことに注意してください。 - ls -lなどの結果
カレントディレクトリやオプションをうまく調整すればdiffで単純比較できます。ただ、OSのバージョンによって微妙に異なる場合があり、ある程度加工してから比較となる場合もあります。加工する技術が無ければ、Excelに貼り付けて比較している人もいました。 - caclesなどの結果
上と同じです。
とりあえず、これぐらいでしょうか。他にも細かいことがたくさんあったような気がします。
ぶっちゃけ、2TB級のデータ移行となると少なくない工数を見積もり、経験がある人間を配置します。何も知らさない新人に任せるような仕事ではありません。不安であるなら、お金がかかってもインフラ専門のSEを別途用意すべきです。
投稿2018/06/27 16:12
総合スコア21707
2
新旧サーバー間 LAN直結(ネットワーク利用率を上げる)
ジャンボフレームにして(パケットの効率を上げる)
は実運用でやったことがありましたが効果はいまいちでした。小手先で頑張るよりもオフライン(CDブート等)でPartImage等を使ったパーティション単位のバックアップ・リストアが速いし信頼性もあると思います。そういった意味でファイル単位ではなくパーティション単位であれば「USB-HDDにコピー」は意外と良い結果につながると思います。
投稿2018/07/05 05:20
編集2018/07/05 05:22総合スコア6137
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
0
新旧サーバー間 LAN直結(ネットワーク利用率を上げる)
2TB のデータを古いサーバから新しいサーバへrobocopyしたことがあります。
以下で倍以上早くなりました。
・LAN直結
・新しいサーバでrobocopy実施
いろいろと制限があるなかで、できるだけ標準の仕様やコマンドのまま効率を上げることを考えたら、
上記にたどり着いた感じです。
tarやzipなどの圧縮はCPUに負荷がかかり、圧縮、解凍時間を考えたら非効率かなと思います。
投稿2019/06/29 08:43
総合スコア8
下記のような回答は推奨されていません。
- 質問の回答になっていない投稿
- スパムや攻撃的な表現を用いた投稿
このような回答には修正を依頼しましょう。
回答へのコメント
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
関連した質問
意見交換
クローズ
HTMLファイル一つでどこまでできるのか
回答20
クリップ0
更新
2023/05/27
意見交換
受付中
HDD、何故遅いものと速いものがあるのか、そして仮想メモリ、増設すべきかしないか?
回答4
クリップ0
更新
2023/05/24
Q&A
解決済
Rails 6.0.3.1 アンインストール、再インストール
回答2
クリップ0
更新
2020/06/06
Q&A
解決済
Windows10で複数のC++ファイルを一括で自動整形したい
回答2
クリップ0
更新
2023/06/03
Q&A
解決済
配列でNullの状態でも登録できるようにしたい
回答1
クリップ0
更新
2023/05/31
Q&A
受付中
mysqlのエラー
回答1
クリップ0
更新
2023/06/05
意見交換
受付中
Wordpressのphpファイルにデータベースの接続情報を直接記入しても大丈夫なのでしょうか。
回答39
クリップ3
更新
2023/05/25
Q&A
解決済
VS CodeでTypeScript×Express.jsのAPIをWebPackの開発サーバーで実行できるようにしたい。
回答1
クリップ0
更新
2023/06/01
同じタグがついた質問を見る
Linuxは、Unixをベースにして開発されたオペレーティングシステムです。日本では「リナックス」と呼ばれています。 主にWebサーバやDNSサーバ、イントラネットなどのサーバ用OSとして利用されています。 上位500のスーパーコンピュータの90%以上はLinuxを使用しています。 携帯端末用のプラットフォームAndroidは、Linuxカーネル上に構築されています。
Windowsは、マイクロソフト社が開発したオペレーティングシステムです。当初は、MS-DOSに変わるOSとして開発されました。 GUIを採用し、主にインテル系のCPUを搭載したコンピューターで動作します。Windows系OSのシェアは、90%を超えるといわれています。 パソコン用以外に、POSシステムやスマートフォンなどの携帯端末用、サーバ用のOSもあります。
元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。
ファイルI/Oは、コンピューターにおけるファイルの入出力です。これは生成/削除やファイルを読み込んだり、出力をファイルに書き込むようなディレクトリやファイルの運用を含みます。
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
2018/06/27 23:13
2018/06/28 14:15
2018/07/03 00:38
2018/07/03 01:01
2018/07/03 11:55
2018/07/03 23:57 編集
2018/07/04 04:40
2018/07/05 11:30
2018/07/05 23:56
2018/07/06 00:25
2018/07/06 01:14 編集
2018/07/06 01:52
2018/07/06 03:02
2020/05/16 05:34 編集