NFS Azure ファイル共有へ移行する

✔️ 適用対象: Microsoft.Storage リソース プロバイダーで作成されたクラシック NFS ファイル共有

✖️ 適用されません: Microsoft.FileShares リソース プロバイダーで作成された NFS ファイル共有、または Microsoft.Storage リソース プロバイダーで作成された従来の SMB ファイル共有

この記事では、Linux ファイル サーバーから NFS Azure ファイル共有への移行の基本的な側面について説明します。これは SSD (Premium) ファイル共有としてのみ使用できます。 また、オープンソースのファイルコピーツールであるfpsyncとrsyncを比較し、Azureファイル共有へのデータコピー時の性能を理解するのに役立ちます。

Azure Files は NFS のアクセス制御リスト (ACL) をサポートしていません。

[前提条件]

少なくとも1つのNFS Azureファイル共有をLinux仮想マシン(VM)にマウントする必要があります。 作成するには、「Azure クラシック ファイル共有を作成する」を参照してください。 nconnectを使って複数のTCP接続を同時に接続してパフォーマンスを上げます。 詳しくは、「NFS Azure ファイル共有のパフォーマンスを向上させる」をご覧ください。

移行ツール

NFS ファイル共有にデータを転送するには、多くのツールを使用できます。 ただし、オンプレミスのセットアップと比較して、パフォーマンス上の明確な考慮事項のある分散ファイル システムを処理する場合、それらすべてが効率的とはいえません。 分散ファイル システムでは、各ネットワーク呼び出しに、サーバー (ローカルとは限らない) へのラウンド トリップを伴います。 そのため、ネットワーク呼び出しに費やされる時間の最適化は、ネットワークを介した最適なパフォーマンスと効率的なデータ転送を実現するために極めて重要となります。

Azure Storage Mover を使用する

Azure Storage Mover を使用して、NFSv3 および NFSv4 ファイル共有を NFSv4.1 Azure ファイル共有に移行できるようになりました。 Azure Storage Mover は、ダウンタイムを最小限に抑えながら、オンプレミスのファイルとフォルダーを Azure に移行できるフル マネージドの移行サービスです。

fpsync と rsync の使用の比較

rsync はシングル スレッドではあるものの、汎用性の高いオープン ソースのファイル コピー ツールです。 任意のリモート シェルを介して、またはリモートの rsync デーモンとのやり取りで、別のホストとの間のコピーをローカルで行えます。 幅広い選択肢を備え、コピーするファイルのセットを柔軟に指定できます。 一方で、fpsync はマルチスレッド アプリケーションであるため、rsync ジョブを並列で実行できる点を含め、いくつかの優位性があります。

この記事では、fpsyncを使ってLinuxのファイルサーバーからNFS Azureのファイル共有へデータを移動する方法を説明します。

データのコピーに、fpsync では rsync (デフォルト)、cpio、tar の各ツールを使用します。 ソース ディレクトリ src_dir/ のサブセットを計算し、同期ジョブを生成して、それを同期先ディレクトリ dst_dir/ に同期します。 ファイル システムを同時にクロールしながら、同期ジョブをオンザフライで実行することで、大規模なファイル システムの効率的な移行や、複数のファイルを含む大規模なデータセットのコピーを実行するのに便利なツールとなっています。

Fpsync は、ソース ディレクトリ自体ではなく、ディレクトリの中身のみを同期します。 rsync とは異なり、fpsync はソース ディレクトリに末尾のスラッシュ (/) を強制適用します。つまり、同期後にターゲット ディレクトリ内にソース ディレクトリの名前を持つサブディレクトリは取得されていません。

fpart をインストールする

FPsyncを使うには、fpart filesystem partitionerをインストールする必要があります。 お使いの Linux ディストリビューションに fpart をインストールします。 インストール後、 /usr/bin/の下にFPsyncが表示されます。

Ubuntu では、apt パッケージ マネージャーを使用して fpart をインストールします。

sudo apt-get install fpart

同期元から同期先へデータをコピーする

同期先 (ターゲット) である Azure のファイル共有が Linux VM にマウントされていることを確認します。 「前提条件」を参照してください。

完全な移行を行う場合は、次の 3 つのフェーズでデータをコピーします。

  1. ベースライン コピー: 同期先にデータが存在しない場合に、同期元から同期先へのコピーを行います。 ベースライン コピーの場合は、コピー ツールとして fpsync を cpio とともに使用することをお勧めします。
  2. 増分コピー: 同期元から同期先へ、変更のあった増分のみをコピーします。 インクリメンタル同期の場合は、コピーツールとしてfpsyncrsyncを使いましょう。 このコマンドを複数回実行して、すべての変更をキャプチャしてください。
  3. ファイナル パス: 同期元に存在しない同期先のファイルをすべて削除するには、ファイナル パスが必要です。

fpsync を使用してデータをコピーするには、次のように、常にここで挙げたコマンドの何らかのバージョンが必要となります。

fpsync -m <specify copy tool - rsync/cpio/tar> -n <parallel transfers> <absolute source path> <absolute destination path>

ベースライン コピー

ベースライン コピーの場合は、fpsync を cpio とともに使用します。

