在云计算时代,数据存储和管理的方式正在不断演变。云驱动(CloudDrive)是一种创新的解决方案,它允许开发者将Windows应用程序迁移到Azure平台,同时继续使用文件API进行数据的读写操作。本文将指导如何创建一个简单的“Hello World”云驱动应用程序,以及如何创建VHD文件并将其上传到Azure存储。
要开始使用云驱动,首先需要创建一个新的云项目,并添加一个WebRole。这里使用MVC模板,但也可以选择ASP.NET模板。接下来,向页面或视图添加一个按钮,并为其生成事件处理程序。在事件处理程序中,将创建云驱动并加载文件。以下是详细的步骤:
首先,需要设置存储账户,这将是备份驱动的位置。在生产环境中,这应该是WAZ存储账户。
var account = CloudStorageAccount.DevelopmentStorageAccount;
接下来,创建一个Blob客户端,以便可以访问各种Blob服务。
var blobClient = account.CreateCloudBlobClient();
然后,创建一个名为“drives”的容器,VHD文件将存储在这里。
CloudBlobContainer container = new CloudBlobContainer("drives", blobClient);
container.CreateIfNotExist();
由于VHD文件是页面Blob,需要创建一个页面Blob。
CloudPageBlob pageBlob = container.GetPageBlobReference("TestDrive.vhd");
pageBlob.DeleteIfExists();
pageBlob.Create(20 * 1024 * 1024);
在创建新的云驱动之前,需要卸载任何之前已挂载的驱动。
foreach (var drive in CloudDrive.GetMountedDrives())
{
var mountedDrive = account.CreateCloudDrive(drive.Value.PathAndQuery);
mountedDrive.Unmount();
}
现在,可以创建WindowsAzure驱动及其关联的页面Blob。
CloudDrive myDrive = account.CreateCloudDrive(pageBlob.Uri.AbsoluteUri);
myDrive.CreateIfNotExist(25);
接下来,挂载驱动并初始化应用程序,指定Azure驱动上的数据存储路径。
var drivePath = myDrive.Mount(0, DriveMountOptions.None);
使用文件API进行一些I/O操作。让创建一个文件夹并添加一些文件。
Directory.CreateDirectory(Path.Combine(drivePath, "Data").ToString());
var fStream = System.IO.File.Create(Path.Combine(drivePath, "Data", "First.txt").ToString());
fStream.Close();
fStream.Dispose();
System.IO.File.WriteAllText(Path.Combine(drivePath, "Data", "First.txt").ToString(), "First File Data");
var sStream = System.IO.File.Create(Path.Combine(drivePath, "Data", "Second.txt").ToString());
sStream.Close();
sStream.Dispose();
System.IO.File.WriteAllText(Path.Combine(drivePath, "Data", "Second.txt").ToString(), "Second File Data");
现在,将输出到目前为止所做的操作,并将其保存在模型中。
data = new DriveData();
data.LocalDrivePath = myDrive.LocalPath;
使用文件API从驱动读取数据。
string localPath = myDrive.LocalPath;
if (Directory.Exists(localPath))
{
var folder = Directory.GetDirectories(localPath).First();
data.FolderName = folder;
var files = Directory.GetFiles(folder);
data.File1Name = files[0];
data.File1Content = System.IO.File.ReadAllText(files[0]);
data.File2Name = files[1];
data.File2Content = System.IO.File.ReadAllText(files[1]);
}
最后,卸载驱动以节省空间。
myDrive.Unmount();
return View(data);
要查看驱动中的内容,打开存储仿真器并导航到文件 —> 打开Azure驱动 —> 浏览目录。
在本地仿真器中,不能在创建驱动之前挂载驱动。如果想要这样做,需要将文件复制粘贴到存储仿真器的位置。
如果在云中,并且想要在创建页面Blob之前挂载VHD,那么直接调用Mount()方法,并使用页面Blob URI。
可以通过保持驱动的快照来缓存驱动的内容到本地存储,并在角色回收时保持持久性,以节省存储成本并提高操作速度。
使用完驱动后,不要忘记卸载驱动,以节省空间。
现在,已经完成了驱动的使用,可以将仿真器文件夹打包为VHD并上传到页面Blob。这样,就可以在不首先创建VHD的情况下引用VHD,就像在示例中所做的那样。要将VHD上传到页面Blob,可以编写自己的代码,或者使用Cerebrata云存储工作室等GUI工具。
在开始菜单中,键入“磁盘管理”并选择“磁盘管理器”。
选择“操作” —> “创建VHD”,并将VHD保存到一个位置,并给它一个名称和大小(>= 16MB)。
通过右键单击Disk1 —> “初始化” —> “确定”来初始化刚刚创建的VHD。
通过右键单击新分区 —> “新建简单卷” —> “下一步” —> “下一步”(让卷大小保持不变)—> 分配驱动器字母(V)—> 格式化为NTFS(仅)—> “完成”来格式化VHD。
将仿真器位置的“Data”文件夹添加到这个新驱动器。
已经准备好了VHD,但要复制它,需要先将其分离。返回到磁盘管理器,右键单击Disk2图标 —> “分离” —> “确定”(删除VHD复选框应该未选中,显然)。