假设我的 Azure 角色在 Windows 临时文件夹中创建了大量临时文件,但忘记删除它们。有时它会收到“无法创建临时文件”错误。假设一旦发生这种情况,我的角色代码会从 RoleEntryPoint.Run()
抛出异常,并且角色会重新启动。
我在这里谈论的并不是完美的 Azure 感知代码。我的角色可能会使用第三方黑盒代码,这些代码现在与 Azure 和“本地存储”无关,只会调用 System.IO.Path.GetTempPath() ,从而在某些非 Azure 中创建文件友好的位置。
问题是,如果角色在同一台主机上启动,并且临时文件夹没有被第三方清理,则该文件夹仍然充满文件,并且角色将无法运行。根据this answer可能会发生为我的角色保留本地更改的情况,这在上述场景中是一个大问题。
当角色重新启动时,是否可以保证重置本地更改(例如创建的临时文件)?如何确保启动的角色处于相当干净的状态?
最佳答案
在黄金镜像(基本 guest 操作系统 vhd)中进行新部署、升级和新扩展实例时,该角色会重置。通常,对于重新启动和崩溃,您会获得相同的 VHD 和计算机。
您编写的代码将无权写入操作系统驱动器 (D:) - 如果没有提升(或通过 RDP 登录来执行此操作)。此外,用户的角色根驱动器 (E:) 上有一个配额,可以防止您意外地将文件填满该驱动器。过去,您只能写入包大小的 10%。资源驱动器 (C:) 上也有配额,但配额要大得多,并且取决于 VM 大小。
非本地资源驱动器上不会清除任何内容,但如果您尝试超出配额,最终会收到错误消息。您可以关闭本地资源上的粘性存储,它们将在重新启动时被清理。当然,与对磁盘的其他更改一样,当升级 guest 操作系统(或底层根操作系统)时,这些非本地资源临时文件偶尔会丢失。如果您正在提升运行并确实搞砸了您的安装(您可以这样做),您将需要点击门户上的“重新镜像”按钮,一切都会回到黄金镜像。
关于windows - 是否可以丢弃 Azure 角色主机并在同一主机上启动它而不进行清理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6760325/