Linux (SMB) でのAzure Filesの問題のトラブルシューティング

この記事では、Linux クライアントで SMB Azure ファイル共有を使用するときに発生する可能性がある一般的な問題を示します。 また、これらの問題の考えられる原因と解決策も提供します。

AzFileDiagnostics を使用して症状検出を自動化し、Linux クライアントに正しい前提条件があることを確認できます。 これは、最適なパフォーマンスを得るために環境を設定するのに役立ちます。 この情報は、 Azure ファイル共有のトラブルシューティング ツールでも確認できます。

重要

この記事は SMB 共有にのみ適用されます。 NFS 共有の詳細については、「 NFS Azure ファイル共有のトラブルシューティング」を参照してください。

適用対象

ファイル共有の種類 SMB Nfs
標準ファイル共有 (GPv2)、LRS/ZRS
標準ファイル共有 (GPv2)、GRS/GZRS
Premium ファイル共有 (FileStorage)、LRS/ZRS

ファイルのコピー時にタイム スタンプが失われました

Linux/Unix プラットフォームでは、異なるユーザーが cp -p ファイル 1 とファイル 2 を所有している場合、コマンドは失敗します。

原因

COPYFILE の force フラグ f は Unix で実行されます cp -p -f 。 このコマンドは、所有していないファイルのタイム スタンプの保持にも失敗します。

回避策

ストレージ アカウント ユーザーを使用してファイルをコピーします。

  • str_acc_name=[storage account name]
  • sudo useradd $str_acc_name
  • sudo passwd $str_acc_name
  • su $str_acc_name
  • cp -p filename.txt /share

ls: 'path>'< にアクセスできません: 入力/出力エラー

コマンドを使用 ls して Azure ファイル共有内のファイルを一覧表示しようとすると、ファイルを一覧表示するときにコマンドがハングします。 次のエラーが発生します。

ls: アクセスできません'path>'<: 入力/出力エラー

ソリューション

Linux カーネルを、この問題の修正プログラムがある次のバージョンにアップグレードします。

  • 4.4.87+
  • 4.9.48+
  • 4.12.11+
  • 4.13 以上のすべてのバージョン

原因

既定では、SMB を使用して Linux に Azure ファイル共有をマウントしても、シンボリック リンク (symlinks) のサポートは有効になりません。 次のようなエラーが表示される場合があります。

sudo ln -s linked -n t
ln: failed to create symbolic link 't': Operation not supported

ソリューション

Linux SMB クライアントでは、SMB 2 または 3 プロトコル経由での Windows スタイルのシンボリック リンクの作成はサポートされていません。 現在、Linux クライアントは、作成操作とフォロー操作の両方で 、Minshall+French symlinks と呼ばれる別のスタイルのシンボリック リンクをサポートしています。 シンボリック リンクが必要なお客様は、"mfsymlinks" マウント オプションを使用できます。 Mac で使用される形式でもあるため、"mfsymlinks" をお勧めします。

シンボリックリンクを使用するには、SMB マウント コマンドの最後に次のコマンドを追加します。

,mfsymlinks

そのため、コマンドは次のようになります。

sudo mount -t cifs //<storage-account-name>.file.core.windows.net/<share-name> <mount-point> -o vers=<smb-version>,username=<storage-account-name>,password=<storage-account-key>,dir_mode=0777,file_mode=0777,serverino,mfsymlinks

その後、 wiki で提案されているようにシンボリックリンクを作成できます。

末尾にスペースまたはドットがある名前のフォルダーまたはファイルにアクセスできない

Linux にマウントされている間、Azure ファイル共有からフォルダーまたはファイルにアクセスすることはできません。 du や ls やサード パーティ製アプリケーションなどのコマンドは、共有へのアクセス中に "このようなファイルまたはディレクトリなし" エラーで失敗する可能性があります。ただし、Azure portalを使用してこれらのフォルダーにファイルをアップロードできます。

原因

フォルダーまたはファイルは、名前の末尾にある文字を別の文字にエンコードするシステムからアップロードされました。 Macintosh コンピューターからアップロードされたファイルには、0x20 (スペース) または0X2E (ドット) ではなく、"0xF028" または "0xF029" 文字が含まれる場合があります。

ソリューション

Linux で共有をマウントする場合は、共有の mapchars オプションを使用します。

代わりに:

sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino

次のコマンドを使用します:

sudo mount -t cifs $smbPath $mntPath -o vers=3.0,username=$storageAccountName,password=$storageAccountKey,serverino,mapchars

Azure ストレージ アカウントのライブ マイグレーションに関する DNS の問題

マウントされたファイルシステム上のファイル I/O で、"ホストがダウンしています" または "アクセス許可が拒否されました" というエラーが発生します。 クライアント上の Linux dmesg ログには、次のような繰り返しエラーが表示されます。

Status code returned 0xc000006d STATUS_LOGON_FAILURE
cifs_setup_session: 2 callbacks suppressed
CIFS VFS: \\contoso.file.core.windows.net Send error in SessSetup = -13

また、サーバー FQDN が現在接続されている IP アドレスとは異なる IP アドレスに解決されるようになったことも確認できます。

原因

