我们在最近的博客文章中介绍了 Azure StorageFiles的预览版,请单击此处。该文章包含
Azure Files 的相关信息,说明了如何申请预览版并开始使用,还介绍了一些有助于创建共享和传输数据的工具。本文章将重点阐述如何才能创建与 Azure File共享的持久连接,以便您的计划任务、应用程序或已登录用户在
VM重新启动后仍可以使用该共享。

Windows IaaS VM

默认情况下,Windows在重新启动过程中会尝试保持到
SMB共享的连接。但是,系统在此过程中不会自动保存 Azure Files凭据,因此,重新启动后系统将无法重新连接到
Azure Files共享。保存这些凭据的方法多种多样,以下详细介绍了其中的几种方法。

保存凭据

CmdKey

要建立持久连接,最简单的方法是使用“CmdKey”命令行实用程序将您的存储帐户凭据保存到
Windows 中。以下是一个把您的存储帐户凭据保存到 VM中的命令行示例:

C:\>cmdkey/add:<yourstorageaccountname>.file.core.chinacloudapi.cn/user:<yourstorageaccountname> /pass:<YourStorageAccountKeyWhichEndsIn==>

Note:yourstorageaccountname is not yourlive id but the name in the endpoint.

借助 CmdKey,您还可以列出系统存储的凭据:

C:\>cmdkey /list

Currently stored credentials:

Target:Domain:target=filedemo.file.core.chinacloudapi.cn

Type:DomainPassword

User:filedemo

保存凭据后,以后在连接到共享时将不再需要提供这些凭据。也就是说,无需指定任何凭据,您就能连接:

C:\>net use * \\filedemo.file.core.chinacloudapi.cn\demo1

Drive Z:is now connected to\\filedemo.file.core.chinacloudapi.cn\demo1.

The command completed successfully.

然后,您可以重新启动 VM(此操作将断开与
VM 的连接):

shutdown –t 0 –r

VM重新启动并重新连接后,您可以打开另一个命令窗口来确认是否已自动重新连接:

C:\>net use

New connections will be remembered.

Status   Local    Remote       Network

-----------------------------------------------------------------------------

OK       Z:       \\filedemo.file.core.chinacloudapi.cn\demo1

Microsoft Windows Network

The command completed successfully.

凭据管理器

您还可以借助凭据管理器(位于“控制面板”\“用户帐户”下)来保存存储帐户凭据。

用户上下文

Windows会为在 VM上运行的每个用户维护不同的上下文,有时同一时间在同一
VM上运行的同一用户的上下文会有所不同。每个上下文均可独立连接到一组不同的 SMB共享,并且每个上下文都有自己的映射到所连接共享的盘符。

由 CmdKey保存的凭据可供运行“CmdKey”的用户使用。同样,由“net
use”记住的连接可供运行 net use的用户使用。因此,如果您的应用程序会在不同的用户名下运行,您可能还希望为其他用户保存凭据和连接。要执行此操作,您可以使用“runas”命令:

runas /user:<username> cmd.exe

此命令将打开一个新的命令窗口。命令窗口的标题将显示为“cmd.exe (running as COMPUTERNAME\username)”。如果在此命令窗口中运行“net
use”,您会看到此用户未连接到任何共享:

C:\>net use

New connections will be remembered.

There are no entries in the list.

您可以针对该用户按上所述运行“CmdKey”和“net
use”,为其保存您的存储凭据以及与 Azure File的连接。

管理员上下文

如果您在 VM上创建了一个新的本地用户,并将此用户添加到了管理员组,您可以在提升和非提升上下文中运行此用户的命令。提升和非提升上下文中的连接并不共享,因此您可能会希望通过执行“net
use”在各自的上下文中单独进行连接。但是,保存的凭据是共享的,因此您仅需在其中一个上下文中运行“CmdKey”即可。

处理计划任务

您可以创建在任何 VM用户下运行的计划任务,并且这些计划任务能够使用该用户通过
CmdKey建立的持久凭据。但是,这些计划任务可能会在此登录用户以外的其他用户上下文中运行,因此与 SMB共享的连接不会在运行该任务的用户上下文中自动重新连接。

例如,如果您创建的计划任务运行调用“net use”的脚本并将输出写入到本地文件,而此用户先前已与
Azure File 共享创建持久连接,还具有该共享的持久凭据,则输出将包含以下内容:

Status     Local    Remote       Network

-----------------------------------------------------------------------------

UnavailableZ:       \\filedemo.file.core.chinacloudapi.cn\demo1

Microsoft Windows Network

The command completed successfully.

但是,该上下文中的凭据可以重新连接到共享。因此,如果向您的脚本添加以下命令,则将重新建立网络连接:

net use z:\\filedemo.file.core.chinacloudapi.cn\demo1

或者,您的脚本可以使用完整的 UNC路径(而不是已映射的盘符)访问文件:

dir \\filedemo.file.core.chinacloudapi.cn\demo1

