Azure NFS ファイル共有に関する問題のトラブルシューティングを行います

この記事では、Azure NFS ファイル共有 (プレビュー) に関連する一般的な問題をいくつか説明します。 これらの問題が発生した場合に考えられる原因と回避策を提示します。 この記事では、パブリック プレビューでの既知の問題についても説明します。

適用対象

ファイル共有の種類 SMB NFS
Standard ファイル共有 (GPv2)、LRS/ZRS いいえ いいえ
Standard ファイル共有 (GPv2)、GRS/GZRS いいえ いいえ
Premium ファイル共有 (FileStorage)、LRS/ZRS いいえ はい

chgrp "filename" が失敗しました: 無効な引数 (22)

原因 1: idmapping が無効になっていない

Azure Files では、英数字の UID/GID は許可されていません。 そのため、idmapping を無効にする必要があります。

原因 2: idmapping は無効になっていたが、無効なファイル名またはディレクトリ名が検出された後に再度有効化された

idmapping が正しく無効になっている場合でも、idmapping を無効にする設定が上書きされる場合があります。 たとえば、Azure Files が無効なファイル名を検出すると、エラーが返されます。 この特定のエラー コードが発生すると、NFS v 4.1 Linux クライアントは idmapping を再度有効にすることを決定し、今後の要求は再び英数字の UID/GID を使用して送信されます。 Azure Files でサポートされていない文字の一覧については、こちらの記事をご覧ください。 コロンは、サポートされていない文字の 1 つです。

回避策

idmapping が無効になっており、再度有効にするものがないことを確認してから、次の手順を実行します。

  • 共有のマウントを解除します
  • echo Y > /sys/module/nfs/parameters/nfs4_disable_idmapping を使用して idmapping を無効にします。

  • 共有を再度マウントします。
  • rsync を実行する場合は、無効なディレクトリ名やファイル名が使用されていないディレクトリから、"—numeric-ids" 引数を指定して rsync を実行します。

NFS 共有を作成できない

原因 1:サブスクリプションが有効になっていない

サブスクリプションが Azure Files の NFS のプレビューに登録されていない可能性があります。 この機能を有効にするには、Cloud Shell またはローカル ターミナルから、さらにいくつかのコマンドレットを実行する必要があります。

注意

登録が完了するまで最長で 30 分ほどお待ちいただく必要がある場合があります。

解決策

次のスクリプトを使用して機能とリソース プロバイダーを登録します。スクリプトを実行する前に <yourSubscriptionIDHere> を置き換えてください。

Connect-AzAccount

#If your identity is associated with more than one subscription, set an active subscription
$context = Get-AzSubscription -SubscriptionId <yourSubscriptionIDHere>
Set-AzContext $context

Register-AzProviderFeature -FeatureName AllowNfsFileShares -ProviderNamespace Microsoft.Storage

Register-AzResourceProvider -ProviderNamespace Microsoft.Storage

原因 2:ストレージ アカウントの設定がサポートされていない

NFS は、次の構成のストレージ アカウントでのみ使用できます。

解決策

次の記事の手順に従ってください。NFS 共有を作成する方法

原因 3:登録が完了する前にストレージ アカウントが作成された

ストレージ アカウントでこの機能を使用するには、サブスクリプションで NFS の登録を完了した後にそれを作成する必要があります。 登録が完了するまで最長で 30 分かかる場合があります。

解決策

登録が完了したら、次の記事の手順に従ってください。NFS 共有を作成する方法

Azure NFS ファイル共有を接続またはマウントできない

原因 1:要求の発信元が信頼できないネットワークまたは信頼できない IP にあるクライアントである

SMB とは異なり、NFS にはユーザーベースの認証がありません。 共有の認証は、ネットワーク セキュリティ規則の構成に基づいています。 このため、NFS 共有に対してセキュリティで保護された接続のみが確立されるようにするには、サービス エンドポイントまたはプライベート エンドポイントのいずれかを使用する必要があります。 プライベート エンドポイントに加えて、オンプレミスからも共有にアクセスするには、VPN または ExpressRoute を設定する必要があります。 ファイアウォール用のストレージ アカウントの許可リストに追加された IP は無視されます。 NFS 共有へのアクセスを設定するには、次のいずれかの方法を使用する必要があります。

  • サービス エンドポイント
    • パブリック エンドポイントによってアクセスされます
    • 同じリージョンでのみ使用できます。
    • VNet ピアリングでは共有へのアクセスが許可されません。
    • 各仮想ネットワークまたはサブネットを許可リストに個別に追加する必要があります。
    • オンプレミスでのアクセスの場合、サービス エンドポイントを ExpressRoute、ポイント対サイト、サイト間 VPN と共に使用できますが、より安全なプライベート エンドポイントの使用をお勧めします。

次の図は、パブリック エンドポイントを使用した接続を示しています。

パブリック エンドポイント接続の図。

  • プライベート エンドポイント
    • アクセスは、サービス エンドポイントよりも安全です。
    • NFS 共有へのプライベート リンク経由のアクセスは、ストレージ アカウントの Azure リージョンの内部および外部 (リージョン間、オンプレミス) から使用できます
    • プライベート エンドポイントでホストされている仮想ネットワークを使用した仮想ネットワーク ピアリングでは、ピアリングされた仮想ネットワーク内のクライアントに NFS 共有へのアクセスが許可されます。
    • プライベート エンドポイントは、ExpressRoute、ポイント対サイト、サイト間 VPN と共に使用できます。

プライベート エンドポイント接続の図。

原因 2:[安全な転送が必須] が有効になっている

