Puede darse el caso de que necesitemos mover en nuestro proxmox las máquinas virtuales de un almacenamiento a otro.
La forma tradicional de hacer ésto era:
- Realizar una copia de seguridad de la máquina virtual (mejor en modo ‘Stop’ para evitar inconsistencias en los datos, que son raras pero existen).
- Eliminar la máquina virtual del proxmox
- Restaurar la máquina virtual en el almacenamiento deseado a partir de la copia de seguridad
Sin embargo, buscando por ahí encontré un artículo donde se publica un script que resuelve el problema mediante línea de comandos. El artículo es el siguiente:
Move Proxmox Container to Different Storage
Por si acaso alguien decide eliminar el artículo, copio el script:
#!/bin/bash # # Filename : migrate # Description : Migrate Proxmox OpenVZ container from one storage to another # Author : James Coyle # # Version: # -Date -Author -Description # 20-11-2013 James Coyle Initial # # # Variables TMP=/home/HDD1_50GB/tmpdir #Location to use to create the backup for transferring to new storage. This needs to be big enough to store the backup archive for the container. DELETE=false #by default it deletes the backup file # Do not edit usage() { echo "Usage: $0" echo " [-c Required: Container ID to migrate <int>] " echo " [-s Required: Target storage ID <string>]" echo " [-d Optional: Delete the backup file after CT restoration <boolean>]" echo "" echo "Example: $0 -c 100 -s nasarray" echo "" exit 1; } while getopts "c:s:d" o; do case "${o}" in c) CT=${OPTARG} ;; s) TARGET_STORAGE=${OPTARG} ;; d) DELETE=true ;; *) usage ;; esac done shift $((OPTIND-1)) # Check mandatory fields if [ -z "${CT}" ] || [ -z "${TARGET_STORAGE}" ]; then usage fi RUNNING=false set -e set -o pipefail echo "Moving $CT to $TARGET_STORAGE..." if vzlist | fgrep -w -q " $CT " then RUNNING=true fi if $RUNNING then vzctl stop $CT fi vzdump --dumpdir $TMP $CT ARCHIVE=$(ls -t $TMP/vzdump-openvz-$CT-*.tar | head -n 1) vzrestore $ARCHIVE $CT -force -storage $TARGET_STORAGE if $RUNNING then vzctl start $CT fi if $DELETE then LOG=$(ls -t $TMP/vzdump-openvz-$CT-*.log | head -n 1) echo "Deleting $LOG and $ARCHIVE" rm -rf $ARCHIVE $TMP/$LOG fi
Solamente he hecho dos cambios en el script para que me funcione correctamente:
- Modificar el directorio temporal porque el que viene por defecto (/tmp) no tenía sufiente espacio libre para albergar las copias de seguridad y daba error.
- Poner DELETE por defecto a false, ya que de no hacerlo el script borraba como si le hubiésemos pasado la opción -d
Lo he instalado en el directorio /root del proxmox y agregado permisos de ejecución con chmod +x