I recently had to migrate containers from a proxmox3 (under OpenVZ) to a proxmox4 (under LXC).
Problem, there are a lot of containers to migrate/“convert” to run under LXC. So I needed a way to automate the procedure as much as possible.
Luckily, the migration documentation is very well detailed. So I used it to “bash” the operation.
You can find all the sources on my github
I cut the operation under two scripts, an export script and an import script.
The export :
The export script takes two parameters as input: the container ID
and the IP
of the destination server.
It is also necessary to define some variables that will be used to send data via scp
.
The export procedure is done as follows:
# Stop & Dump
sudo vzctl stop $ID && \
echo "$ID stopped [OK]" && \
sudo vzdump $ID -dumpdir /home/$USER/vzdump && \
echo "$ID : dump [OK]" && \
We check dump is present :
# DumpName
vzDumpName=$(ls /home/$USER/vzdump/)
if [ -z $vzDumpName ] ; then
echo "No dump found in /home/$USER/vzdump/"
exit
fi
Then we send it to Proxmox 4
:
sudo scp -i /home/$USER/.ssh/id_rsa "-P $rPort" $vzDumpName $rUSER@$rIP:$rPath && \
echo "Sending Dump [OK]" && \
sudo scp -i /home/$USER/.ssh/id_rsa "-P $rPort" vz.log $rUSER@$rIP:$rPath && \
echo "Sending Log [OK]" && \
sudo rm $vzDumpName && \
sudo rm vz.log && \
echo "SCP $vzDumpName on $rIP [OK]"
Import :
As for the import, only one argument is passed as input, which is the container’s “ID”.
Then we start the conversion and restoration part.
sudo pct restore $ID $dumpPath/$dumpName && \
echo "pct $ID restoring [OK]"
# At this poin, you can set network configuration
# exemple : pct set 101 -net0 name=eth0,bridge=vmbr0,ip=192.168.15.144/24,gw=192.168.15.1
# I prefer doing it manually
sudo pct start $ID
sudo pct enter $ID
I omitted to tell you that there is a small logging system for the operations in order to be able to trace the process a bit.