NFS 共有では、二重暗号化がまだサポートされていません。 Azure では、Azure データセンター間で転送中のすべてのデータに対して、MACSec を使用した暗号化レイヤーが提供されます。 NFS 共有には、信頼された仮想ネットワークから、および VPN トンネル経由でのみアクセスできます。 NFS 共有で使用できる追加のトランスポート層暗号化はありません。

解決策

ストレージ アカウントの構成ブレードで [安全な転送が必須] を無効にします。

[安全な転送が必須] を無効にしている、ストレージ アカウントの構成ブレードのスクリーンショット。

原因 3: nfs-common パッケージがインストールされていない

マウント コマンドを実行する前に、以下に示すディストリビューション固有のコマンドを実行して、このパッケージをインストールします。

NFS パッケージがインストールされているかどうかを確認するには、rpm qa | grep nfs-utils を実行します

解決策

パッケージがインストールされていない場合は、ご使用のディストリビューションにパッケージをインストールします。

Ubuntu または Debian
sudo apt update
sudo apt install nfs-common
Fedora、Red Hat Enterprise Linux 8+、CentOS 8+

dnf パッケージ マネージャーを使用します (sudo dnf install nfs-utils)。

以前のバージョンの Red Hat Enterprise Linux と CentOS では、yum パッケージ マネージャーを使用します (sudo yum install nfs-common)。

openSUSE

zypper パッケージ マネージャーを使用します (sudo zypper install-nfscommon)。

原因 4:ファイアウォールによってポート 2049 がブロックされている

NFS プロトコルは、ポート 2049 経由でそのサーバーと通信します。このポートがストレージ アカウント (NFS サーバー) に対して開いていることを確認します。

解決策

次のコマンドを実行して、ポート 2049 がご使用のクライアントで開いていることを確認します: telnet <storageaccountnamehere>.file.core.windows.net 2049。 ポートが開いていない場合は開きます。

ls (list files) コマンドの結果が正しくない、または一貫性がない

原因:ファイル ハンドルが開いているときのキャッシュ値とサーバー ファイル メタデータ値の間に不整合がある

"list files" コマンドや "df" コマンド、"find" コマンドにより、想定どおりにゼロではないサイズが表示され、そのすぐ後に実行した list files コマンドでは、代わりにサイズ 0 または古いタイム スタンプが表示される場合があります。 これは、ファイルが開いている間、ファイル メタデータ値のキャッシュに一貫性がないために発生する既知の問題です。 これを解決するには、次の回避策のいずれかを使用できます。

対処法 1:ファイル サイズをフェッチする場合は、ls -l ではなく wc -c を使用する

wc -c を使用すると、常にサーバーから最新の値がフェッチされ、不整合が発生することはありません。

対処法 2:"noac" マウント フラグを使用する

mount コマンドで "noac" フラグを使用して、ファイル システムを再マウントします。 これにより、常にサーバーからすべてのメタデータ値がフェッチされます。 この回避策を使用すると、すべてのメタデータ操作に関するわずかなパフォーマンス オーバーヘッドが発生する可能性があります。

論理的に削除された状態から復元された NFS 共有をマウントできない

プレビュー期間中、プラットフォームで完全にサポートされていないにもかかわらず NFS 共有が論理的に削除されるという既知の問題があります。 これらの共有は、有効期限が切れると定期的に削除されます。 "共有の削除を取り消して、論理的な削除を無効にして、共有を削除する" フローによって早期に削除することもできます。 ただし、共有の復旧と使用を試みると、アクセスが拒否されるか、アクセス許可が拒否されるか、クライアントで NFS I/O エラーが発生します。

ls –la が I/O エラーをスローする

原因: 新しい Linux カーネルで修正された既知のバグ

以前のカーネルでは、NFS4ERR_NOT_SAME が原因でクライアントが (ディレクトリの再起動ではなく) 列挙を停止します。 新しいカーネルはすぐにブロック解除されますが、残念ながら、SUSE のようなディストリビューションの場合、SUSE Enterprise Linux Server 12 や 15 には、この修正プログラムに対してカーネルを最新の状態にするパッチは存在しません。 このパッチは、カーネル 5.12 以上で使用できます。 クライアント側の修正プログラムのパッチについては、「PATCH v3 15/17 NFS: readdir 呼び出しからの NFS4ERR_NOT_SAME および NFSERR_BADCOOKIE の処理」に説明されています。

回避策: ストレージ アカウントをホストしているリージョンに修正プログラムが到達する間は、最新のカーネル回避策を使用する

このパッチは、カーネル 5.12 以上で使用できます。

一部のカーネルで、大きなディレクトリ列挙に対して ls がハングする

原因: Linux kernel v5.11 でバグが確認され、v5.12.5 で修正されました。

一部のカーネル バージョンには、ディレクトリの一覧が無限の READDIR シーケンスを引き起こすバグがあります。 すべてのエントリを 1 回の呼び出しで呼び出すことができる非常に小さなディレクトリには、この問題はありません。 このバグは、Linux kernel v5.11 で確認され、v5.12.5 で修正されました。 したがって、その間のバージョンにはこのバグが存在します。 RHEL 8.4 には、このカーネル バージョンが含まれることが知られています。

回避策: カーネルのダウングレードまたはアップグレード

影響を受けるカーネル以外のカーネルにダウングレードまたはアップグレードすると、この問題は解決します。

df と find コマンドで、書き込みの発生場所以外のクライアントで一貫性のない結果が表示される

これは既知の問題です。 Microsoft では、この問題の解決に積極的に取り組んでいます。

排他 OPEN を使用すると、"Underlying file changed by an external force" というエラーでアプリケーションが失敗する

これは既知の問題です。 Microsoft では、この問題の解決に積極的に取り組んでいます。

お困りの際は、 サポートにお問い合せください。

まだ支援が必要な場合は、問題を迅速に解決するために、サポートにお問い合わせください。