You can export a custom image as backup or for sharing by exporting the image
tar.gz file to Google Cloud Storage. This method is ideal for sharing
Alternatively, if you are comfortable making all images within a project accessible to another user or project, you can share images by granting the Compute Engine Image User Role.
Before you begin
- Read the VM instances documentation.
- If you want to use the command-line examples in this guide:
- If you want to use the API examples in this guide, set up API access.
- Read the images page.
Exporting an image
To create and export an image:
Optionally, stop the instance that the disk is attached to before you create the snapshot. Stopping the instance ensures the integrity of the disk contents in the snapshot.
Create a snapshot of the disk. Name the snapshot
gcloud compute disks snapshot [DISK_NAME] --snapshot-names image-snapshot
[DISK_NAME]is the name of the disk to create the snapshot from.
image-snapshotsnapshot to create a new disk named
image-diskby running the following command:
gcloud compute disks create image-disk --source-snapshot image-snapshot
Create a temporary disk named
temporary-diskto hold your tar file, and specify the
[SIZE]of the disk to be at least 50% larger than the image disk.
You can detach and delete the disk afterwards.
gcloud compute disks create temporary-disk --size [SIZE]
[SIZE]is the size of the temporary disk.
Create a new instance and enable
storage-rwscope on the instance. Also, attach the
temporary-diskto the instance as secondary disks with specific
gcloud compute instances create [INSTANCE_NAME] --scopes storage-rw \ --disk name=image-disk,device-name=image-disk \ --disk name=temporary-disk,device-name=temporary-disk
[INSTANCE_NAME]is the name of the instance to create.
Note that you're passing in service account scopes so that you can upload your file to Google Cloud Storage in later steps.
Review the details about starting a new instance if necessary.
gcloud compute ssh [INSTANCE_NAME]
[INSTANCE_NAME]is the instance to connect to.
Format and mount the temporary disk. Formatting the disk deletes the contents of the temporary disk.
sudo mkdir /mnt/tmp
sudo mkfs.ext4 -F /dev/disk/by-id/google-temporary-disk
sudo mount -o discard,defaults /dev/disk/by-id/google-temporary-disk /mnt/tmp
Optionally, you can mount the image disk and make additional changes before you create the tar file. For example, you might want to delete any existing files from the
/homedirectory if you do not want them to be part of your image. Mount the disk partitions that you need to modify, modify the files on the disk that you need to change, and then unmount the disk when you are done.
Create a directory where you can mount your disk or partition.
sudo mkdir /mnt/image-disk
lscommand to determine which disk or disk partition you need to mount.
The command prints a list of disk IDs and partitions. For example, the following disk has a partition table with one partition. The
google-image-diskID points to the full disk from which you want to create an image. The
google-image-disk-part1ID points to the first partition on this disk. Mount the partition if you need to make changes to the disk, then create the image from the full disk.
Mount the disk or the partition. If your disk has a partition table, mount the individual partitions for your disk. For example, mount
sudo mount /dev/disk/by-id/google-image-disk-part1 /mnt/image-disk
Alternatively, if your disk is raw formatted with no partition table, mount the full
sudo mount /dev/disk/by-id/google-image-disk /mnt/image-disk
Modify the files in the
/mnt/image-diskdirectory to configure the files on the disk. As an example, you might remove the
/mnt/image-disk/home/[USER]/.ssh/authorized_keysfile to protect your SSH keys from being shared.
After you are done modifying files, unmount the disk.
sudo umount /mnt/image-disk/
Create a tar file of your image.
When you finish customizing the files on the image disk, create a raw disk file on your temporary disk. The name of the raw disk image must be 'disk.raw':
sudo dd if=/dev/disk/by-id/google-image-disk of=/mnt/tmp/disk.raw bs=4096
Then tar and gzip this file:
sudo tar czvf myimage.tar.gz disk.raw
This command will create an image of the instance in the following location:
Upload an image into Google Cloud Storage
To upload the tar file to Google Cloud Storage, use the gsutil command line tool that comes preinstalled on your instance.
Create a bucket using
Make sure to review the Bucket and Naming Guidelines before you create your bucket. Then, create your bucket using the following command:
me@example-instance:~$ gsutil mb gs://[BUCKET_NAME]
[BUCKET_NAME]is the name of the bucket to be created.
Copy your file to your new bucket.
me@example-instance:~$ gsutil cp /mnt/tmp/myimage.tar.gz gs://[BUCKET_NAME]
[BUCKET_NAME]is the bucket to copy the file.
That's it, you have exported your file into Google Cloud Storage. You can now share the image with other people, or use the tar file to add a new image to a Google Cloud Platform Console project.