Proxmox

Nützliches zur Virtualisierungslösung Proxmox

LXC Container umziehen

Einfaches Backup-Script um Container von einem Storage auf ein anderes umzuziehen

(C) by James Coyle

#!/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
# 13-12-2017  James Coyle  Changes for LXC
#
#
 
# Variables
TMP=/tmp      #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.
 
# 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 pct list| fgrep -w -q "$CT" | grep "running"
then
    RUNNING=true
fi
 
if $RUNNING
then
    pct stop $CT
fi
 
vzdump --dumpdir $TMP $CT
 
ARCHIVE=$(ls -t $TMP/vzdump-lxc-$CT-*.tar | head -n 1)
 
pct restore $CT $ARCHIVE -force -storage $TARGET_STORAGE
 
if $RUNNING
then
    pct start $CT
fi
 
if $DELETE
then
    LOG=$(ls -t $TMP/vzdump-lxc-$CT-*.log | head -n 1)
    echo "Deleting $LOG and $ARCHIVE"
    rm -rf $ARCHIVE $TMP/$LOG
fi

qcow2 Images vergrößern / verkleinern

Images vergrößern

  1. VM herunterfahren
  2. folgenden Befehl eingeben:
    qemu-img resize image.qcow2 +SIZE
  3. Ab hier unterscheiden die die Vorgehensweisen bei Linux- und Windows VMs

Linux-VM:

die VM mit einer Live-DVD von gParted booten und das Dateisystem auf die neue Größe anpassen,

Windows VM:

schritt_1.jpg

Per Rechtsklick auf „Computer“ im Startmenü in die Verwaltung wechseln

schritt_2.jpg

Über die Auswahl auf der linken Seite in die Datenträgerverwaltung wechseln und dort die Systemfestplatte auswählen und per Rechtsklick darauf die Funktion „Volume erweitern…“ auswählen

schritt_3.jpg

Im sich öffnenden Fenster durchklicken bis man zu dieser Ansicht gelangt, dabei ist sicherzustellen dass der dazugewonnene Speicher auf der Ausgewählt Seite steht

schritt_4.jpg

Nun das ganze mit Klicks auf Weiter und Fertigstellen abschließen, nach einem kurzen Moment wird die neue Datenträgergröße angezeigt

Images verkleinern

  1. VM herunterfahren, anschließend mit einer Live-DVD von gParted booten und das Dateisystem verkleinern auf die gewünschte und vor allem mögliche Größe - Man kann eine Festplatte nicht kleiner machen als die insgesamt auf ihr gespeicherten Daten ohne einen kompletten Verlust eben jener befürchten zu müssen!!!
  2. Ein neues Image erstellen in der neuen gewünschten Größe
    qemu-img create -f qcow2 -o preallocation=metadata newimage.qcow2 NEW_SIZE
  3. Die Daten vom alten, größeren Image in das neue, kleinere Image kopieren
    virt-resize oldimage.qcow2 newimage.qcow2

    Sollte das im vorherigen Schritt erstellte Image größer sein als die sich aktuell auf dem alten Image befindlichen Daten wird virt-resize eine Meldung ausgeben und ggf. eine zweite Partition mit dem übrig gebliebenem Speicherplatz erstellen - Im gegenteiligen Fall wird virt-resize die Aktion abbrechen und eine Meldung ausgeben wie viel Speicherplatz fehlt um die Aktion ausführen zu können

  4. Die VM starten. Dabei kann es zu Fehlermeldungen kommen aufgrund von alten Datenträgerinformationen, diese sollte das Betriebssystem jedoch automatisch beheben können
  5. Sollte nach dem erfolgreichen Booten der VM alles funktionieren kann das alte Image gelöscht werden