fpsync -m cpio -n <parallel transfers> <absolute source path> <absolute destination path>

詳細については、「Cpio および Tar のサポート」をご覧ください。

増分コピー

インクリメンタル同期には、デフォルトのコピーツール(fpsync)でrsyncを使いましょう。 このコマンドを何度も実行して、すべての変更をキャプチャしてください。

fpsync -n <parallel transfers> <absolute source path> <absolute destination path>

デフォルトでは、 fpsync は以下の rsync オプションを指定します: -lptgoD -v --numeric-ids-o optionコマンドにfpsyncを追加して、追加のrsyncオプションを指定します。

ファイナル パス

増分同期を複数回実行した後、ファイナル パスを実行して、同期元に存在しない同期先のファイルをすべて削除する必要があります。 この作業は手動で実行する (rsync --delete を使用して /data/dst/ ディレクトリから余分なファイルを削除する) か、fpsync の -E オプションを使用して行うことができます。 詳細については、「ファイナル パス」をご覧ください。

さまざまなデータセットを用いた rsync と fpsync の比較

このセクションではさまざまなデータセットを用いて、rsync と fpsync のパフォーマンスを比較します。

データセットと構成

以下の表は、異なるワークロード下でのコピーツール性能を比較するために使用された異なるデータセットを示しています。

構成番号 コピーの種類 ファイル数 ディレクトリ数 ファイル サイズ 合計サイズ
1.1 ベースライン コピー 100 万 1 0-32 KiB 18ギベット
1.2 増分 (差分変更) 100 万 1 0-32 KiB 18ギベット
2 ベースライン コピー 191,345 3,906 0-32 KiB 3ギベット
3 ベースライン コピー 5,000 1 10 MiB 50ギベット

テストは、8 vCPU、32 GiB のメモリ、および大規模データセット用の 1 TiB を超えるディスク領域を持つ Azure Standard_D8s_v3 VM で実行されました。 ターゲットには、1 TiB を超えるプロビジョニング サイズの Azure NFS ファイル共有を構成しました。

実験と結果: rsync と fpsync の比較

テストによると、fpsyncはrsyncで64スレッド、cpioで16スレッドを使い、nconnect=8でマウントされたAzure NFSファイル共有で最も良い結果を示しています。 実際の結果は構成やデータセットによって異なります。

Azure Files のスループットは、次のグラフで示されている値よりもはるかに高くなる可能性があります。 一部の実験は、単純化するために、意図的に小さなデータセットを使用して行われました。

構成 1

小さなファイルが 100 万個 (合計サイズは 18 GiB) 納められている 1 つのディレクトリに対して、ベースライン コピーと増分コピーの両方でこのテストを実行しました。

以下のグラフは、送信元から送信先までの基準コピーの結果を示しています。

ベースライン コピーの構成 1 のテスト結果を示すグラフ。

以下のグラフは、インクリメンタルコピー(デルタ変化)の結果を示しています。

増分コピーの構成 1 のテスト結果を示すグラフ。

構成 2

以下のグラフは、3,906ディレクトリに分散した191,345の小型ファイルのベースラインコピーの結果を示しています。

ベースライン コピーの構成 2 のテスト結果を示すグラフ。

構成 3

以下のグラフは、合計50 GiBのディレクトリ内で5,000の大容量ファイル(10 MiB)をベースラインコピーした結果を示しています。

ベースライン コピーの構成 3 のテスト結果を示すグラフ。

結果の概要

fpsync のようなマルチスレッド アプリケーションを使用すると、rsync などのシングルスレッド コピー ツールを使用した場合よりも、Azure の NFS ファイル共有に移行するときのスループットと IOPS を向上させることができます。 今回のテストで、次のことが明らかになりました。

  • ディレクトリにデータを分散することは、移行プロセスの並列処理に役立ち、パフォーマンスの向上につながります。
  • サイズが大きいファイルからデータをコピーする方が、サイズが小さいファイルからデータをコピーするよりもパフォーマンスが向上します。

結果を次の表にまとめています。

構成番号 ファイル数 ディレクトリ数 ファイル サイズ 合計サイズ rsync 所要時間 rsync スループット fpsync の時間 fpsync スループット スループットの増加
1.1 (ベースライン) 100 万 1 0-32 KiB 18ギベット 837.06 分 0.33 MiB/秒 228.16 分 1.20 MiB/秒 267%
1.2 (増分) 100 万 1 0-32 KiB 18ギベット 84.02 分 3.25 MiB/秒 7.5 分 36.41 MiB/秒 1,020%
2 (ベースライン) 191,345 3,906 0-32 KiB 3ギベット 191.86 分 0.27 MiB/秒 8.47 分 6.04 MiB/秒 2,164%
3 (ベースライン) 5,000 1 10 MiB 50ギベット 8.12 分 105.04 MiB/秒 2.76 分 308.90 MiB/秒 194%

サード パーティ情報に関する免責事項

この記事で取り上げたオープン ソースのツールは、よく知られているサード パーティのソリューションです。 Microsoftはこれらのツールを直接的にも間接的にも開発、所有、サポートしていません。 第三者のドキュメントに記載されているソフトウェアのライセンスおよびサポートステートメントを確認する責任があります。

次のステップ