OpenVZ VEID nachträglich ändern

Wer wie ich seine OpenVZ-VEs fortlaufend nummeriert hat, wird mir sicherlich beipflichten wenn ich sage, dass ab einer gewissen Menge VEs ziemlich unübersichtlich werden kann. Unter Virtuozzo / PCS gibt es das schöne Tool vzmlocal, mit der man problemlos die VEID ändern kann. Unter OpenVZ muss man die notwendigen Schritte aber von Hand durchführen. Daher habe mir das Tool in einer stark vereinfachten (aber funktionierenden) Variante in Bash nachgebaut. In Aktion sieht der ganze Spaß dann in etwa so aus:

$ vzlist | grep -E '(NAME|test.tamcore.eu)$'
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
       123         13 running   10.6.0.5        test.tamcore.eu
$ vzmlocal.sh 123 10605
Setting up checkpoint...
	suspend...
	dump...
	kill...
Checkpointing completed successfully
Unmounting file system at /vz/root/123
Unmounting device /dev/ploop38489
Container is unmounted
`/etc/vz/conf/123.conf' -> `/etc/vz/conf/10605.conf'
`/vz/root/123' -> `/vz/root/10605'
`/vz/private/123' -> `/vz/private/10605'
Restoring container ...
Opening delta /vz/private/10605/root.hdd/root.hdd
Adding delta dev=/dev/ploop38489 img=/vz/private/10605/root.hdd/root.hdd (rw)
/dev/ploop38489p1: clean, 26942/655360 files, 235076/2620923 blocks
Mounting /dev/ploop38489p1 at /vz/root/10605 fstype=ext4 data='balloon_ino=12,' 
Container is mounted
	undump...
Adding IP address(es): 10.6.0.5
arpsend: 10.6.0.5 is detected on another computer : 00:07:b4:00:01:02
vps-net_add WARNING: arpsend -c 1 -w 1 -D -e 10.6.0.5 eth0 FAILED
Setting CPU units: 1000
	resume...
Container start in progress...
Restoring completed successfully
$ vzlist | grep -E '(NAME|test.tamcore.eu)$'
      CTID      NPROC STATUS    IP_ADDR         HOSTNAME
     10605         13 running   10.6.0.5        test.tamcore.eu
wget -O ~/bin/vzmlocal.sh //archive.tamcore.eu/wp-content/uploads/2013/11/vzmlocal.sh
chmod +x ~/bin/vzmlocal.sh
#!/bin/bash

if [ -z $2 ];
then
  echo "Usage: $0 <veid> <newveid>"
  exit 1
fi

VEID=$1
NEWVEID=$2
RUNNING=0

if [ ! -f /etc/vz/conf/${VEID}.conf ]; then
  echo "$VEID doesn't exist!"
  exit 1
fi

if [ -f /etc/vz/conf/${NEWVEID}.conf ]; then
  echo "$NEWVEID already exist!"
  exit 1
fi

source /etc/vz/conf/${VEID}.conf

[ -f ${VE_ROOT}/proc/user_beancounters ] && RUNNING=1

[ $RUNNING -eq 1 ] && vzctl suspend ${VEID} --dumpfile /tmp/Dump.${VEID} || exit 1
mv -v /etc/vz/conf/{${VEID},${NEWVEID}}.conf
mv -v ${VE_ROOT} ${VE_ROOT/$VEID/$NEWVEID}
mv -v ${VE_PRIVATE} ${VE_PRIVATE/$VEID/$NEWVEID}
[ $RUNNING -eq 1 ] && vzctl resume ${NEWVEID} --dumpfile /tmp/Dump.${VEID}
rm -vf /var/vzquota/quota.${VEID}