--- title: "Import a custom image" description: "Bring a disk image you built elsewhere into E2E from an Object Storage bucket, so it becomes a saved image you can launch nodes from." content_type: "how-to" product: "images" platform: "MyAccount" url: "/myaccount/images/how-to/import-a-custom-image/" topic: ["import-and-export"] relationships: {"requires":["/myaccount/object-storage/how-to/create-a-bucket/","/myaccount/node/how-to/install-the-opennebula-context-package/"]} --- # Import a custom image Importing turns a disk image from another cloud or your own servers into a saved image on E2E. Once it is ready, you launch nodes from it the same way as from any image you saved here. The image travels through E2E Object Storage: you upload the file to a bucket, then point the import at it. ## Before you begin You need: - The image file, in `qcow2`, `qed`, `raw`, `vdi`, or `vhd` format. The disk inside it has a single boot partition and is no larger than 2,048 GB (2 TB). The partition can use any filesystem, as long as it boots cleanly from the MBR bootloader. You can compress the file with `gzip` or `tar` to cut the upload size and the import time. - A source operating system E2E has tested imports with: CentOS or RHEL 7 or later, Debian 8 or later, Ubuntu 14.04 or later, or Rocky Linux or AlmaLinux 8 or later. Other systems can be imported too, but may need extra setup. - The OpenNebula context package installed and turned on in the source machine before you made the image, with cloud-init turned off. On a node's first boot, this package sets up its network, password, hostname, and SSH keys. Without it, a node launched from the image boots but cannot be reached. The commands for each operating system are in [Install the OpenNebula context package](/myaccount/node/how-to/install-the-opennebula-context-package/). - An E2E Object Storage bucket to hold the file. See [Create a bucket](/myaccount/object-storage/how-to/create-a-bucket/) to make one. - For the private-bucket method only, an access key attached to that bucket. Any role can read the file: **Bucket Reader**, **Bucket Writer**, or **Bucket Admin**. See [Generate an access key](/myaccount/object-storage/how-to/generate-an-access-key/). Importing is free. You pay for the storage the imported image uses. E2E stores imported images in its own format, so the image can take up to five times the size of the file you uploaded. Rates are on the [pricing page](https://www.e2enetworks.com/pricing), and for sizing questions you can write to **cloud-platform@e2enetworks.com**. ## Choose how E2E reads the file The import dialog has two tabs, one for each way E2E can reach the file: - **Public URL** reads the file from its address in Object Storage, with no key. It works in Delhi and Chennai. For that, the bucket must let anyone download its files until the image reads **Ready**. The file can be up to 1 TB, or 5 TB if your account is allowed to import Windows images. - **Private EOS Bucket** reads the file with an access key, so the bucket stays private. E2E uses the keys once, to fetch the file, and does not store them. This tab is offered in Delhi. In Delhi, use **Private EOS Bucket**: the file stays private. In Chennai, use **Public URL**. The image is imported into the region you are working in, the one selected at the top of MyAccount. Switch region first if you need the image somewhere else. ## Upload the file Upload the image file to your bucket from the Object Storage dashboard or with a command-line tool such as `mc`; see [Upload and download objects](/myaccount/object-storage/how-to/upload-and-download-objects/) and [Connect with the mc client](/myaccount/object-storage/how-to/connect-with-the-mc-client/). Note the file's path inside the bucket, such as `images/web-base.qcow2`. You need it in the next part. ## Import from a private bucket 1. On the **Nodes** page in MyAccount, click **Saved Images**. The **Manage Saved Images** page opens. 2. Click **Import Custom Images**, then open the **Private EOS Bucket** tab. 3. In **Custom Image Name**, name the image: 3 to 64 characters, using letters, digits, underscores, and hyphens. 4. In **Bucket Name**, enter the bucket that holds the file. In **Object Path**, enter the file's path inside the bucket, such as `images/web-base.qcow2`. Use a path without spaces. 5. In **Type of OS**, choose what the image holds, **Linux** or **Windows**. For a Windows image, also choose the **Boot Mode** the source machine used, **BIOS** or **UEFI**. To import Windows images, your account needs to be set up for it; if **Windows** is missing from the list, ask support. 6. Enter the **Access Key** and **Secret Key** of the key attached to the bucket. 7. Check **I understand and want to import custom image.** and click **Import**. ## Import from a public URL **Download** is a setting for the whole bucket: while it is on, anyone who has an address in the bucket can download that file, not only E2E. Keep the image in a bucket that holds nothing else. If the image itself holds anything you would not publish, such as passwords, keys, or customer data, use the private-bucket method in Delhi, or keep **Download** on only until the image reads **Ready**. 1. Open the bucket's **Permissions** tab and click **Public Access Config**. In **Public Access Settings**, check **Download** and click **Save Permission**. See [Make a bucket public](/myaccount/object-storage/how-to/make-a-bucket-public/) for what each setting opens up. 2. Put together the file's address from the region's endpoint, the bucket name, and the file's path. In Delhi it looks like this: ```text https://objectstore.e2enetworks.net// ``` In Chennai, use `in-south1-objectstore.e2enetworks.net` in place of `objectstore.e2enetworks.net`. Replace `` with your bucket and `` with the file's path inside it, such as `images/web-base.qcow2`. 3. On the **Nodes** page, click **Saved Images**, then **Import Custom Images**. The dialog opens on the **Public URL** tab. 4. Paste the address into **Public URL**. 5. In **Custom Image Name**, name the image: 3 to 64 characters, using letters, digits, underscores, and hyphens. 6. In **Type of OS**, choose **Linux** or **Windows**. For Windows, also choose the **Boot Mode** the source machine used, **BIOS** or **UEFI**. 7. Check **I understand and want to import custom image.** and click **Import**. If E2E cannot open the file at that address, the **Public URL** field shows **Invalid Public Url.** Check the address, and that **Download** is on for the bucket. An address that is not in E2E Object Storage shows **The URL must belong to E2E Object Storage.** ## Check that the image is ready The dialog closes, and the image can take a few moments to appear in the list. The import runs in the background, and a large file takes longer. E2E adds a number to the name you gave, so an image you named `web-base` shows up as something like web-base_I-48213377. A Linux image shows **Linux** in the **OS** column, whichever distribution it holds. You get an email when the image is ready, and its **State** reads **Ready**. If the import fails, you get an **Image import failed** notification with the image's name: check the file against [Before you begin](#before-you-begin) and import it again. If an import never finishes, E2E opens a support ticket for you after a few retries; to follow up yourself, contact support with the image's name and the time you started the import. To confirm the image works, open its **Actions** menu, click **Create Node**, and launch a node from it. When the node is **Running**, connect to it over SSH, or over Remote Desktop for Windows. If the node runs but you cannot reach it, the context package is the usual cause; see [Troubleshooting image import and export](/myaccount/node/troubleshooting/image-import-export/). ## (Optional) Clean up the uploaded file Once the image reads **Ready**, E2E holds its own copy, and the file in your bucket is no longer needed. If you turned on **Download** for the import, turn it off again in **Public Access Config**. You can also delete the file to stop paying for its storage in the bucket. To take a copy back out of E2E, or to move the image to the other region, see [Export an image to Object Storage](/myaccount/images/how-to/export-an-image/).