Last active
October 27, 2023 17:11
-
-
Save dlage/8dd97c285e2dd41f58c2 to your computer and use it in GitHub Desktop.
Bash script to convert an OpenVZ ploop container back to simfs
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# ./convert_ploop_to_simfs.sh VEID | |
# chmod +x convert_ploop_to_simfs.sh | |
rsync_options='-aHAX --progress --stats --numeric-ids --delete' | |
partition='vz' | |
if [ ! -e /etc/vz/conf/$1.conf ]; then | |
echo "Virtual server configuration file: /etc/vz/conf/$1.conf does not exist." | |
exit 1 | |
fi | |
if [ ! -d /$partition/private/$1/root.hdd ]; then | |
echo "Server does not have a ploop device" | |
exit 1 | |
fi | |
if [ ! -d /$partition/private/$1 ]; then | |
echo "Server does not exist" | |
exit 1 | |
fi | |
# Get disk space in G of current VPS | |
#disk=`vzctl exec $1 df -BG | grep ploop | awk {'print $2'} | head -n1` | |
#if [ ! $disk ]; then | |
# echo "Could not retrieve disk space figure. Is VPS running?" | |
# exit 1 | |
#fi | |
# Create and mount file system | |
mkdir -p /$partition/private/1000$1/ | |
#ploop init -s $disk /$partition/private/1000$1/root.hdd/root.hdd | |
cp /etc/vz/conf/$1.conf /etc/vz/conf/1000$1.conf | |
vzctl mount 1000$1 | |
# Rsync over files (sync 1) | |
rsync $rsync_options /$partition/root/$1/. /$partition/private/1000$1/ | |
# Stop primary, mount, sync final | |
vzctl stop $1 | |
vzctl mount $1 | |
rsync $rsync_options /$partition/root/$1/. /$partition/private/1000$1/ | |
vzctl umount $1 | |
vzctl umount 1000$1 | |
mv /$partition/private/$1 /$partition/private/$1.backup | |
mv /$partition/private/1000$1 /$partition/private/$1 | |
vzctl start $1 | |
# Cleanup | |
rm -f /etc/vz/conf/1000$1.conf | |
rmdir /vz/root/1000$1 | |
# Verification | |
verify=`vzlist -H -o status $1` | |
if [ $verify = "running" ]; then | |
echo "Virtual server conversion successful. Verify manually then run: rm -Rf /$partition/private/$1.backup to remove backup." | |
else | |
echo "Server conversion was not successful..Reverting.." | |
mv -f /$partition/private/$1 /$partition/private/$1.fail | |
mv /$partition/private/$1.backup /$partition/private/$1 | |
vzctl start $1 | |
fi |
Actually, I don't see how this script does any conversion. It creates a new folder, copies content over (by rsync) stops and restarts the server, but where is any actual conversion taking place?
There's a "ploop init" line but it's commented out.
What's the point?
The script copies to a new VEID, which defaults to simfs. If I recall correctly it's (or was) a step needed to convert openvz to proxmox.
Change rsync_options to "-aHAX --progress --stats --numeric-ids --delete" which will keep ACLs, xattrs, numeric-ids and will delete files which changed between the two rsync stages.
Thanks for the tip. Updated (better late than never)
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Actually, I don't see how this script does any conversion. It creates a new folder, copies content over (by rsync) stops and restarts the server, but where is any actual conversion taking place?
There's a "ploop init" line but it's commented out.
What's the point?