Azure FilesやBlobストレージをCentOSからNFSでマウントしてみた

2021-06-20

Azure FilesのサービスでNFSv4によるファイル共有がプレビュー提供されています。

NFS 共有を作成する方法(MS社公式)

今回はAzure FilesのNFS機能有効化からファイル共有の作成、Linux(CentOS)でのNFS共有マウントまで試してみました。

2021年6月22日に、BlobストレージのNFSv3共有がGAしております。追加で設定を試してみました。

Mount Blob storage by using the Network File System (NFS) 3.0 protocol(MS社公式)

※Azure FilesのNFS共有については2021年6月19日時点ではまだプレビューで制限があります。Azure Backupや論理的削除が使えない為個別にバックアップを考慮する必要があります。またインターネットからのアクセスは出来ません。ストレージエクスプローラーも利用できません。

スポンサーリンク

Azure FilesでNFS共有の作成

今回作成したストレージアカウントの構成

今回はこのような感じでストレージアカウントを作成しています。ネットワークはプライベートエンドポイントが推奨されていますのでそのように設定しています。記載の項目以外はデフォルトのままとしています。

      • ストレージアカウント設定(Azure Files)
        • ストレージ アカウント名:nfsfiles01
        • 地域:米国東部2
        • パフォーマンス:Premium
        • Premium アカウントの種類:ファイル共有
        • 冗長性:ローカル冗長ストレージ(LRS)
        • REST API 操作の安全な転送を必須にする:無効
        • ネットワーク:プライベートエンドポイント
        • ファイル共有の論理的な削除を有効にする:無効
      • プライベートエンドポイント設定(ストレージアカウント)
        • 名前:azure-files-private-endpoint-01
        • 場所:米国東部2
        • ストレージのサブリソース:file
        • 仮想ネットワーク、サブネット:適時環境に合わせて設定して下さい(VMからアクセス可能である必要があります。)

※ネットワーク設定に関してはAzureファイルでのNFSファイル共有(セキュリティ)の記述も参照ください。

サブスクリプションでNFSのプレビュー機能を有効化

まず、最初にAzure FilesでNFSを使えるように登録をします。NFS 4.1 プロトコルを登録するを参照に進めます。

NFS有効化設定

今回はPowerShellを利用しています。マイクロソフト社のサンプルをそのまま利用しています。サブスクリプションIDを自身の環境に合わせて設定し実行します。

# Connect your PowerShell session to your Azure account, if you have not already done so.
Connect-AzAccount

# Set the actively selected subscription, if you have not already done so.
$subscriptionId = “サブスクリプションID
$context = Get-AzSubscription -SubscriptionId $subscriptionId
Set-AzContext $context

# Register the NFS 4.1 feature with Azure Files to enable the preview.
Register-AzProviderFeature `
-ProviderNamespace Microsoft.Storage `
-FeatureName AllowNfsFileShares

Register-AzResourceProvider -ProviderNamespace Microsoft.Storage

メッセージが表示されます。RegistrationState : Registeredになっている事を確認します。最大1時間程度かかります。

FeatureName : AllowNfsFileShares
ProviderName : Microsoft.Storage
RegistrationState : Registering

ProviderNamespace : Microsoft.Storage
RegistrationState : Registered
ResourceTypes : {deletedAccounts, locations/deletedAccounts, storageAccounts, operations…}
Locations : {East US, East US 2, West US, West Europe…}
ZoneMappings :

Azure ストレージアカウントを作成

Azure Portalを利用してストレージアカウントを作成します。FileStorage ストレージ アカウントを作成するを参考に進めます。

※公式サイトの記述にもありますが、既存のストレージアカウントでは利用できません。NFS登録後に新規作成したストレージアカウントでのみNFSが利用可能になります。

ストレージアカウント作成

ストレージアカウントの作成を開始します。

ストレージアカウント作成画面で設定を進めます。ストレージアカウント名、地域を設定します。パフォーマンスはPremium、Premiumアカウントの種類はファイル共有、冗長性はローカル冗長ストレージ(LRS)を選択します。

