我想知道如何将持久性磁盘(Google Compute Engine)从一个项目迁移到另一个项目?如果它是可行的。
答案 0 :(得分:18)
如果要复制(非root)永久磁盘,请执行以下步骤:
<disk-name>
磁盘。gcloud
命令行实用程序切换到旧项目:
gcloud config set project <old-project>
<disk-name>
磁盘的图片:
gcloud compute images create <image-name> --source-disk=<disk-name> --source-disk-zone=<zone>
https://www.googleapis.com/compute/v1/projects/<project-name>/global/images/<image-name>
)。或者,运行:
gcloud compute images list --no-standard-images --uri | grep <image-name>
找到链接。gcloud config set project <new-project>
gcloud compute disks create <new-disk-name> --image=<link-to-the-image> --zone=<zone>
答案 1 :(得分:11)
如上所述Mike Lutz的答案,除了 gcutil
现已弃用,但第二个命令也可以gcloud compute instance
完成:
1)从你的PD创建你的图像(注意!先读!https://cloud.google.com/compute/docs/images#creating_an_image_from_a_root_persistent_disk)
$ gcloud compute images create [example-image] --source-disk [example-disk] --source-disk-zone ZONE --project="old-project-name"
2)在新项目中实例化图像(不言而喻,但您必须有权访问这两个项目)
$ gcloud compute instances create [example-instance-1] --project=[new-project-name] --image="https://www.googleapis.com/compute/v1/projects/[old-project-name]/global/images/[image-name]" --boot-disk-size [XXXGB] --machine-type=[machine-type] --network="default" --zone=[datacenter-zone]
有关其他实例配置选项,请参阅:https://cloud.google.com/sdk/gcloud/reference/compute/instances/create
答案 2 :(得分:2)
在GCE上没有简单的方法可以做到这一点,唯一的方法是完成创建自定义映像的过程,将其导出到云存储桶(两个项目都有权限),然后创建一个新的实例在新项目中使用新的自定义图像。
请按照以下说明操作:https://developers.google.com/compute/docs/images#installinganimage
答案 3 :(得分:2)
如果你可以用它创建一个图像。然后你可以做这样的事情,它会将图像复制到你新项目的磁盘中:
{gcloud compute instances create my-instance-1 --project = [new-project-id] --image =&#34; https://www.googleapis.com/compute/v1/projects/ [old -project-ID] /全局/图像/ [图像名]&#34;}
答案 4 :(得分:2)
在上面添加Amos的答案,为了避免必须从其实例中分离pd以便从中创建图像,我使用了以下序列:
完成后,您可以删除源项目中创建的磁盘和图像。
答案 5 :(得分:2)
如果有其他人从谷歌搜索到这里,今天你可以直接从另一个项目的快照在一个项目中创建一个磁盘,而无需创建任何临时物理磁盘或图像。
创建快照:gcloud compute disks snapshot your-disk-name
--snapshot-names=your-snapshot-name --project=source-project --zone=source-zone
描述快照并找到selfLink:gcloud compute
snapshots describe your-snapshot-name --project=source-project
在创建磁盘时使用selfLink而不是快照名称
新项目:gcloud compute disks create your-new-disk-name
--project=destination-project --zone=destination-zone --source-snapshot=https://www.googleapis.com/compute/v1/projects/source-project/global/snapshots/your-snapshot-name
答案 6 :(得分:1)
虽然以下内容不会直接迁移持久性磁盘,但它只允许您使用两个命令在另一个项目上复制一个。
如果您将文档IanGSY引用中的进程组合起来将磁盘转换为&#34;图像&#34;即:
gcloud compute images create example-image --source-disk example-disk --source-disk-zone ZONE
(上述命令仅在驱动器不活动(已连接)时有效,如果必须丢弃VM,请确保不要让它删除驱动器 - 确保&#34;删除启动删除实例时的磁盘&#34;如果您使用网络用户界面,则不会检查!)
并使用Jens所暗示的内容(在SO:How to share google compute engine images across projects?的答案中详细说明)I.E:
gcutil --service_version="v1" --project=<ID-of-your-project> addinstance <name-you-for-instance> --machine_type=<type-of-machine> --network="default" --external_ip_address="ephemeral" --zone=<datacenter-zone> --image="https://www.googleapis.com/compute/v1/projects/<ID-of-image-owners-project>/global/images/<image-id>" --persistent_boot_disk="true"
您将在另一个项目中获得给定磁盘的副本。
答案 7 :(得分:0)
请勿使用在云存储桶中创建映像文件并共享它的过程。它还不是很强大(尚)。 Amos在源项目中创建图像并在目标项目中从该图像创建实例的方法更加清晰,对我来说非常有用。
请注意命令行选项,因为gcloud实用程序有点不稳定。
答案 8 :(得分:0)
我很难将磁盘上的数据从我的一个项目获取到另一个项目。尽我所能遵循这里和Google的所有指示但是在没有先创建实例的情况下无法创建全新的磁盘。这就是我最终做的事情......(受到许多其他答案的影响很大)
在原始项目中:
在目的地项目中:
gcloud compute instances create NAMEFORNEWINSTANCE --image IMAGENAMEYOUCHOSE --image-project ORIGINALPROJECTNAME
(是的,我们正在创建一个新实例,即使您真的只想创建一个新磁盘。我无法让它工作只需创建一个新磁盘。)NAMEFORNEWINSTANCE
附加磁盘:(不完全相同的主题,但是为任何需要知道如何操作的人提供这些步骤)
gcloud compute instances attach-disk NAMEOFINSTANCETOATTACHTO --disk=NAMEOFDISK
(同样,NAMEOFDISK应与您为NAMEFORNEWINSTANCE选择的相同)您应该在Disks面板中看到它现在已附加到您的新实例。sudo mkdir /DIRECTORYNAME
lsblk
以查看磁盘列表,其名称,大小和挂载点。尝试在那里找到你附加的磁盘。大小应与您在“磁盘”面板中看到的大小相匹配,不应安装到任何内容sudo mount /dev/NAME_FOUND_IN_STEP_ABOVE /DIRECTORY
答案 9 :(得分:0)
如果数据不是太大(例如,小于1 TB(?)),则可以直接使用两个VM(每个都有随附的磁盘)直接复制它,这样会更容易:
ssh-keygen -t rsa
~/.ssh/id_rsa.pub
)。您也可以将其作为新行添加到目标的~/.ssh/authorized_keys
)使用rsync或scp复制数据。
如果您的数据需要sudo,则需要执行额外的步骤-启用sudo rsync
:
sudo visudo
并添加username ALL=NOPASSWD:/usr/bin/rsync
(更改用户名,并使用which rsync
,以防路径不同)rsync -av --rsync-path="sudo rsync" -e='ssh -o "UserKnownHostsFile /dev/null" -i ~username/.ssh/id_rsa' username@source.ip.address:/source/path/ /target/path
(两次更新用户名并使用正确的source.ip.address)答案 10 :(得分:0)
使用GUI
内部项目1:
1)通过转到https://console.cloud.google.com/iam-admin/iam并授予访问权限,然后单击“添加”,然后输入与project2关联的电子邮件,然后将角色选择为Compute Engine> Compute Image User(可能还需要Compute Storage Admin角色)
2)从磁盘https://console.cloud.google.com/compute/imagesAdd创建映像
内部项目2:
3)创建一个新实例,然后在“启动磁盘”下单击更改https://console.cloud.google.com/compute/instancesAdd
4)选择“自定义图片”标签,然后在“从...中选择图片”下选择project1
5)选择列出的共享磁盘名称
6)继续新的实例设置
答案 11 :(得分:0)
有官方指南只需要 3 个步骤即可实现目标,因为可以跨项目访问快照:https://cloud.google.com/compute/docs/disks/create-snapshots#sharing_snapshots
gcloud compute disks snapshot disk-1 --project project-a --snapshot-names snapshot-1
gcloud compute disks create disk-2 --project project-b --source-snapshot projects/project-a/global/snapshots/snapshot-1
gcloud compute instances attach-disk instance-1 --project project-b --disk disk-2
答案 12 :(得分:0)
添加我的答案,因为一切似乎都过时了。 GCP 允许在项目之间移动图像,整个解决方案都围绕此展开。
我有 2 个 GCP 项目 A 和 B。A 中的永久性磁盘需要转移到 B。
1. Create an image from your persistent disk in A.
2. In B, create a new image and select the source as the image from A.
3. In B, create a disk from the image (from 2)
4. (Cleanup) Delete the images in both A and B.
所有这些都可以通过用户界面完成(2021 年 1 月 15 日)。
答案 13 :(得分:-1)
上面Amos描述的方法使用命令“gcloud compute instances create”来解决OP请求的任务。当他使用“--image”标志时,他提供了google网址(这很长,我必须查找并每次检查它的语法)。
同样的“gcloud compute instances create”命令也会带一个“--image-project”标志,其中OP请求的任务以相同的方式解决,除了它接受你的图像和项目名称,所以你不必记住或查找更长的uri。
命令也接受“--image”和“--image-project”标志:“gcloud compute disks create”,因此您可以将原始项目的永久磁盘的原始项目映像迁移到新项目中的新持久性磁盘,无需创建正在运行(即可计费)的实例。
这两种方法都要求在新项目中创建实例或磁盘之前,在原始项目中创建要迁移的磁盘映像。
我刚刚将一个磁盘从我的开发项目迁移到了一个生产项目,我的会话看起来如下:
在我的原始项目中,我创建了一个我想要迁移的磁盘的映像(首先它必须从任何正在运行的实例中分离)其他人可能有一个不同于我使用的磁盘区域,所以相应修改:
gcloud config set project originalproject
gcloud compute images create imageofmydisk --description“我的磁盘映像,可以部署” - 家庭“grsec-4.6.5” - source-disk mydisk --source-disk-zone us-central1-f < / p>
切换到我的新项目,我根据我在旧项目中新创建的磁盘映像创建了一个新磁盘:
gcloud config set project newproject
gcloud计算磁盘创建mynewdisk --description“mynewdisk的描述”--type pd-ssd --image imageofmydisk --image-project originalproject
因此,我完成了OP请求的任务,无需记忆或每次查找图像的完整URL。