Complete step-by-step guide to migrating your DigitalOcean droplets to RamNode Cloud VPS.
This guide provides step-by-step instructions for migrating your virtual private servers (VPS) from DigitalOcean to RamNode. Whether you're moving a single droplet or multiple production workloads, this document covers everything from initial preparation through final verification.
DigitalOcean does not provide a native export feature for snapshots, so migration requires creating a disk image directly from your running droplet and uploading it to RamNode's cloud platform. RamNode supports multiple image formats including RAW, QCOW2, VMDK, VDI, and VHD/VHDX, making it compatible with images from various virtualization platforms.
| Format | Description | Recommended |
|---|---|---|
| RAW | Uncompressed disk image, byte-for-byte copy | For speed |
| QCOW2 | QEMU Copy-On-Write format with compression | Best overall |
| VMDK | VMware virtual disk format | VMware migrations |
| VDI | VirtualBox disk image format | VirtualBox migrations |
| VHD/VHDX | Microsoft Hyper-V format | Hyper-V migrations |
Recommendation: QCOW2 is the preferred format for most migrations due to its efficient compression, which significantly reduces upload times and storage costs.
This method creates a complete byte-for-byte copy of your droplet's disk, preserving all data, configurations, and the boot environment.
Before creating the disk image, prepare your droplet to ensure data consistency:
1. Stop all non-essential services to minimize disk writes during the copy:
sudo systemctl stop apache2 # or nginx
sudo systemctl stop mysql # or postgresql, mariadb
sudo systemctl stop redis
sudo systemctl stop docker2. Install required utilities if not already present:
Debian/Ubuntu:
sudo apt update && sudo apt install -y qemu-utils gzipCentOS/RHEL/Rocky/Alma:
sudo yum install -y qemu-img gzip3. Sync the filesystem to ensure all data is written to disk:
sudo syncCreate and transfer the disk image to a remote server in a single operation. This approach streams the data directly, avoiding the need for local storage:
sudo dd if=/dev/vda bs=4M status=progress \
| gzip -1 \
| ssh user@destination-server 'cat > droplet-image.img.gz'Important: The device name is typically /dev/vda on DigitalOcean droplets. Verify with lsblk before proceeding.
For droplets with separate partitions (if you only need the root filesystem):
# Copy only the root partition
sudo dd if=/dev/vda1 bs=4M status=progress \
| gzip -1 \
| ssh user@destination-server 'cat > droplet-partition.img.gz'On your destination server, decompress and convert the image to QCOW2 for optimal upload:
# Decompress the image
gunzip droplet-image.img.gz
# Convert RAW to QCOW2 with compression
qemu-img convert -f raw -O qcow2 -c droplet-image.img droplet-image.qcow2
# Verify the conversion
qemu-img info droplet-image.qcow2The compression typically reduces the image size by 50-80%, significantly speeding up the upload to RamNode.
For complex environments or when you want a fresh system with migrated data, consider an application-level migration:
rsync -avzP --exclude='/dev/*' --exclude='/proc/*' \
--exclude='/sys/*' --exclude='/tmp/*' --exclude='/run/*' \
root@old-droplet:/ /destination/path/For images under 2GB, the web interface is the simplest option:
For images larger than 2GB, use the OpenStack CLI for reliable uploads:
Go to cloud.ramnode.com, navigate to API Access, and download the OpenRC file for your target region.
pip install python-openstackclientsource openrcopenstack image create --disk-format qcow2 --container-format bare --file <file.qcow2> <image-name>openstack image create --disk-format qcow2 --container-format bare --file droplet-image.qcow2 DigitalOcean-WebServerNote: There is no progress bar. When it completes, it will return to the command prompt.
For detailed OpenStack CLI instructions, see our Region Migration Guide.
Once your image is uploaded and available:
After launching your instance, complete these verification steps:
If your image was not configured with cloud-init, you may need to update the network configuration:
# Check current network configuration
ip addr show
# If using static IP (update as needed)
sudo nano /etc/netplan/01-netcfg.yaml # Ubuntu 20.04+
sudo nano /etc/sysconfig/network-scripts/ifcfg-eth0 # CentOS/RHELVerify all critical services are running:
# Check service status
sudo systemctl status nginx apache2 mysql postgresql
# Review system logs for errors
sudo journalctl -xe --since '10 minutes ago'
# Verify listening ports
sudo ss -tlnpIf your instance fails to boot due to GRUB issues, you can fix it by mounting the image and reinstalling:
# Mount the image (on a rescue system or helper VM)
sudo mount /dev/vda1 /mnt
sudo mount --bind /dev /mnt/dev
sudo mount --bind /proc /mnt/proc
sudo mount --bind /sys /mnt/sys
# Chroot and reinstall GRUB
sudo chroot /mnt
grub-install /dev/vda
update-grub
exit
# Unmount and reboot
sudo umount -R /mntGetting Help: If you encounter issues during migration, RamNode's support team is available at clientarea.ramnode.com. For complex migrations, consider RamNode's professional services team.