另外还要注意,由于计划任务不在登录用户所处的环境中运行,因此由该计划任务创建的连接可能不会在此环境中建立。

Windows PaaS角色

PaaS角色的功能与持久连接恰好相反。对于
PaaS角色,无论系统是否启动了全新的实例,还是重新启动了您的实例,都要确保您的代码可以自动进行连接。

对WNetAddConnection2进行平台调用

您可以通过对WNetAddConnection2进行平台调用来映射
PaaS角色启动代码中的盘符。以下代码声明了一组建立从 Azure Files共享到本地盘符的映射所需的结构。

[DllImport("Mpr.dll",

EntryPoint ="WNetAddConnection2",

CallingConvention = CallingConvention.Winapi)]

privatestaticexternint
WNetAddConnection2(NETRESOURCElpNetResource,

string
lpPassword,

string
lpUsername,

System.UInt32 dwFlags);

[DllImport("Mpr.dll",

EntryPoint ="WNetCancelConnection2",

CallingConvention = CallingConvention.Winapi)]

privatestaticexternint
WNetCancelConnection2(string lpName,

System.UInt32 dwFlags,

System.Boolean fForce);

[StructLayout(LayoutKind.Sequential)]

privateclass
NETRESOURCE

{

publicint
dwScope;

public
ResourceType dwType;

publicint
dwDisplayType;

publicint
dwUsage;

publicstring
lpLocalName;

publicstring
lpRemoteName;

publicstring
lpComment;

publicstring
lpProvider;

};

publicenum
ResourceType

{

RESOURCETYPE_DISK = 1,

};

然后,您可以编写一个用于在给定盘符上挂载共享的方法:

publicstaticvoid
MountShare(string shareName,

string
driveLetterAndColon,

string
username,

string
password)

{

if(!String.IsNullOrEmpty(driveLetterAndColon))

{

//确保我们未使用此盘符进行其他映射

WNetCancelConnection2(driveLetterAndColon, 0,true);

}

NETRESOURCE nr =new
NETRESOURCE();

nr.dwType = ResourceType.RESOURCETYPE_DISK;

nr.lpRemoteName = shareName;

nr.lpLocalName = driveLetterAndColon;

int
result =WNetAddConnection2(nr, password, username, 0);

if
(result != 0)

{

thrownew
Exception("WNetAddConnection2failed with error " +result);

}

}

然后,可以从您角色的“OnStart()”方法中调用此方法:

MountShare("\\\\filedemo.file.core.chinacloudapi.cn\\demo1",

"z:",

"filedemo",

"<YourStorageAccountKeyWhichEndsIn==>");

从此时起,一直到 Worker Role,您都能够使用盘符或完整
UNC 路径读取文件并将其写入到 Azure File共享:

File.Create("z:\\WNetAddConnection2.txt");

File.Create(\\\\filedemo.file.core.chinacloudapi.cn\\demo1\\UNC.txt);

Web Role和用户上下文

Azure Web Role的
OnStart()方法不在用于显示网站页面的用户上下文中运行。因此,如果希望从显示页面的代码中引用您的 Azure Files共享,您应该将上述代码放在
Global.Application_Start()方法,而不是WebRole.OneStart()中。

Linux VM

Linux具有多种在启动过程中自动挂载共享的方法,但是我们仅在
Ubuntu 14.04 LTS上对其中一种方法进行试验。

保持与 Fstab的连接

Linux的 /etc中有一个称为“fstab”的文件,该
/etc 在启动过程中可用于挂载驱动器和共享。在启动过程中自动挂载 Azure Files共享的一种方法是,向
/etc/fstab添加一行。应将以下文本放在文件中的一行:

//<yourstorageaccountname>.file.core.chinacloudapi.cn/demo1/home/azureuser/smb cifsvers=2.1,dir_mode=0777,file_mode=0777,username=<yourstorageaccountname>,password=<YourStorageAccountKeyWhichEndsIn==>

下表详细介绍了此行包含的各个部分:

部分

示例

描述

共享 URL

//filedemo.file.core.chinacloudapi.cn/demo1

之前创建的 Azure Files共享的
URL

挂载点

/home/azureuser/smb

您之前创建以挂载共享的 Linux VM上空白目录的路径。

文件系统

Cifs

要挂载的文件系统的类型。对于 Azure Files,其文件系统类型为“cifs”。

挂载参数

vers=2.1

要使用的 SMB版本,在本示例中为
2.1

dir_mode=0777

用于 Azure Files共享目录的权限掩码,在本示例中为完整权限。

file_mode=0777

用于 Azure Files共享文件的权限掩码,在本示例中为完整权限。

username=filedemo

对于 Azure Files,此用户名必须为您的存储帐户名称。

password=StorageAccountKey==

对于 Azure Files,此密码必须为您的完整存储帐户密钥。

