Mana Blog Next

自宅IoT、仕事と家庭のチャレンジ

Raspberry Pi Zero からAzure Filesにアクセスする方法

ググってもあまり情報が出てこないのでエントリーを書いてみました。誰得なのか分からない情報ですが、もしお役に立てたら幸いです。

事象

Raspberry Pi Zero W (Raspbian Stretch) からAzure Files のファイル共有をマウントしようとするとできない。 vers=2.1 にSMBバージョンを落としてみても繋がりませんでした。

$ sudo mount -t cifs //pistorage.file.core.windows.net/pifile /mnt/azure -o vers=3.0,username=pistorage,password=key,dir_mode=0777,file_mode=0777,sec=ntlmssp
mount error(11): Resource temporarily unavailable
Refer to the mount.cifs(8) manual page (e.g. man mount.cifs)

原因

dmesgで情報を見てみると・・・まあなんということでしょう。SMB3 encryption not supported yet と出てます。

$ dmesg
[30739.337990] CIFS VFS: SMB3 encryption not supported yet
[31260.358217] Status code returned 0xc0000022 STATUS_ACCESS_DENIED
[31260.358354] CIFS VFS: Send error in SessSetup = -13
[31260.358845] CIFS VFS: cifs_mount failed w/return code = -13

トラブルシューティングのページを調べてみると、Linuxの場合、SMB 3.0の暗号化機能は、Kerrnel 4.11で導入されたようです。この機能を使用すると、オンプレミスまたは他のAzureリージョンからもAzureファイル共有をマウントできるようになります。

Troubleshoot Azure Files problems in Linux | Microsoft Docs

  • Linuxからファイル共有をマウントするには、クライアントをファイル共有と同じAzureのリージョンに建てる
  • Kerrnel 4.11 以上をサポートしているLinuxからアクセスする

Raspbian Stretch の場合

調べたら、Raspbian Stretch では SMB3 encryption はまだサポートしてないんですよね。残念ながら・・・

$ uname -a
Linux raspberrypi 4.9.59+ #1047 Sun Oct 29 11:47:10 GMT 2017 armv6l GNU/Linux

トラブルシューティングの観点から 公式では非推奨とされているrpi-update をやむを得ず実施。Kerrnelバージョンを最新にしてみたのですが、それでも4.9.73なので対応バージョンには届かず。

$ sudo rpi-update
$ sudo reboot
$ uname -a
Linux raspberrypi 4.9.73+ #1072 Sun Dec 31 19:28:20 GMT 2017 armv6l GNU/Linux

Fedora 27 の場合

Fedora27 からは余裕でマウントできました。Kerrnelのバージョンは4.14.6 ですので、SMB3 encryption がサポートされています。

4.14.6-300.fc27.x86_64

Windows 10 の場合

Windows 10 はSMB 3.0にバッチリ対応しているのでPCからアクセスしても問題無くマウントできます。

以下をPowerShellで実行し、Azure Filesの共有フォルダをマウントしています。

PS C:\Users\taira> $acctKey = ConvertTo-SecureString -String "key" -AsPlainText -Force
PS C:\Users\taira> $credential = New-Object System.Management.Automation.PSCredential -ArgumentList "Azure\pistorage", $
acctKey
PS C:\Users\taira> New-PSDrive -Name X -PSProvider FileSystem -Root "\\pistorage.file.core.windows.net\pifile" -Credenti
al $credential -Persist

Name           Used (GB)     Free (GB) Provider      Root                                               CurrentLocation
----           ---------     --------- --------      ----                                               ---------------
X                   0.00         10.00 FileSystem    \\pistorage.file.core.windows.ne...

Azure Fileサービスの共有フォルダをエクスプローラーで開いたところ。

f:id:mana-cat:20180103011614p:plain

他のWindows バージョン

Windows 7 はSMB 3.0に対応していないです。その他の情報については公式ドキュメントを参照すると詳しく記載されています。

docs.microsoft.com

回避策

考えられる回避策

考えられる回避策としては以下の通り。

  • SMB3 encryptionに対応しているLinuxマシンからアクセスする
  • Azure CLI 2.0 からAzure Storageにファイルをアップロードする
  • Azure Storage Explorer からアクセスする
  • REST APIを使う
  • smbclient コマンドから操作する
  • 自力でKernelバージョンを上げる(万人向けの選択肢としては無し)
    Kernel - Raspberry Pi Documentation
  • 諦める(Kerrnelアップデートされるのを待つ)

smbclient で、もういいんじゃないのかと思いました。
Azure CLI 2.0 をインストールしてもいいのですが、ラズパイZeroにAzure CLI 2.0 をインストールするのに1時間前後かかるので、現実的じゃないと思いました(便利ですけどね)。

しかしながら、必要に応じて設定したい人も居ると思いますので、別エントリーに記事を書きましたので参考にして下さい。

smbclient コマンドの接続方法

Raspberry Pi のコマンドラインからは、Azure CLI 2.0 または smbclient を使ってアクセスすると問題無く繋がりますので、こちらを使います。 ちなみに smbclient の繋ぎ方は以下の通り。
--user=pistorage%password のように、%の後にpassword(Key)を入力します。 --userにはストレージ アカウント名を指定します。

$ sudo smbclient //pistorage.file.core.windows.net/pifile --user=pistorage%password  -mSMB3
WARNING: The "syslog" option is deprecated
Domain=[X] OS=[] Server=[]
smb: \> ls
  .                                   D        0  Tue Jan  2 21:24:34 2018
  ..                                  D        0  Tue Jan  2 21:24:34 2018
  2017-09-07-162135_1824x984_scrot.png      A  2034061  Tue Jan  2 23:53:35 2018
  20170503011149.jpg                  A   356965  Tue Jan  2 23:36:46 2018

                163840 blocks of size 65536. 163803 blocks available
smb: \> lcd img
smb: \> !ls
2017-09-07-162135_1824x984_scrot.png  2017-10-15-234940_1824x984_scrot.png
2017-09-07-162337_1824x984_scrot.png  2017-10-15-235031_1824x984_scrot.png

コマンドの使い方はhelpを実行すれば表示されます。

smb: \> help

念のためファイルを送信する方法を記載します。

smb: \> put 2017-09-07-162135_1824x984_scrot.png
putting file 2017-09-07-162135_1824x984_scrot.png as \2017-09-07-162135_1824x984_scrot.png (1900.8 kb/s) (average 1900.8 kb/s)

まとめ

  • Kerrnelのアップデートでいずれ対応されるのを待ちます
  • ラズパイで撮影した写真をSMB(CIFS)でAzure Filesへ接続し、データを溜め込んで、Azure上のサーバー側で画像合成や解析などに使うと楽しそう
  • Azure CLI 2.0 をラズパイZeroにインストールするのが思った以上に時間が掛かる(1時間)なので、より簡単な方法を考えていこうと思った

© Manami Taira