ansitest/proxmox/RESTORE-fsarchive-root-proxmox--NO-EFI.sh

179 lines
5.9 KiB
Bash
Raw Permalink Normal View History

2024-04-19 12:29:25 -06:00
#!/bin/bash
# =LLC= © (C)opyright 2017 Boojum Consulting LLC / Dave Bechtel, All rights reserved.
## NOTICE: Only Boojum Consulting LLC personnel may use or redistribute this code,
## Unless given explicit permission by the author - see http://www.boojumconsultingsa.com
#
# To be run from systemrescuecd environment; NOTE restore disk MUST be partitioned 1st!
# REQUIRES 1 arg: filename of .fsa
# copy this script to /tmp and chmod +x, run from there
2024-04-20 17:52:27 -06:00
# 2024.Apr kneutron
2024-04-19 12:29:25 -06:00
2024-04-20 17:52:27 -06:00
# mod for proxmox
# NO EFI version
2024-04-19 12:29:25 -06:00
# If you prefer not to use an ISO to restore from, systemrescuecd has sshfs:
#
# sshfs -C -o Ciphers=chacha20-poly1305@openssh.com loginid@ipaddress:/path/to/backupfile \
# /mnt/path \
# -o follow_symlinks
# mkdir -pv /mnt/restore; sshfs -C -o Ciphers=chacha20-poly1305@openssh.com dave@192.168.1.185:/mnt/seatera4-xfs/notshrcompr \
# /mnt/restore -o follow_symlinks
# failexit.mrg
function failexit () {
echo '! Something failed! Code: '"$1 $2" # code # (and optional description)
exit $1
}
vgchange -a y
# TODO editme
#rootdev=/dev/sda3 # for physical disk non-nvme
#rootdev=/dev/vda3 # for restore to VM
rootdev=/dev/mapper/pve-root # for proxmox ext4+LVM restore
2024-04-20 17:52:27 -06:00
# xxx TODO EDITME
#rdevonly=${rootdev%[[:digit:]]}
rdevonly=/dev/vda # for VM
2024-04-19 12:29:25 -06:00
umount $rootdev # failsafe
#cdr=/mnt/cdrom2
#mkdir -pv $cdr
rootdir=/mnt/tmp2
umount $rootdir # failsafe
mkdir -pv $rootdir
myres=BOOJUM-RESTORE.sh # injection script
# NOTE sr0 is systemrescue
#mount /dev/sr1 $cdr -oro
#chkmount=`df |grep -c $cdr`
#[ $chkmount -gt 0 ] || failexit 99 "Failed to mount $cdr"; # failed to mount
chkmount=`df |grep -c $rootdir`
[ $chkmount -eq 0 ] || failexit 98 "$rootdir is still mounted - cannot restore!";
#cd $cdr || failexit 199 "Cannot CD to $cdr";
pwd
echo "`date` - RESTORING root filesystem to $rootdev"
# PROBLEM with long filenames in UDF - gets cut off, use $1
#time fsarchiver restfs *.fsa id=0,dest=$rootdev
2024-04-20 17:52:27 -06:00
time fsarchiver restfs -v "$1" id=0,dest=$rootdev || failexit 400 "Restore failed!";
2024-04-19 12:29:25 -06:00
# TODO fix
#while `wait -n`; do ## notwork - endless loop
#while [ `jobs |wc -l` -gt 0 ]; do
# df -h |grep $rootdev # grep fsa
# sleep 5
#done
date
# boojumtastic!
tune2fs -m1 $rootdev
mount $rootdev $rootdir -onoatime,rw
# Comment out any existing swap partitions in restored fstab
# REF: https://unix.stackexchange.com/questions/295537/how-do-i-comment-lines-in-fstab-using-sed
#sed -e '/[/]/common s/^/#/' /etc/fstab
2024-04-20 17:52:27 -06:00
#/bin/cp -v $rootdir/etc/fstab $rootdir/etc/fstab--bkp && \
# sed -i '/swap/s/^/#/' $rootdir/etc/fstab; grep swap $rootdir/etc/fstab
2024-04-19 12:29:25 -06:00
# Detect swap partition(s) in restore environ - print /dev/sdXX w/o ":"
#for p in `blkid |grep TYPE=\"swap\" |awk -F: '{ print $1 }'`; do
# pmod=${p##*/} # strip off beginning /dev/, leave sdXX
# swapuuid=`ls -l /dev/disk/by-uuid |grep $pmod |awk '{ print $9 }'`
# check have we already done this?
# [ `grep -c $swapuuid $rootdir/etc/fstab` -gt 0 ] || \
# echo "UUID=$swapuuid swap swap defaults,pri=2 0 0" |tee -a $rootdir/etc/fstab
# echo "UUID=$swapuuid swap swap defaults,pri=2 0 0" >> $rootdir/etc/fstab
#done
# /dev/sdb5
#ls -l /dev/disk/by-uuid |grep sdb5
# 1 2 3 4 5 6 7 8 9
#lrwxrwxrwx 1 root root 10 Aug 27 11:09 dfc46f8f-bcfa-4e73-b62f-b24dd0bf60cf -> ../../sdb5
# Make sure we can boot!
2024-04-20 17:52:27 -06:00
echo "$(date) - Installing grub on $rdevonly"
2024-04-19 12:29:25 -06:00
grub-install --root-directory=$rootdir $rdevonly
mount -o bind /dev $rootdir/dev; mount -o bind /proc $rootdir/proc; mount -o bind /sys $rootdir/sys
# FIXED
myres2=$rootdir/$myres
touch $myres2 || failexit 298 "Check if R/O filesystem?"
echo "#!/bin/bash" > $myres2 || failexit 299 "Cannot update $myres2 injection script - Check R/O filesystem?"
echo "grub-install $rdevonly" >> $myres2 # from chroot
2024-04-20 17:52:27 -06:00
echo "update-grub" >> $myres2
2024-04-19 12:29:25 -06:00
echo "exit;" >> $myres2
#^D
# inject script here!
chroot $rootdir /bin/bash /$myres
#umount -a $rootdir/*
2024-04-20 17:52:27 -06:00
#umount -a $rootdir/{dev,proc,sys}
2024-04-19 12:29:25 -06:00
2024-04-20 17:52:27 -06:00
#umount $rootdir/* 2>/dev/null
#umount $rootdir 2>/dev/null
2024-04-19 12:29:25 -06:00
df -hT
echo "DON'T FORGET TO COPY /home and adjust fstab for swap / home / squid BEFORE booting new drive!"
echo "+ also adjust etc/network/interfaces , getdrives-byid , etc/rc.local , etc/hostname , etc/hosts ,"
echo "+ etc/init/tty11 port (home/cloudssh/.bash_login"
2024-04-20 17:52:27 -06:00
echo '====='
echo "If restoring to VM and a zpool on the host does not exist:"
echo " systemctl disable zfs-import@zpoolnamehere "
echo "...and it should not hold up the reboot anymore"
echo "- Also remove anything from /etc/fstab that exists on the host but not in-vm"
2024-04-19 12:29:25 -06:00
exit;
2024-04-20 17:52:27 -06:00
# 2024.0420 kneutron
=======================================
Full restore instructions:
2024-05-08 11:32:39 -06:00
Run the Proxmox installer from ISO / USB and recreate the LVM + ext4 root FS with appropriate disk size
2024-04-20 17:52:27 -06:00
Boot systemrescuecd
cd /tmp
Fire up ' mc ' Midnight Commander
Tab to right pane, Esc+9 (or F9) and SFTP to where your .fsa backup file(s) are
SCP the appropriate restore script (EFI or NO-EFI) over to local /tmp and ' chmod +x ' it
EDIT THIS SCRIPT (look for EDITME) and change the appropriate values to match your restore environnment
You may run into an issue with systemrescuecd where you cannot save over the original file;
in that case you can save it under another name or delete it from another TTY and save it again
but you will have to redo the ' chmod +x ' on it
Follow the sshfs HOWTO in the comment at the beginning of this script to mount your backup file storage
cd /mnt/restore
/tmp/$0 backupfilename.fsa # Start the restore
2024-04-19 12:29:25 -06:00
2024-04-20 17:52:27 -06:00
From here you can still ' chroot ' into the /mnt/tmp2 dir and disable zfs imports, edit /etc/fstab, et al
Shutdown, remove rescue media and it should reboot into Proxmox VE
If not, boot Super Grub Disc and that should do it
Once you have a PVE login prompt, you can login as root and reinstall grub
' grub-install /dev/blah '
and then do a test reboot to make sure everything comes up as expected.
=======================================
2024-05-08 11:32:39 -06:00
2024-04-20 17:52:27 -06:00
2024.0420 Tested, works OK with proxmox no-efi
2024-04-19 12:29:25 -06:00
2017.0827 Tested, works OK