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共享的 |
挂载点 |
/home/azureuser/smb |
您之前创建以挂载共享的 Linux VM上空白目录的路径。 |
文件系统 |
Cifs |
要挂载的文件系统的类型。对于 Azure Files,其文件系统类型为“cifs”。 |
挂载参数 |
vers=2.1 |
要使用的 SMB版本,在本示例中为 |
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
有关详细信息,请参阅以下链接:
Storage .NET Client Library 4.3.0
本文翻译自:
保持与 Microsoft Azure Files 的连接的更多相关文章
-
Docker on Microsoft Azure
Docker蓬勃发展,如日中天.微软自然也不甘落后,且不说即将发布的.支持Docker技术的Windows Nano Server和Windows Server 2016.我们来看看在Microsof ...
-
使用VNET-to-VNET连接Microsoft Azure国际版和中国版
Microsoft Azure的VNET-to-VNET功能可以实现跨虚拟网络的VPN连接,通过VNET-to-VNET互联的两个虚拟网络可以在同一个订阅下或者隶属不同的订阅,而且可以跨数据中心.这实 ...
-
如何修复在Microsoft Azure中“虚拟机防火墙打开,关闭RDP的连接端口”问题
注:下列步骤并不一定适用所有场景,提供思路,请灵活应用 我们在使用Microsoft Azure 中Windows 虚拟机,有时会发生错误打开防火墙或一些管家软件错误的关闭了"远程桌面 ...
-
Microsoft Azure Point to Site VPN替代方案
Microsoft Azure提供了Point to Site VPN,但有时候这并不能满足我们的需求,例如:Point to Site VPN是SSTP VPN,只能支持Window客户端拨入,而且 ...
-
Microsoft Azure File 服务简介
我们非常高兴地宣布在微软Azure中国区推出 Microsoft Azure File 服务预览版.Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现 ...
-
Microsoft Azure Web Sites应用与实践【4】—— Microsoft Azure网站的“后门”
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
-
Microsoft Azure Web Sites应用与实践【2】—— 通过本地IIS 远程管理Microsoft Azure Web Site
Microsoft Azure Web Sites应用与实践 系列: [1]—— 打造你的第一个Microsoft Azure Website [2]—— 通过本地IIS 远程管理Microsoft ...
-
Microsoft Azure 的负载平衡器的Session Sticky
Microsoft Azure 的负载平衡器是一种 Layer-4负载平衡器.Microsoft Azure 负载平衡器通过针对给定输入端点上接收到的流量计算哈希函数,在一组可用的服务器(虚拟机)之间 ...
-
新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)
国际版Microsoft Azure的Preview Portal已经于12月2日正式GA,现在登录国际版的Microsoft Azure,默认就会进入Microsoft Azure New Port ...
随机推荐
-
WPF 提示框、确认框、确认输入框
1.提示框 分为提示.异常.失败.成功几种类型 方法: /// <summary> /// 弹出提示 /// 标题:提示 /// </summary> /// <para ...
-
C#使用Quartz.NET详细讲解
Quartz.NET是一个开源的作业调度框架,是OpenSymphony 的 Quartz API的.NET移植,它用C#写成,可用于winform和asp.net应用中.它提供了巨大的灵活性而不牺牲 ...
-
Marshal的简单使用
终于从北京回上海了,第一次听unity开发者大会,感觉讲的都是一些Unity 5新功能的介绍,其实主要还是要靠自己去摸索那些新的功能,主要就是添加了新的GUI系统,貌似集成了NGUI到Unity中,取 ...
-
PAT乙级真题1006. 换个格式输出整数 (15)(解题)
原题: 让我们用字母B来表示“百”.字母S表示“十”,用“12...n”来表示个位数字n(<10),换个格式来输出任一个不超过3位的正整数.例如234应该被输出为BBSSS1234,因为它有2个 ...
-
Spring的MVC控制器返回ModelMap时,会跳转到什么页面?
控制器中的方法如下: @RequestMapping("/person/personDisplay") public ModelMap defaultHandler() { Sys ...
-
用Qt开发Web和本地混合的应用
QtWebkit 模块使得Qt widget能够通过HTML的object标签嵌入到web页面中,并通过JavaScript代码进行访问,而Qt对象也能相应的访问web页面元素. 将Qt对象插入到we ...
-
第9章 组合模式(Composite Pattern)
原文 第9章 组合模式(Composite Pattern) 概述: 组合模式有时候又叫做部分-整体模式,它使我们树型结构的问题中,模糊了简单元素和复杂元素的概念,客户程序可以向处理简单元素一样来处理 ...
-
引入servlet概念
Servlet简介 Java Servlet是和平台无关的服务器端组件,它运行在Servlet容器中.Servlet容器负责Servlet和客户的通信以及调用Servlet的方法,Servlet和客户 ...
-
Android反编译 -- 错误代码还原
PS:如果阅读体验不好,可以尝试Github版 (<-点左边) 1. setColor(-16777216) 反编译的代码中会有很多setColor(int)的情况,比如setColor(-16 ...
-
sersync自动化同步部署
目录 0. 前提: 1. 部署rsync server服务 1.1 配置rsync配置文件 1.2 rsync配置文件说明: 1.3 创建密码文件修改权限600 1.4 创建提示文件(可有可无) 1. ...