I have been using LXC for a while and there are a few commands i would like to have in my toolbox. In this article i will provide you with a few scripts for managing your LXC containers.
lxc-rsync
Command to copy an entire container to another server.
#!/bin/bash
LXCPATH="/var/lib/lxc"
die() { echo -e "$*" && exit 1; }
run() {
$* &> /dev/null
if [[ $? -eq 0 ]]
then echo -n "[OK] "
else echo -n "[FAIL] "
fi
echo "$*"
}
[[ $# -lt 2 ]] && \
die "[error] Missing args!\nSyntax: $0 container lxchost2"
[[ -f "${LXCPATH}/${1}" ]] && \
die "[error] Container not found in path '${LXCPATH}/${1}"
run ssh $2 lxc-stop -n $1
run lxc-stop -n $1
run rsync --numeric-ids -azh --delete ${LXCPATH}/${1} ${2}:${LXCPATH}/
run lxc-start -n $1lxc-tar
Tar and gzip a container
#!/bin/bash
cd /var/lib/lxc
case $1 in
"pack")
# Check if container exists
[[ ! -f ${2}/config ]] && echo "container not found!" && exit 1
# Check if previous archive exists
[[ -f ${2}.tgz ]] && echo "Archive already exists, rename or remove it!" && exit 1
# Warn if container is an overlay snapshot
if grep overlay ${2}/config
then read -p "Config contains the keyword overlayfs! CTRL+C to quit..." DUMMY
fi
# Stop if running and save last state
STATE="$(lxc-info --state -n $2)"
if [[ $STATE =~ RUNNING ]] ; then
echo "Stopping $2 before backup..."
LAST_STATE="RUNNING"
lxc-stop -n $2
fi
# Tar backup
tar --numeric-owner -czf ${2}.tgz $2
if [[ $? -eq 0 ]] ; then
echo -n "Successfully created archive: "
du -hs ${2}.tgz
else
echo "Failed to create archive!"
fi
# Restart if container was previously running
if [[ $LAST_STATE -eq "RUNNING" ]] ; then
echo "Starting up $2 again..."
lxc-start -n $2
fi
;;
"unpack")
# Check if container exists
[[ -f ${2}/config ]] && echo "Container already exist!" && exit 1
# Else unpack tar archive
tar --numeric-owner -xzf ${2}
;;
*)
echo "Syntax:"
echo "$0 pack container-name"
echo "$0 unpack backup.tgz"
;;
esac
lxc-restart
#!/bin/bash lxc-stop -n $1 && lxc-start -n $1

