From 526b12fd710946bcbcc2087ffb566fa5be7f44e9 Mon Sep 17 00:00:00 2001 From: kneutron <50146127+kneutron@users.noreply.github.com> Date: Sun, 11 Apr 2021 00:19:56 -0500 Subject: [PATCH] Add files via upload --- VIRTBOX/BKPDEST.mrg | 29 ++++++++ VIRTBOX/bkpcrit.sh | 135 +++++++++++++++++++++++++++++++++++ VIRTBOX/bkphome.sh | 48 +++++++++++++ VIRTBOX/bkpsys-2fsarchive.sh | 75 +++++++++++++++++++ VIRTBOX/flist.sh | 74 +++++++++++++++++++ 5 files changed, 361 insertions(+) create mode 100644 VIRTBOX/BKPDEST.mrg create mode 100644 VIRTBOX/bkpcrit.sh create mode 100644 VIRTBOX/bkphome.sh create mode 100644 VIRTBOX/bkpsys-2fsarchive.sh create mode 100644 VIRTBOX/flist.sh diff --git a/VIRTBOX/BKPDEST.mrg b/VIRTBOX/BKPDEST.mrg new file mode 100644 index 0000000..2095111 --- /dev/null +++ b/VIRTBOX/BKPDEST.mrg @@ -0,0 +1,29 @@ +# bash - this defines where backup tars, etc will be stored +# this lives in /root/bin/boojum - multiple scripts look for it there and source it, so dont do 'exit' at end + +#export bkpdest=/mnt/milterausb3 +# if calling script has an override, we still provide value by checking for mount +#[ "$bkpdest" = "" ] && export bkpdest=/mnt/imacdual +#[ "$bkpdest" = "" ] && export bkpdest=/mnt/imac5 ## shared drive +[ "$bkpdest" = "" ] && export bkpdest=/zsg25lap1 +# xxx TODO EDITME - should not be same disk as root! + +[ $(echo $bkpdest |grep -c "/mnt/") -gt 0 ] && mount $bkpdest # mount if not ZFS! +[ $(echo $bkpdest |grep -c "/media/") -gt 0 ] && mount $bkpdest # mount if not ZFS! + +# from failexit.mrg +function failexit () { + echo '! Something failed! Code: '"$1 $2" # code # (and optional description) + exit $1 +} + + +[ -e "$bkpdest/NOTHERE" ] && failexit 99 "$bkpdest NOTHERE -- NOT MOUNTED" +# "If" checking for NOTHERE file under non-mounted dir... 0ldsk00l hax + +chkmount=$(df |grep -c $bkpdest) +[ $chkmount -gt 0 ] || failexit 99 "$bkpdest NOT MOUNTED" + +# NOTE code 199 is generally could not cd to dir + +export myhn=$(hostname) diff --git a/VIRTBOX/bkpcrit.sh b/VIRTBOX/bkpcrit.sh new file mode 100644 index 0000000..1c9d18a --- /dev/null +++ b/VIRTBOX/bkpcrit.sh @@ -0,0 +1,135 @@ +#!/bin/bash +# Backup critical files (hopefully) + +# Highly recommended to run this before doing ANY system updates/upgrades +# NOTE - BKPCRIT DESTINATION SHOULD NOT BE ON THE SAME DISK AS ROOT!! +# DEPENDS: lzop + +#fixresolvconf + +# xxx TODO EDITME +primaryuser=dave + +source /root/bin/boojum/BKPDEST.mrg # now provides mount test +drive=$bkpdest/notshrcompr + +# xxx TODO - set 1 if dest is ZFS compressed (lz4,zstd) +comprdest=0 +if [ "$comprdest" = "1" ]; then + taropts="-cpf "; tarsfx="tar" +else +# taropts="--use-compress-program lzop -cpf " + taropts="--lzop -cpf "; tarsfx="tar.lzop" +fi + +rootpartn=$(df / |tail -n 1 |awk '{print $1}') # /dev/sde1 +rootpedit=$(echo ${rootpartn##*/}) # strip off beginning, and last slash: sde1 +#dest="$drive/bkpcrit-$myhn--linux-xubuntu1404LTS-64--sdX1" +#dest="$drive/notshrcompr/bkpcrit-$myhn--fryserver--linux-xubuntu1404LTS-64--$rootpedit" #sdX1" +dest="$drive/bkpcrit-$myhn--linux-antix-64--$rootpedit" #sdX1 # xxx TODO EDITME +echo $dest # = PK +#read + +mkdir -pv $dest +chmod 750 $dest # drwxr-x--- + +tdate=$(date +%Y%m%d) # 19990909 + +# Copy this bkp script to bkpdest +cp -v $0 $dest +cp -v ~/localinfo.dat $dest +[ -e /etc/inittab ] && cp -v /etc/inittab $dest +cp -v /etc/fstab $dest +cp -v /tmp/smartctl.txt $dest +cp -v /tmp/fdisk-l.txt $dest/fdisk-l-$tdate.txt + +echo 'o Clearing old files' + # !! find bkp-gz, bkp-bz2 and flist files more than ~2 weeks old and delete + cd $dest && \ + find $dest/* \( -name "*.txt" -o -name "flist*" \) -type f -mtime +15 -exec /bin/rm -v {} \; +# find $dest/* \( -name "*.txt" -o -name "bkp*bz2" -o -name "flist*" \) -type f -mtime +20 -exec /bin/rm -v {} \; + + +# document system state +mount |egrep -v 'tmpfs|cgroup' |column -t >> $dest/fdisk-l-$tdate.txt # xxx 2017.0218 +df -hT > $dest/df-h.txt # added 2016.april +df -T -x{tmpfs,usbfs} > $dest/df-$tdate.txt # nice to have non-h df as well + +# removed 2016.0319, not using lvm +#vgdisplay -v > $dest/vgdisplay-v-$tdate.txt + +# xxx TODO editme +distro="debian" +tar $taropts $dest/bkp-boot-$distro.$tarsfx /boot + +tar $taropts $dest/bkp-ETC-$distro.$tarsfx /etc + +tar $taropts $dest/bkp-NXETC-$distro.$tarsfx /usr/NX/etc +tar $taropts $dest/bkp-NXSHARE-$distro.$tarsfx /usr/NX/share +tar $taropts $dest/bkp-NXVAR-$distro.$tarsfx /usr/NX/var + +tar $taropts $dest/bkp-DEV-$distro.$tarsfx /dev + +tar $taropts $dest/bkp-root-$distro.$tarsfx /root + +tar $taropts $dest/bkp-usr-local-bin-$distro.$tarsfx /usr/local/bin + +tar $taropts $dest/bkp-var-dpkg-status.$tarsfx /var/lib/dpkg +tar $taropts $dest/bkp-var-dpkg-backups.$tarsfx /var/backups +tar $taropts $dest/bkp-var-cache-apt-backups.$tarsfx /var/cache/apt + +tar $taropts $dest/bkp-$primaryuser-src.$tarsfx /home/$primaryuser/src +tar $taropts $dest/bkp-$primaryuser-bin.$tarsfx /home/$primaryuser-/bin + + +# Dotfiles +#cd /root +#tar cpvzf $dest/bkp-root-dotfiles--restore-locally$tarsfx .[^.]* + +# thunderbird is just email, goes in bkphome +# NOTE - to see size of hidden dirs: du -hs .[^.]* # REF: http://superuser.com/questions/342448/du-command-does-not-parse-hidden-directories +cd /home/$primaryuser + +# --exclude='.thunderbird' \ +tar \ + --exclude='.kde/share/thumbnails' \ + --exclude='.kde/share/cache' \ + --exclude=".pan/*" \ + --exclude='.gqview/thumbnails' \ + --exclude='.thumbnails' \ + --exclude='.opera/cache4' \ + --exclude='.opera/thumbnails' \ + --exclude=".cache/*" \ + --exclude=".mozilla/firefox/*" \ + --exclude=".moonchild productions/pale moon/*" \ + --exclude='..' \ + $taropts $dest/bkp-$primaryuser-dotfiles--restore-locally.$tarsfx .[^.]* + +# --exclude=".mozilla/firefox/*.default/Cache*" \ + +#sync + +ls $dest -alh +df -h $drive +echo $dest +echo "$(date) - $0 done" + +exit; + +Copyright (C) 1999, 2000 and beyond David J Bechtel + +This program is free software; you can redistribute it and/or +modify it under the terms of the GNU General Public License +as published by the Free Software Foundation; either version 2 +of the License, or (at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program; if not, write to the Free Software +Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + + The GNU Copyleft
diff --git a/VIRTBOX/bkphome.sh b/VIRTBOX/bkphome.sh new file mode 100644 index 0000000..6284b8f --- /dev/null +++ b/VIRTBOX/bkphome.sh @@ -0,0 +1,48 @@ +#!/bin/bash + +# DEPENDS: pv, tar, flist.sh, /root/bin/boojum/BKPDEST.mrg (up to date with valid destination dir) + +source /root/bin/boojum/BKPDEST.mrg # now provides mount test +bkpath=$bkpdest/notshrcompr + +pathh="$bkpath/bkp-home" +mkdir -p -v $pathh +cd $pathh || failexit 199 "! Could not CD to $pathh"; +ls -lh + +bkpdate=$(date +%Y%m%d) +bkpfname="bkp-home--$myhn--NORZ--$bkpdate" + +# free up some space 1st +# http://bashshell.net/utilities/find-with-multiple-expressions/ +# find with OR == works + +#cd $pathh && find $pathh/* -type f -mtime +28 -exec rm {} \; +# !! find bkp-gz and flist files more than 20 days old and delete +# SKIP, shared dir with multiple home sources +#echo 'o Autocleaning old bkps for free space' +#cd $pathh && \ +# find $pathh/* \( -name "bkp*gz" -o -name "bkp*bz2" -o -name "bkp*lzop" -o -name "flist*" \) -type f -mtime +20 -exec /bin/rm -v {} \; + +echo "==Backing up HOME to $pathh" +df -hT /home $bkpdest + +# comprdest +time tar \ + -cpf - /home/* \ + | pv -t -r -b -W -i 2 -B 50M \ + > $bkpfname.tar +# | lzop \ +# > $bkpfname.tar.lzop + +# -cpf - /home/* |gzip -2 > $bkpfname.tar1.gz + +ls -lh + +#echo $pathh +#time sync + +flist.sh & +#time tar tzvf $bkpfname.tar1.gz > flist--$bkpfname.txt & +pwd +echo "$0 done - $(date)" diff --git a/VIRTBOX/bkpsys-2fsarchive.sh b/VIRTBOX/bkpsys-2fsarchive.sh new file mode 100644 index 0000000..8cd2edc --- /dev/null +++ b/VIRTBOX/bkpsys-2fsarchive.sh @@ -0,0 +1,75 @@ +#!/bin/bash + +# Intention: bare-metal backup and restore linux running system (root), quite handy for restoring to VM +# REF: http://crunchbang.org/forums/viewtopic.php?id=24268 + +# DEPENDS: fsarchiver, /root/bin/boojum/BKPDEST.mrg (up to date with a valid destination dir) + +# NOTE define a PATH here if you want to run from CRON +# NOTE if you're running stuff like mysql or anything making live updates, you should stop the related service + +keepdays=31 + +rootdev=$(df / |grep /dev |awk '{print $1}') +bkpdate=$(date +%Y%m%d) + +# xxx TODO EDITME vv edit BKPDEST to define your backup destination dir before running this +source /root/bin/boojum/BKPDEST.mrg # now provides mount test +dest=$bkpdest/notshrcompr + +ddir=$dest/bkpsys-$myhn +mkdir -pv $ddir +chmod 750 $ddir # drwxr-x--- +cd $ddir || failexit 199 "! Could not CD to $ddir" + +# need shorter filename for UDF restores 2017.0827 +#outfile=bkpsys--p2300m-dell-1550-studio--backup-root-sda6--antix16-64--debian-no-systemd--1tb-drive--$bkpdate-fsarc1.fsa +outfile="bkpsys-$myhn-64-debstable10-$bkpdate-fsarc-ZSTD.fsa" +# xxx TODO ^^ EDITME + +cp -v /tmp/fdisk-l.txt $ddir +cp -v /tmp/smartctl.txt $ddir +cp -v $0 $ddir +cp -v ~/bin/boojum/RESTORE-fsarchive-root.sh $ddir +# copy restore script to backup dir, goes with mkrestoredvdiso.sh + +# NOTE autoclean !! find bkps and flist files more than XX days old and delete +cd $ddir && \ + find $ddir/* \( -name "bkp*fsa" -o -name "flist*" \) -type f -mtime +$keepdays -exec /bin/rm -v {} \; + +echo "o $0 - backing up ROOT" +df -hT / $dest +date +numproc=$(nproc --ignore=1) +#time fsarchiver -v -o -A -z 1 -j 2 savefs \ +# NOTE older / LTS distros may need to use lower-case -z since the package ver may not support zstd +time fsarchiver -o -A -Z 1 -j $numproc savefs \ + $ddir/$outfile \ + $rootdev + +cd $ddir +fsarchiver archinfo $outfile 2> flist--$outfile.txt + +ls -lh $ddir/* +echo "$(date) - $0 done" + +exit; + + +NOTE this script does NOT cover zfs-as-root on linux! +run bkpcrit.sh for that before doing any update/upgrades + +HOWTO restore: +# time fsarchiver restfs backup-root-sda1--fryserver--ubuntu1404-*-fsarc1.fsa id=0,dest=/dev/sdf1 +Statistics for filesystem 0 +* files successfully processed:....regfiles=159387, directories=25579, symlinks=49276, hardlinks=25, specials=108 +* files with errors:...............regfiles=0, directories=0, symlinks=0, hardlinks=0, specials=0 +real 4m26.116s +( 3.9GB ) + +PROTIP fsarchiver can restore to a different filesystem OTF such as xfs, should Just Work as long as you edit fstab + after restore (make sure no filesystem-specific mount options such as {commit,errors=remount-ro}; + + changing ext4 to auto may also work) + and before booting restored system / VM + +NOTE if you have a separate /home (and you should) you will need to restore that as well into the VM b4 booting it diff --git a/VIRTBOX/flist.sh b/VIRTBOX/flist.sh new file mode 100644 index 0000000..cb1c8ec --- /dev/null +++ b/VIRTBOX/flist.sh @@ -0,0 +1,74 @@ +#!/bin/bash + +# Go thru .tar.gz, .tar.bz2 in dir and list them to flist-file +# This generally lives in /usr/local/bin since non-root can call it +# DEPENDS: gzip, bzip2, lzop, tar + +function process () { + args=$* + echo $args + +# if doing rezip, renice bzip2 +renice +1 $(pidof bzip2) 2>/dev/null + +# Preserve existing output + if [ -e "flist--$bn.txt" ]; then + echo "* Skipped $bn" + else + time $compr -cd $args |tar tvf - > flist--$bn.txt + fi +} + +# If compare string not match any actual filename, move on +for i in *.tar.gz; do + [ "$i" == "*.tar.gz" ] && break; + bn=`basename $i .tar.gz` + compr=gzip + process $i +done + +for i in *.tar1.gz; do + [ "$i" == "*.tar1.gz" ] && break; + bn=`basename $i .tar1.gz` + compr=gzip + process $i +done + +for i in *.tgz; do + [ "$i" == "*.tgz" ] && break; + bn=`basename $i .tgz` + compr=gzip + process $i +done + +for i in *.tar.bz2; do + [ "$i" == "*.tar.bz2" ] && break; + bn=`basename $i .tar.bz2` + compr=bzip2 + process $i +done + +for i in *.tar.lzop; do + [ "$i" == "*.tar.lzop" ] && break; + bn=`basename $i .tar.lzop` + compr=lzop + process $i +done + +for i in *.tar1.lzop; do + [ "$i" == "*.tar1.lzop" ] && break; + bn=`basename $i .tar1.lzop` + compr=lzop + process $i +done + +for i in *.tar; do + [ "$i" == "*.tar" ] && break; + bn=`basename $i .tar` + compr="" +# process $i + time tar tvf $i > flist--$bn.txt +done + +# TODO zstd +# 2014(?)-2021 Dave Bechtel