您的 fstab文件中还可以包含许多其他选项。有关详细信息,请参阅您正在使用的
Linux版本的相关文档。

总结

我们之前发布的介绍
Azure Files 的文章
和本文章集中介绍了帮助您创建到
Azure File 共享的持久连接的步骤,从而使您可以在重新启动后使用共享连接。我们始终乐于倾听您的反馈,请通过本博客和Azure
Storage MSDN论坛
发表评论或发送电子邮件至mastoragequestions@microsoft.com

Andrew Edwards

有关详细信息,请参阅以下链接:

Azure Files 2014-04-14版本

Microsoft
Azure File服务简介

AzCopy

Storage .NET Client Library 4.3.0

本文翻译自:

http://blogs.msdn.com/b/windowsazurestorage/archive/2014/05/27/persisting-connections-to-microsoft-azure-files.aspx

保持与 Microsoft Azure Files 的连接的更多相关文章

  1. Docker on Microsoft Azure

    Docker蓬勃发展,如日中天.微软自然也不甘落后,且不说即将发布的.支持Docker技术的Windows Nano Server和Windows Server 2016.我们来看看在Microsof ...

  2. 使用VNET-to-VNET连接Microsoft Azure国际版和中国版

    Microsoft Azure的VNET-to-VNET功能可以实现跨虚拟网络的VPN连接,通过VNET-to-VNET互联的两个虚拟网络可以在同一个订阅下或者隶属不同的订阅,而且可以跨数据中心.这实 ...

  3. 如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题

     注:下列步骤并不一定适用所有场景,提供思路,请灵活应用 我们在使用Microsoft Azure 中Windows 虚拟机,有时会发生错误打开防火墙或一些管家软件错误的关闭了"远程桌面 ...

  4. Microsoft Azure Point to Site VPN替代方案

    Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...

  5. Microsoft Azure File 服务简介

    我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...

  6. Microsoft Azure Web Sites应用与实践【4】—— Microsoft Azure网站的“后门”

    Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...

  7. Microsoft Azure Web Sites应用与实践【2】—— 通过本地IIS 远程管理Microsoft Azure Web Site

    Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...

  8. Microsoft Azure 的负载平衡器的Session Sticky

    Microsoft Azure 的负载平衡器是一种 Layer-4负载平衡器.Microsoft Azure 负载平衡器通过针对给定输入端点上接收到的流量计算哈希函数,在一组可用的服务器(虚拟机)之间 ...

  9. 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)

    国际版Microsoft Azure的Preview Portal已经于12月2日正式GA,现在登录国际版的Microsoft Azure,默认就会进入Microsoft Azure New Port ...

随机推荐

  1. bzoj1002:[FJOI2007]轮状病毒

    思路:一道很裸的生成树计数问题,然而要高精度,而且听说直接行列式求值会被卡精度,所以可以模拟行列式求值的过程得到递推公式:f[i]=3*f[i-1]-f[i-2]+2,证明详见vfk博客: http: ...

  2. OpenJudge 2979 陪审团的人选 / Poj 1015 Jury Compromise

    1.链接地址: http://bailian.openjudge.cn/practice/2979 http://poj.org/problem?id=1015 2.题目: 总Time Limit: ...

  3. top每个参数的意义

    上图来源于本人虚拟机,作为每个参数解释的参考 10:32:20:现在的时间 up 1 min : 服务器运行的时长 1 user:现在只有1个用户登录 load average: 0.74, 0.25 ...

  4. 使用jQuery.FileUpload插件和服Backload组件自定义上传文件夹

    在零配置情况下,文件的上传文件夹是根目录下的Files文件夹,如何自定义文件的上传文件夹呢? □ 在web.config中配置 1: <configuration> 2: <conf ...

  5. ado.net中的几个对象

    Connection:用于连接数据源 Command:对数据源执行命令 DataReader:在只读和只写的连接模式下从数据源读取数据. DataAdpter:从数据源读取数据并使用所读取的数据填充数 ...

  6. 动态获取爱奇艺上传视频mp4格式url地址

    有时候,在工作中有些客户需要用到视频,我们大家都知道视频是非常的耗费流量的,因此,如果因为项目要求客户单独买台视频服务器是非常划不来的.那么将视频上传到优酷,爱奇艺等视频网站来托管那是一件很好的解决方 ...

  7. 007.Compiled

    Delphi property Compiled: Boolean read FCompiled; 类型:property 可见性:public 所在单元:System.RegularExpressi ...

  8. GAC write failed when upgrade with InstallShield

    在接近final-build的时候,突然发现当前版本从上一个版本upgrade的时候,需要写到GAC (Global Assembly Cache)的assambly会写失败掉.但是只会在特定的Mic ...

  9. python 数据类型(列表)学习笔记

    列表 创建列表: name_list = ['alex', 'seven', 'eric'] 或 name_list = list(['alex', 'seven', 'eric']) 其实今天学习的 ...

  10. 【gitlab】版本管理工具