容量の負荷分散のために、ストレージ アカウントは、あるストレージ クラスターから別のストレージ クラスターにライブ マイグレーションされる場合があります。 アカウントの移行では、ターゲット クラスターを指すように DNS マッピングを更新することで、ソース クラスターから宛先クラスターにリダイレクトされるトラフィックをAzure Filesトリガーします。 これにより、そのアカウントからソース クラスターへのすべてのトラフィックがブロックされます。 SMB クライアントが DNS 更新プログラムを受け取り、さらにトラフィックを宛先クラスターにリダイレクトすることが予想されます。 ただし、Linux SMB カーネル クライアントのバグのため、このリダイレクトは有効になりません。 その結果、データ トラフィックはソース クラスターに移動し続け、移行後にこのアカウントの提供が停止します。

回避策

この問題は、クライアント OS を再起動することで軽減できますが、アカウント移行のサポートを使用してクライアント OS を Linux ディストリビューション バージョンにアップグレードしないと、問題が再び発生する可能性があります。 一時的に問題を解決するために、共有の umount と再マウントが表示される場合があることに注意してください。

この問題を回避するには、カーネル DNS リゾルバー キャッシュをクリアします。

  1. 次のコマンドを実行して、カーネル dns_resolver モジュールの状態を表示します。

    grep '.dns_resolver' /proc/keys
    

    次の例のようなコマンド出力が表示されます。

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: 1
    
  2. 次のコマンドを実行して、カーネル DNS リゾルバー キャッシュをクリアします。

    sudo keyctl clear $((16#$(grep '.dns_resolver' /proc/keys | cut -f1 -d\ ) ))
    
  3. カーネル dns_resolver モジュールの状態をもう一度表示します。

    grep '.dns_resolver' /proc/keys
    

    次の例のようなコマンド出力が表示され、キャッシュが空になったことを示します。

    132b6bbf I------     1 perm 1f030000     0     0 keyring   .dns_resolver: empty
    

ソリューション

永続的な修正を行う場合は、アカウント移行のサポートを使用して、クライアント OS を Linux ディストリビューション バージョンにアップグレードします。 Linux SMB カーネル クライアントのいくつかの修正がメインラインの Linux カーネルに送信されました。 カーネル バージョン 5.15 以降と Keyutils-1.6.2 以降には修正プログラムがあります。 一部のディストリビューションでは、これらの修正プログラムがバックポートされており、使用しているディストリビューション バージョンに次の修正が存在する場合にチェックできます。

FIPS が有効になっていると SMB ファイル共有をマウントできない

Linux VM で Federal Information Processing Standard (FIPS) が有効になっている場合、SMB ファイル共有をマウントできません。 クライアントの Linux dmesg ログには、次のようなエラーが表示されます。

kernel: CIFS: VFS: Could not allocate crypto hmac(md5)
kernel: CIFS: VFS: Error -2 during NTLMSSP authentication
kernel: CIFS: VFS: \\contoso.file.core.windows.net Send error in SessSetup = -2
kernel: CIFS: VFS: cifs_mount failed w/return code = -2

重要

FIPS は、米国政府がコンピューター システムのセキュリティと整合性を確保するために使用する一連の標準です。 システムが FIPS モードの場合は、これらの標準で概説されている特定の暗号化要件に準拠します。

原因

SMB ファイル共有のクライアントは NTLMSSP 認証を使用します。これには MD5 ハッシュ アルゴリズムが必要です。 ただし、FIPS モードでは、MD5 アルゴリズムは FIPS に準拠していないため制限されます。 MD5 は、128 ビットハッシュ値を生成する広く使用されているハッシュ関数です。 ただし、MD5 は暗号化のために安全でないと見なされます。

FIPS モードが有効になっているかどうかをチェックする方法

クライアントで FIPS モードが有効かどうかを確認するには、次のコマンドを実行します。 値が 1 に設定されている場合は、FIPS が有効になります。

sudo cat /proc/sys/crypto/fips_enabled

ソリューション

この問題を解決するには、SMB ファイル共有の Kerberos 認証を有効にします。 意図せずに FIPS が有効になっている場合は、 option2 を参照して無効にします。

オプション 1: SMB ファイル共有の Kerberos 認証を有効にする

FIPS が有効になっている Linux VM に SMB ファイル共有をマウントするには、Kerberos/Azure AD 認証を使用します。 詳細については、「Azure Filesにアクセスする Linux クライアントの SMB 経由で Active Directory 認証を有効にする」を参照してください。

オプション 2: FIPS を無効にして Samba 共有をマウントする

  1. で sysctl 値 crypto.fips_enabled を 0 に /etc/sysctl.conf変更します。

  2. ファイル内の /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT変更し、 パラメーターを削除しますfips=1

  3. 次のコマンドを使用して grub2 構成ファイルを再構築します。

    sudo grub2-mkconfig -o /boot/grub2/grub.cfg
    
  4. 次のコマンドを使用して、initramfs イメージをリビルドします。

    sudo dracut -fv
    
  5. VM を再起動します。

詳細については、Linux ディストリビューターの次のドキュメントを参照してください。

お困りの際は、

それでも問題が解決しない場合は、 サポートにお問い合わせください

関連項目

お問い合わせはこちらから

質問がある場合やヘルプが必要な場合は、サポート要求を作成するか、Azure コミュニティ サポートにお問い合わせください。 Azure フィードバック コミュニティに製品フィードバックを送信することもできます。