詳細設定画面です。REST APIの操作の安全な転送を必須にするのチェックを外します。

※今回はエラーになる事を確認したかったので意図的にチェックを入れたまま進めてます。

※ネットワークファイル共有v3(NFSv3)を有効にするという項目がありますが、今回の設定とは関連しないので無視でOKです。

ネットワークの設定を進めます。プライベートエンドポイントを選択します。プライベートエンドポイントの追加という項目が表示されるのでクリックします。

プライベートエンドポイントの作成で設定を進めます。場所はストレージアカウントと同じ場所を選択しっます。名前を入力しストレージのサブリソースはfileを選択します。

ネットワークで仮想ネットワークとサブネットを選択します。

※接続するVM(NFSクライアント)と疎通が取れるネットワーク(サブネット)である必要があります。

プライベートエンドポイントが追加されている事が分かります。データ保護の設定に進みます。

データ保護の設定で、ファイル共有の論理的な削除を有効にするのチェックを外します。(必須ではないです。)

確認および作成をクリックします。

※今回はNFS専用にする予定だったので外しています。

確認画面が表示されますので、問題が無ければ作成をクリックします。これでストレージアカウントの作成は完了です。

ファイル共有(NFS)の作成

ストレージアカウントでファイル共有を作成ます。今回は以下の設定内容で進めます。

      • ファイル共有設定内容
        • ファイル共有名:fileshare01
        • プロビジョニング済みの容量:100GB
        • プロトコル:NFS
        • ルートスカッシュ:ルートスカッシュ無し(no_root_squash)

ルートスカッシュ、プロビジョニング済みの容量は後で変更可能です。

※ルートスカッシュはMSのサイトを見ても分かりにくかったりします。NFS領域のファイル権限にかかわる話なのですが。今回はルートスカッシュ無しで実施しています。(ルートスカッシュ有にすると、root権限ユーザーの書き込みはPermission deniedになります。)

ファイル共有設定

ストレージアカウントでファイル共有のメニューを選択します。

+ファイル共有が表示されるのでクリックします。

新しいファイル共有が表示されるので、設定値を選択します。

ファイル共有が作成されている事が分かります。

このストレージアカウントに対してのエラーメッセージが表示されています。

Azure FilesのNFS共有では、安全な転送を必須にするとエラーになる。

公式サイトにも記述がありますが、Azure FilesのNFS共有では安全な転送が有効にすることが出来ません。

安全な転送設定

エラーメッセージを選択すると、安全な転送設定の変更が表示されるのでクリックします。

ストレージアカウントの構成メニューが表示されます。

安全な転送が必須が有効になっているので、無効にし保存をクリックします。

これでエラーが解消されます。

ファイル共有でNFS接続の方法を確認

Azure Filesの設定でAzure VM(CentOS)からNFS接続する為の設定を確認します。

接続許可設定

ストレージアカウントでファイル共有を選択します。

先ほど作成したファイル共有を選択します。

Linuxからの接続方法が表示されます。

今回はLinuxのディストリビューションはRHEL/CentOSを選択します。

マウントパスはデフォルトのままとしています。(任意で変更します。)

Azure VM(CentOS)からAzure FilesのNFS共有をマウントする

Azure VM(CentOS)からNFS共有をマウントする

今回は2台のVM(CentOS)からNFSマウントしてみます。VM1と2でマウントポイントを変えています。

    • VM01
      • サーバ名:NFS-TEST-01
      • ユーザー名:testuser
      • OS:CentOS7.9
      • マウントポイント:/mount/nfsfiles01/fileshare01
    • VM02
      • サーバ名:NFS-TEST-01
      • ユーザー名:testuser
      • OS:CentOS7.9
      • マウントポイント:/mount/nfsfiles02/fileshare02

まずはVM01で先ほど確認したLinuxからの接続手順を利用して進めていきます。一部変更しています。

NFS共有のマウント

yum updateを実行します。-yオプションを追加して確認メッセージをYesでスキップするようにしています。

[testuser@NFS-TEST-01 ]$sudo yum -y update

nfs-utilsをインストールします。

