我正在Bitnami's LAPP stack deployed with Google Cloud Platform's cloud launcher开发一个网络应用程序,其中包括LAPP'意思是Linux(Debian),Apache,PHP,PostgreSQL。
它在Google Compute Engine中的VM实例上运行,其中Web应用程序的数据存储在本地PostgreSQL中。 (我选择了PostgreSQL,因为它可以维护后端视图,但我考虑转向MySQL以利用Google Cloud SQL更容易的备份。)
我正在尝试将make an image的VM实例磁盘用于备份目的(如果我想创建具有不同API权限的新实例)。但是,映像的源磁盘无法连接到VM实例。
如何暂时从VM实例中分离磁盘?
我已经通过SSH关闭了实例并使用sudo poweroff
命令。
答案 0 :(得分:1)
实际上,即使实例已停止,也不支持分离VM实例的引导磁盘:
$ gcloud compute instances describe instance-1 --zone us-central1-f | grep 'status\|device'
deviceName: instance-1
status: TERMINATED
$ gcloud compute instances detach-disk --device-name instance-1 --zone us-central1-f instance-1
ERROR: (gcloud.compute.instances.detach-disk) There was a problem modifying the resource:
- Hot-remove of the root disk is not supported.
我认为你有两种选择。
第一个选项:您可以为磁盘创建snapshot而不是图像。该命令类似于
gcloud compute disks snapshot --zone us-central1-f instance-1 --snapshot-names my-snapshot
与图像不同,创建快照不需要分离源磁盘。它甚至不要求磁盘所连接的VM被终止,它可能仍然在运行,尽管你需要小心这一点,并且这种安全性可能特定于你正在使用的文件系统类型和应用程序。请参阅我上面链接的文档。
获得快照后,可以使用--source-snapshot
gcloud compute disks create
命令创建磁盘。然后使用--image
命令的gcloud compute instances create
标志将磁盘用作新VM的引导磁盘。
第二个选项:如果您的主要目标是使用不同的权限范围集重新创建VM实例,则还可以执行以下操作:
设置删除VM实例时不自动删除磁盘:
gcloud compute instances set-disk-auto-delete --zone us-central1-f --device-name instance-1 --no-auto-delete instance-1
如果您没有安装了Google Cloud Shell的终端,您可能会发现此Google Cloud SDK非常有用。
检查实例是否没有任何带有自动删除功能的磁盘:
$ gcloud compute instances describe --zone us-central1-f instance-1 | grep autoDelete
- autoDelete: false
(该命令不得包含true
字段的autoDelete
个值
删除VM实例。虽然我是一个命令行类型的人,但我在这里使用Cloud Console,只是再次仔细检查在删除之前在实例页面上取消选中“删除实例时删除引导磁盘”框。我想我是偏执狂。
使用与原始版本相同的区域中的gcloud compute instances create
创建新的VM实例,并传递--disk name=instance-1,boot=yes,auto-delete=yes
之类的内容,以指示该工具将现有磁盘用作实例的引导磁盘而不是创建一个新的。
实际上,如果我的目标只是重新创建一个具有不同权限范围集的实例,我将使用第二条路径,但仍会先创建快照,这只是一个安全措施。此外,第二个选项假定您在同一区域中重新创建实例。如果要将新实例转移到其他区域,则第一个选项是可行的方法。另一方面,快照具有差异的良好属性,使其成为定期备份的理想选择。