Microsoft Azure Files にデータを移行する
このポストは、7 月 24 日に投稿した Migrating Data to Microsoft Azure Files の翻訳です。
Microsoft Azure Files について
Microsoft Azure Files はクラウド ベースのストレージ サービスで、SMB2.1 プロトコルを使用したファイル共有をクラウドで提供します。Azure で実行しているアプリケーションでは、ReadFile や WriteFile などの使い慣れた標準ファイル システム API を使用して VM 間でファイルを共有できます。また、REST インターフェイス経由で同時にファイルにアクセスできるため、さまざまなハイブリッドのシナリオで利用可能です。Azure Files は BLOB、Table、Queue の各サービスと同じテクノロジを基盤としているため、プラットフォームが内蔵する可用性、耐久性、拡張性、地理冗長性を利用できます。このサービスは現在プレビュー版です。サービスの詳細については、Files に関する記事を参照してください。
データの移行
Azure Files を使用し始めたら、大量の既存データを Files サービスに移動する必要が出てくることと思います。データを効率的に Azure Files へ移動する方法はたくさんあります。データが保存されている場所に応じて適切な方法を選択します。この記事では、データの移動方法や、それぞれの方法で最良のパフォーマンスを達成する方法について説明します。
1. オンプレミスからインターネット経由で Azure Files へ
ファイルをコピーするには、Microsoft Azure が提供する AzCopy ツールを使用できます。AzCopy は数々の最適化により、コピー ジョブでの優れたスループットを実現します (例: 並列アップロード、マルチスレッド、的確なスロットリング処理など)。
AzCopy コマンドラインの構文
AzCopy <source path> <destination URL> [optional filespec] /S /DestKey:<YourKey>
説明
source path は、移行元のディレクトリのパスです。
destination URL は、コピー先のディレクトリの http URL です。
filespec には、移動するファイルを絞り込むファイル フィルターを指定します (既定は *.*)。
YourKey は、コピー先ストレージ アカウントのストレージ アカウント キーです。
/S は、ソース ディレクトリのすべてのディレクトリおよびサブディレクトリをコピーするためのオプションのスイッチです。
AzCopy にはこの他にもコマンドライン オプションが多数あります。適切なオプションを使用してください。詳細については、AzCopy に関するブログ記事 (英語) を参照してください。
c:\data ディレクトリのファイルを Azure Files にコピーするコマンドの例
AzCopy c:\data https://myaccount.file.core.windows.net/myshare *.*/S /DestKey:myStorageAccountKey
2. IaaS VM の Azure Disk から Azure Files へ
Azure の IaaS VM でファイル サーバー ロールを実行するユーザーにとって、ファイル サーバーを管理する手間から解放してくれる Azure Files サービスはとても魅力的なはずです。
データを IaaS ディスクから Azure Files 共有に移行する手順
- ディスクを VM にアタッチします。
- 共有を VM にマウントします。
- Robocopy コマンドを使用して、データを Azure Files 共有にコピーします。
Robocopy (機械翻訳) は、Windows に搭載されている無償の堅牢なファイル コピー ユーティリティで、大規模なファイルのコピーに適しています。
コマンドラインの構文
Robocopy <source path> <dest path> [optional filespec] /MIR /MT:16
説明
source path は、コピー元のディレクトリのパスです。
dest path は、コピー先のディレクトリのパスです。
filespec には、コピーしたいファイルを絞り込むファイル フィルターを指定します (既定は *.*)。
MT は、使用するスレッド数です (後述の説明を参照)。
Robocopy を使用するときは “/MT” パラメーターを指定してスループットを最大にします。これにより、いくつの並行スレッドでコピーを実行するかを制御し、Storage への IO 要求のキューの深さを制御できます。スレッド数が少ないと、サーバーでのリクエストのキューが足りず、クラウド アーキテクチャ (英語) に備わる並列処理を有効活用できません。スレッド数が多すぎると、サーバー側でスロットリングが発生し、スループットが低下してしまいます。独自のテストを行った結果、キューの深さが 16 ~ 32 だと最大のスループットが得られることがわかっています。
避けるべき手法
xcopy コマンドや Windows Explorer を使用して Azure Files に大規模なファイル コピーを行うのは次善の策です。これらのツールは、NTFS ファイル システムにファイルをコピーする場合は非常に有効ですが、Azure Files にコピーを行うには並列処理が十分ではありません。Azure Files は高度な並行 IO をサポートしており、大量のスレッドで同時にコピーを実行できるので、格段に優れたパフォーマンスが得られます。Robocopy を適切なスレッド数で使用すれば、コピーのスループットが大幅に向上し、短時間でデータを転送できるのです。
3. Azure Blobs から Azure Files へ
データを Azure Blobs から Azure Files へ移動するには AzCopy が最速です。コピー先のストレージ アカウントと同じデータセンターにある VM から AzCopy を実行します。
Azure Blobs から Azure Files にコピーする AzCopy コマンドの例
AzCopy https://myaccount1.blob.core.windows.net/mycontainer Z:\mydirectory *.*/SourceKey:myStorageAccountKey
(Azure Files 共有がドライブ Z にマッピングされているものとします)
データが VM にダウンロードされ、Azure Files にコピーされます。
AzCopy の使用方法の詳細については、前述のセクション 1 の説明を参照してください。コマンドラインの BLOB 用オプションや、SAS などその他の BLOB 専用オプションについては、“AzCopy /?” を実行してご確認ください。
4. Cloud Drive から Azure Files へ
Cloud Drive (英語) はプレビュー版が 2010 年にリリースされました。Azure Cloud Services をご利用のお客様は、ページ BLOB を Azure の Web ロールや Worker ロールにドライブとしてマウントできます。Azure Files のリリースにより、Cloud Drive がサポートしていたシナリオはすべて Azure Files でより効果的に対応できるようになりました。Cloud Drive は 2015 年に非推奨となるため、Cloud Drive を使用しているお客様には、データを Azure Files に移行することをお勧めします。データを移動する方法は、Azure VM から VHD を使用してデータを移動する方法に非常に似ています。
- BLOB を Cloud Drive を使用してディスクとしてマウントします (Web ロールや Worker ロールのセットアップと同時に行うのが一般的です)。
- 共有を VM にマウントします。共有を作成およびマウントする方法については、こちらのブログ記事を参照してください。
- Robocopy を使用してデータをコピーします。Robocopy の使い方と “/MT” パラメーターを使用して最大のスループットを実現する方法については、セクション 3 の説明を参照してください。
以上の方法でデータを Azure Files に効率的に移動し、Files サービスを利用して既存のシナリオを最適化したり、アプリケーションやビジネスの新しいシナリオを実現したりすることが可能になります。