[testuser@NFS-TEST-01 ]$sudo yum -y install nfs-utils

mkdirコマンドでマウントポイントのディレクトリを作成します。(-pオプションで無い階層も一緒に作れます。)

[testuser@NFS-TEST-01 ]$sudo mkdir -p /mount/nfsfiles02/fileshare02

mountコマンドで、先ほど作成したマウントポイントに、ストレージアカウントのNFSファイル共有をマウントします。

[testuser@NFS-TEST-01 ]$sudo mount -t nfs nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 /mount/nfsfiles01/fileshare01 -o vers=4,minorversion=1,sec=sys

【NFS共有(サーバパス)】

ストレージアカウント名.file.core.windows.net:/ストレージアカウント名/ファイル共有名

dfコマンドでマウント状況を確認するとマウントされている事が分かります。

[testuser@NFS-TEST-01 ]$ df -h |grep fileshare02
nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 100G 0 100G 0% /mount/nfsfiles01/fileshare01

マウントしたNFS共有領域にファイルを作成する

ファイルやディレクトリを作成してみます。

    • ディレクトリ構成
      • マウントポイント:/mount/nfsfiles01/fileshare01/
      • 作成したディレクトリ名:nfstest
      • 作成したファイル名:nfstestfile
      • ファイルの記載内容:nfs test
ファイル作成確認

マウントポイントの/mount/nfsfiles01/fileshare01/配下にnfstestというディレクトリを作成します。

その後にnfstestディレクトリ内にnfstestfileというファイルを作成しています。

[testuser@NFS-TEST-01 ]$ cd /mount/nfsfiles01/fileshare01/

[testuser@NFS-TEST-01 fileshare01]$ mkdir nfstest

[testuser@NFS-TEST-01 nfstest]$ cd nfstest

[testuser@NFS-TEST-01 nfstest]$ echo “nfs test" >> nfstestfile

[testuser@NFS-TEST-01 nfstest]$ cat nfstestfile
nfs test

[testuser@NFS-TEST-01 nfstest]$ ls -l
-rw-rw-r–. 1 testuser testuser XX Jun XX XX:XX nfstestfile

別のVMから同じNFS共有領域をマウントして確認する

次にVM2でも同様にマウントしてみます。yum updateは任意で実施します。

NFS共有のマウント

yum updateを実行します。-yオプションを追加して確認メッセージをYesでスキップするようにしています。

[testuser@NFS-TEST-02 ]$sudo yum ーy update

nfs-utilsをインストールします。

[testuser@NFS-TEST-02 ]$sudo yum ーy install nfs-utils

mkdirコマンドでマウントポイントのディレクトリを作成します。(-pオプションで無い階層も一緒に作れます。)

[testuser@NFS-TEST-02 ]$sudo mkdir -p /mount/nfsfiles02/fileshare02

mountコマンドで、先ほど作成したマウントポイントに、ストレージアカウントのNFSファイル共有をマウントします。

[testuser@NFS-TEST-02 ]$sudo mount -t nfs nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 /mount/nfsfiles02/fileshare02 -o vers=4,minorversion=1,sec=sys

dfコマンドでマウント状況を確認するとマウントされている事が分かります。

[testuser@NFS-TEST-02 ]$ df -h |grep fileshare02
nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 100G 0 100G 0% /mount/nfsfiles02/fileshare02

VM01(NFS-TEST-01)で作成したファイルを確認するとVM02(NFS-TEST-02)でも確認出来ました。

また編集してnfs test changeとしてみます。VM01(NFS-TEST-01)で確認すると変更が反映されている事が分かります。

[testuser@NFS-TEST-02 nfstest]$ cd /mount/nfsfiles02/fileshare02/nfstest

[testuser@NFS-TEST-02 nfstest]$ vi nfstestfile
nfs test
→編集してnfs test changeとする。

[testuser@NFS-TEST-01 nfstest]$ cat nfstestfile
nfs test change

/etc/fstab を使用してAuzre FilesのNFS共有をマウント

mountコマンドを利用してマウントした場合、Azure VM(OSを含む)再起動した際に再度マウントが必要になります。再起動後もマウントさせる為にfstabの設定を行います。

    • fstab設定
      • NFS共有サーバー名とディレクトリパス:nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01
      • マウントポイント:/mount/nfsfiles01/fileshare01
      • マウントオプション:今回はsoft、timeo、rwの指定を行っています。(特に指定がない場合はdefaultsでOKです)
fstab設定

fstabに1行追加します。

[testuser@NFS-TEST-01 nfstest]$ sudo vi /etc/fstab
nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 /mount/nfsfiles01/fileshare01 nfs soft,timeo=150,rw 0 0

※特に指定が無い場合はこちらの行を追加
nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 /mount/nfsfiles01/fileshare01 nfs defaults 0 0

VMを再起動後マウント状況を確認するとマウント出来ている事が分かります。

[testuser@NFS-TEST-01 nfstest]$ df -h |grep fileshare01
nfsfiles01.file.core.windows.net:/nfsfiles01/fileshare01 100G 0 100G 0% /mount/nfsfiles01/fileshare01

Azure FilesのNFS共有を使うと、とっても簡単にNFSサーバが構築でき利用できる事が分かりました。

Azure Blobストレージを使ってNFS共有の作成

今回作成したBlobストレージアカウントの構成

今回はこのような感じでストレージアカウントを作成しています。ネットワークはプライベートエンドポイントが推奨されていますのでそのように設定しています。記載の項目以外はデフォルトのままとしています。

      • ストレージアカウント設定(Blobストレージ)
        • ストレージ アカウント名:nfsv3blobteststorage
        • 地域:米国東部2
        • パフォーマンス:Standard
        • 冗長性:ローカル冗長ストレージ(LRS)
        • ネットワーク:プライベートエンドポイント
        • 階層型名前空間を有効にする:有効
        • ネットワーク ファイル共有 v3 を有効にする:有効
        • ファイル共有の論理的な削除を有効にする:無効
      • プライベートエンドポイント設定
        • 名前:nfsv3blobteststorage-endpoint-01
        • 場所:米国東部2
        • ストレージのサブリソース:Blob
        • 仮想ネットワーク、サブネット:適時環境に合わせて設定して下さい(VMからアクセス可能である必要があります。)

※GAはしていますが色々制限事項があります。既知の問題(MS社公式)の記述も参照ください。

ストレージアカウントを作成する

Azure Portalを利用してストレージアカウントを作成します。MS社公式サイトの記述を参考に進めます。

※公式サイトの記述にもありますが、既存のストレージアカウントでは利用できません。NFS登録後に新規作成したストレージアカウントでのみNFSが利用可能になります。

ストレージアカウント作成

ストレージアカウントのメニューで作成を開始します。

ストレージアカウント作成画面で設定を進めます。ストレージアカウント名、地域を設定します。パフォーマンスはStandard、冗長性はローカル冗長ストレージ(LRS)を選択します。

詳細設定画面です。階層型名前空間を有効にするにチェックを入れます。

また、REST API操作の安全な転送を必須にするのチェックも外します。

ネットワークファイル共有v3(NFSv3)を有効にするという項目がありますが、ネットワーク設定が終わらないとチェック入れられないので一旦進めます。

ネットワークの設定を進めます。プライベートエンドポイントを選択します。プライベートエンドポイントの追加という項目が表示されるのでクリックします。

プライベートエンドポイントの作成で設定を進めます。場所はストレージアカウントと同じ場所を選択しっます。名前を入力しストレージのサブリソースはblobを選択します。

ネットワークで仮想ネットワークとサブネットを選択します。

※接続するVM(NFSクライアント)と疎通が取れるネットワーク(サブネット)である必要があります。

プライベートエンドポイントが追加されている事が分かります。前へで詳細設定に戻ります。

ネットワークファイル共有v3を有効にするにチェックを入れられるようになっているので、チェックを入れます。

データ保護にまで進めます。

データ保護の設定で、ファイル共有の論理的な削除を有効にするのチェックを外します。(必須ではないです。)

確認および作成をクリックします。

※今回はNFS専用にする予定だったので外しています。

確認画面が表示されますので、問題が無ければ作成をクリックします。これでストレージアカウントの作成は完了です。

コンテナー(Blobストレージ)の作成

ストレージアカウントでコンテナー(Blobストレージ)を作成します。今回は以下の設定内容で進めます。

      • 設定内容
        • ファイル共有名:fileshare01
        • ルートスカッシュ:ルートスカッシュ無し(no_root_squash)
ファイル共有設定

ストレージアカウントでコンテナーのメニューを選択します。

+コンテナーが表示されるのでクリックします。

ファイル共有が作成されている事が分かります。

このストレージアカウントに対してのエラーメッセージが表示されています。

Azure VM(CentOS)からコンテナー(Blobストレージ)をNFS共有(v3)でマウントする

今回は2台のVM(CentOS)からNFSマウントしてみます。

    • VM03
      • サーバ名:NFS-TEST-03
      • ユーザー名:testuser
      • OS:CentOS7.9
      • マウントポイント:/mount/nfsfiles01/fileshare01

まずはVM01で先ほど確認したLinuxからの接続手順を利用して進めていきます。一部変更しています。

NFS共有のマウント

yum updateを実行します。-yオプションを追加して確認メッセージをYesでスキップするようにしています。

[testuser@NFS-TEST-03 ]$sudo yum -y update

nfs-utilsをインストールします。

[testuser@NFS-TEST-03 ]$sudo yum -y install nfs-utils

mkdirコマンドでマウントポイントのディレクトリを作成します。(-pオプションで無い階層も一緒に作れます。)

[testuser@NFS-TEST-03 ]$sudo mkdir -p /mount/nfsfiles01/fileshare01

mountコマンドで、先ほど作成したマウントポイントに、ストレージアカウントのNFSファイル共有をマウントします。

[testuser@NFS-TEST-03 ]$sudo mount -o sec=sys,vers=3,nolock,proto=tcp nfsv3blobteststorage.blob.core.windows.net:/nfsv3blobteststorage/nfstest01 /mount/nfsfiles01/nfstest01/

【NFS共有(サーバパス)】

ストレージアカウント名.file.core.windows.net:/ストレージアカウント名/ファイル共有名

dfコマンドでマウント状況を確認するとマウントされている事が分かります。

※サイズは5PBになるようです。

[testuser@NFS-TEST-01 ]$ df -h |grep fileshare01
nfsv3blobteststorage.blob.core.windows.net:/nfsv3blobteststorage/nfstest01 5.0P 0 5.0P 0% /mount/nfsfiles01/nfstest01

マウントしたNFS共有領域にファイルを作成する

ファイルやディレクトリを作成してみます。

    • ディレクトリ構成
      • マウントポイント:/mount/nfsfiles01/fileshare01/
      • 作成したディレクトリ名:nfstestdir01
      • 作成したファイル名:nfstestfile
      • ファイルの記載内容:nfs test

※なぜかrootでやらないとうまく行かなかった為、今回はrootで実行しています。

ファイル作成確認

最初にマウントポイントの/mount/nfsfiles01/fileshare01/配下にnfstestdir01というディレクトリを作成します。

その後にnfstestdir01ディレクトリ内にnfstestfileというファイルを作成しています。

[root@NFS-TEST-03 ]$ cd /mount/nfsfiles01/fileshare01/

[root@NFS-TEST-03 fileshare01]$ mkdir nfstestdir01

[root@NFS-TEST-03 nfstest]$ cd nfstestdir01

[root@NFS-TEST-03 nfstest]$ echo “nfs test" >> nfstestfile

[root@NFS-TEST-03 nfstest]$ cat nfstestfile
nfs test

[testuser@NFS-TEST-03 nfstest]$ ls -l
-rw-r–r–. 1 root root XX Jun XX XX:XX nfstestfile

ストレージエクスプローラーでも確認してみます。

実際にファイルが生成されている事が分かります。

Windowsによるファイル共有(SMB)マウントはこちらで試しています。