From 657580b76655947f89baa170d894ba3a480d1323 Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 17 Nov 2023 15:54:52 +0100 Subject: [PATCH 01/39] Create pbs-zfs-daily.sh First Draft --- pbs-zfs-daily.sh | 81 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 pbs-zfs-daily.sh diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh new file mode 100644 index 0000000..133c372 --- /dev/null +++ b/pbs-zfs-daily.sh @@ -0,0 +1,81 @@ +#!/bin/sh + +#Requirements for Myiagi ultimate Backup +## Proxmox Source Host, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE + +SOURCEHOST='192.168.0.241' # IP from Proxmox VE System to be backuped and replicated daily +SOURCEHOSTNAME='PVE' #Hostname of Proxmox VE System to be backuped and replicated daily +ZFSKEEP='10' # How many Snapshots to be kept, suggested 10 Days + +ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily +ZFSTRGT='rpool/repl' #This pulling Machines Target ZFS Sourcepath +ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily +ZPOOLDST=rpool #This pulling Machines Pool/Tank + + +PBSHOST='192.168.0.171' #IP from your Proxmox Backupserver +BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily +BACKUPEXCLUDE='103,104,109,110' #Machines to be excluded from Proxmox Backup + +SSHPORT='22' #SSH Port, usually default 22 internally +SCRIPTPATH=/usr/bin #Location of bashclub-zfs Tool - https://raw.githubusercontent.com/bashclub/bashclub-zfs-push-pull/master/bashclub-zfs + + +MAINTDAY=7 + +SOURCEALL=$(ssh -p$SSHPORT root@$SOURCEHOST 'for src in $(zfs list -H -o name |grep '"$ZFSROOT"'/|grep -v alt|grep -v state|grep -v disk-9); do echo ${src##*/}; done') #determines Source Datasets without 'alt, state and disk-9' in Name - Those are typlically not replicated +echo '' +echo Pulling Replicas from $SOURCEHOST following Datasets/ZVOLS $SOURCEALL +echo '' +for DATA in $SOURCEALL +do + $SCRIPTPATH/bashclub-zfs -I -R -p $SSHPORT -k $ZFSKEEP -v $SOURCEHOST:$ZFSROOT/$DATA $ZFSTRGT #for debugging add an echo at the Beginning of this line +done +### + +# So one Day has 1440 Minutes, so we go condition Yellow on 1500 +/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter $ZFSTRGT/ --filter $ZFSROOT/ --threshold 1500,2000 --output checkmk --prefix pullrepl > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs + +scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool + + +### + +if [ "$DOW" == $MAINTDAY ]; then + echo "MAINTENANCE" + + #ssh root@PBSHOST proxmox-backup-manager garbage-collection start (wrong command) + + +else + echo "Today no Maintenance" +fi + + + ssh root@$SOURCEHOST zpool scrub -s $ZPOOLSRC + zpool scrub -s $ZPOOLDST + + ssh root@$SOURCEHOST pvesm set $BACKUPSTORE --disable 0 + +### one Day is 86400 Seconds, so we going Condition grey if no new Status File will be pushed + +ssh root@$SOURCEHOST vzdump --node $SOURCEHOSTNAME --storage $BACKUPSTORE --exclude $BACKUPEXCLUDE --mode snapshot --all 1 --notes-template '{{guestname}}' + +if [ $? -eq 0 ]; then + echo command returned 0 is good + echo 0 "DailyPBS" - Daily Backup > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkpbs +else + echo command returned other not good + echo 2 "DailyPBS" - Daily Backup > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkpbs + +fi + +scp /tmp/90000_checkpbs root@SOURCEHOST:/var/lib/check_mk_agent/spool + + +### + + ssh root@$PBSHOST proxmox-backup-manager verify backup + ssh root@$SOURCEHOST pvesm set backup --disable 1 + +#shutdown now From 3f29e5a355cccd86d547f4bdf1c5512194eaf57c Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 17 Nov 2023 15:56:54 +0100 Subject: [PATCH 02/39] Update pbs-zfs-daily.sh Added Auto-Snapshot to protect Backups --- pbs-zfs-daily.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 133c372..aa44f97 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -1,7 +1,7 @@ #!/bin/sh #Requirements for Myiagi ultimate Backup -## Proxmox Source Host, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE +## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE SOURCEHOST='192.168.0.241' # IP from Proxmox VE System to be backuped and replicated daily SOURCEHOSTNAME='PVE' #Hostname of Proxmox VE System to be backuped and replicated daily @@ -77,5 +77,7 @@ scp /tmp/90000_checkpbs root@SOURCEHOST:/var/lib/check_mk_agent/spool ssh root@$PBSHOST proxmox-backup-manager verify backup ssh root@$SOURCEHOST pvesm set backup --disable 1 + +/etc/cron.daily/zfs-auto-snapshot #shutdown now From af0d0eb28a08a9669bdfc022105199c4e8824a1c Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 17 Nov 2023 16:13:02 +0100 Subject: [PATCH 03/39] Update README.md --- README.md | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/README.md b/README.md index 040de53..7f85682 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,27 @@ # miyagi-pbs-zfs Secure Proxmox PVE with Proxmox Backup Server PBS and ZFS Pull Replication with a mostly turned off System + +What it does +Miyagi says, best Defense, not be present + +Proxmox Backupserver is running unnecessarly 24/7 +ZFS Replication is usually done by a zfs send, so its a push + +What if our Backup/Replicaserver is turned off most the time, nobody can attack it + +Consider not using a Gateway, use Routes! + +What we do... + +Turning on the Computer with a @reboot Cron +Pulling all Datasets with ZFS +Reporting ZFS Replication with 100% certainty to backuped PVE Host using Check_MK and checkzfs.py from #bashclub + +Regarding to the Weekday doing Maintenance on Proxmox Backup Server for getting Space +Triggering a Push (only Way to do) Backup to PBS and checking Exitcode for Report +Reporting PBS Result with 100% certainty in compact OK/WARN State to backuped PVE Host using Check_MK + +Verifying older Backups +Protecting the PBS Backups with a ZFS Snapshot + +TURNING OFF THE MACHINE!!! From e2865080e526d1dcac10d08d25c3a23deaaf2a1f Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 17 Nov 2023 17:48:27 +0100 Subject: [PATCH 04/39] Update README.md Added ToDos --- README.md | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/README.md b/README.md index 7f85682..ac59f9b 100644 --- a/README.md +++ b/README.md @@ -25,3 +25,12 @@ Verifying older Backups Protecting the PBS Backups with a ZFS Snapshot TURNING OFF THE MACHINE!!! + + +ToDo: + +Prio1: Replace bashclub-zfs with bashclub-zsync:) +Test Targets Tank if less than 75% free, otherwise report to Check_MK +Test Disks after PBS Maintenance, before shutdown with SmartCTL Short Test and report to Check_MK +Support multiple Sources +Move Env Variables to Config File From 9c71e733c8ac7e09211948e2c2c6b4aca5321a59 Mon Sep 17 00:00:00 2001 From: Chriz Date: Sun, 19 Nov 2023 21:31:43 +0100 Subject: [PATCH 05/39] Update pbs-zfs-daily.sh Added Garbage Collection and Prune, still manual determine of Prund ID --- pbs-zfs-daily.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index aa44f97..1a0534b 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -16,6 +16,7 @@ ZPOOLDST=rpool #This pulling Machines Pool/Tank PBSHOST='192.168.0.171' #IP from your Proxmox Backupserver BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily BACKUPEXCLUDE='103,104,109,110' #Machines to be excluded from Proxmox Backup +PRUNEJOB='s-88c45b79-77a4' #proxmox-backup-manager prune-job list SSHPORT='22' #SSH Port, usually default 22 internally SCRIPTPATH=/usr/bin #Location of bashclub-zfs Tool - https://raw.githubusercontent.com/bashclub/bashclub-zfs-push-pull/master/bashclub-zfs @@ -44,8 +45,8 @@ scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool if [ "$DOW" == $MAINTDAY ]; then echo "MAINTENANCE" - #ssh root@PBSHOST proxmox-backup-manager garbage-collection start (wrong command) - + ssh root@PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTORE + ssh root@PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB else echo "Today no Maintenance" @@ -80,4 +81,8 @@ scp /tmp/90000_checkpbs root@SOURCEHOST:/var/lib/check_mk_agent/spool /etc/cron.daily/zfs-auto-snapshot +#doing updates without regeret + +apt dist-upgrade -y + #shutdown now From 090cb5e59fe828acfda48172ab36f1ac71a4e822 Mon Sep 17 00:00:00 2001 From: Chriz Date: Sun, 19 Nov 2023 21:42:56 +0100 Subject: [PATCH 06/39] Update pbs-zfs-daily.sh Ordered Tasks --- pbs-zfs-daily.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 1a0534b..58c7791 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -47,6 +47,7 @@ if [ "$DOW" == $MAINTDAY ]; then ssh root@PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTORE ssh root@PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB + ssh root@$PBSHOST proxmox-backup-manager verify backup else echo "Today no Maintenance" @@ -76,9 +77,8 @@ scp /tmp/90000_checkpbs root@SOURCEHOST:/var/lib/check_mk_agent/spool ### - ssh root@$PBSHOST proxmox-backup-manager verify backup ssh root@$SOURCEHOST pvesm set backup --disable 1 - + /etc/cron.daily/zfs-auto-snapshot #doing updates without regeret From a1ca9fee17f24fb2a3b2a6b48ae899ab75219042 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 20 Nov 2023 15:32:24 +0100 Subject: [PATCH 07/39] Update pbs-zfs-daily.sh Prunejob auto Detect --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 58c7791..746b66b 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -16,7 +16,7 @@ ZPOOLDST=rpool #This pulling Machines Pool/Tank PBSHOST='192.168.0.171' #IP from your Proxmox Backupserver BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily BACKUPEXCLUDE='103,104,109,110' #Machines to be excluded from Proxmox Backup -PRUNEJOB='s-88c45b79-77a4' #proxmox-backup-manager prune-job list +PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) SSHPORT='22' #SSH Port, usually default 22 internally SCRIPTPATH=/usr/bin #Location of bashclub-zfs Tool - https://raw.githubusercontent.com/bashclub/bashclub-zfs-push-pull/master/bashclub-zfs From de6a91c619bca157d96af6b0c72534d8eeaed252 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 20 Nov 2023 18:30:50 +0100 Subject: [PATCH 08/39] Update pbs-zfs-daily.sh Debuggings from sysops.tv vlogger logic live shop today --- pbs-zfs-daily.sh | 33 +++++++++++++++++---------------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 746b66b..8f030ec 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -1,10 +1,10 @@ -#!/bin/sh +#!/bin/bash #Requirements for Myiagi ultimate Backup ## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE SOURCEHOST='192.168.0.241' # IP from Proxmox VE System to be backuped and replicated daily -SOURCEHOSTNAME='PVE' #Hostname of Proxmox VE System to be backuped and replicated daily +SOURCEHOSTNAME='pve' #Hostname of Proxmox VE System to be backuped and replicated daily ZFSKEEP='10' # How many Snapshots to be kept, suggested 10 Days ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily @@ -14,15 +14,15 @@ ZPOOLDST=rpool #This pulling Machines Pool/Tank PBSHOST='192.168.0.171' #IP from your Proxmox Backupserver -BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily -BACKUPEXCLUDE='103,104,109,110' #Machines to be excluded from Proxmox Backup +BACKUPSTORE=backup241 #Datastorename configured in your Proxmox VE System to be backuped and replicated daily +BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server +BACKUPEXCLUDE='999' #Machines to be excluded from Proxmox Backup PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) SSHPORT='22' #SSH Port, usually default 22 internally SCRIPTPATH=/usr/bin #Location of bashclub-zfs Tool - https://raw.githubusercontent.com/bashclub/bashclub-zfs-push-pull/master/bashclub-zfs - -MAINTDAY=7 +MAINTDAY=0 SOURCEALL=$(ssh -p$SSHPORT root@$SOURCEHOST 'for src in $(zfs list -H -o name |grep '"$ZFSROOT"'/|grep -v alt|grep -v state|grep -v disk-9); do echo ${src##*/}; done') #determines Source Datasets without 'alt, state and disk-9' in Name - Those are typlically not replicated echo '' @@ -30,7 +30,7 @@ echo Pulling Replicas from $SOURCEHOST following Datasets/ZVOLS $SOURCEALL echo '' for DATA in $SOURCEALL do - $SCRIPTPATH/bashclub-zfs -I -R -p $SSHPORT -k $ZFSKEEP -v $SOURCEHOST:$ZFSROOT/$DATA $ZFSTRGT #for debugging add an echo at the Beginning of this line + $SCRIPTPATH/bashclub-zfs -p $SSHPORT -k $ZFSKEEP -v $SOURCEHOST:$ZFSROOT/$DATA $ZFSTRGT #for debugging add an echo at the Beginning of this line done ### @@ -42,12 +42,14 @@ scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool ### -if [ "$DOW" == $MAINTDAY ]; then - echo "MAINTENANCE" - ssh root@PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTORE - ssh root@PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB - ssh root@$PBSHOST proxmox-backup-manager verify backup + if [ $(date +%u) == $MAINTDAY ]; then + echo "MAINTENANCE" + + ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS + ssh root@$PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB + #optional delete all zfs-auto-snapshots + ssh root@$PBSHOST proxmox-backup-manager verify backup else echo "Today no Maintenance" @@ -72,14 +74,13 @@ else fi -scp /tmp/90000_checkpbs root@SOURCEHOST:/var/lib/check_mk_agent/spool - +scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool ### - ssh root@$SOURCEHOST pvesm set backup --disable 1 + ssh root@$SOURCEHOST pvesm set $BACKUPSTORE --disable 1 -/etc/cron.daily/zfs-auto-snapshot +/etc/cron.daily/zfs-auto-snapshot #protecting all Datasets/ZVOLs except the Replicas with daily Snaps #doing updates without regeret From b1248c4a32b2e67102867fc8ba448a04258650b0 Mon Sep 17 00:00:00 2001 From: Chriz Date: Wed, 24 Jan 2024 21:49:54 +0100 Subject: [PATCH 09/39] Update pbs-zfs-daily.sh Now with Bashclub ZSYNC --- pbs-zfs-daily.sh | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 8f030ec..4a5fffc 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -3,18 +3,21 @@ #Requirements for Myiagi ultimate Backup ## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE -SOURCEHOST='192.168.0.241' # IP from Proxmox VE System to be backuped and replicated daily -SOURCEHOSTNAME='pve' #Hostname of Proxmox VE System to be backuped and replicated daily -ZFSKEEP='10' # How many Snapshots to be kept, suggested 10 Days +SOURCEHOST='192.168.1.20' # IP from Proxmox VE System to be backuped and replicated daily +SOURCEHOSTNAME='pve20' #Hostname of Proxmox VE System to be backuped and replicated daily ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily ZFSTRGT='rpool/repl' #This pulling Machines Target ZFS Sourcepath ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily ZPOOLDST=rpool #This pulling Machines Pool/Tank +ZPUSHTAG=bashclub:zsync +ZPUSHMINKEEP=3 +ZPUSHKEEP=14 +ZPUSHLABEL=zsync-30 +ZPUSHFILTER="\"monthly|daily\"" #zpushlabel kommt automatisch mit - -PBSHOST='192.168.0.171' #IP from your Proxmox Backupserver -BACKUPSTORE=backup241 #Datastorename configured in your Proxmox VE System to be backuped and replicated daily +PBSHOST='192.168.1.16' #IP from your Proxmox Backupserver +BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server BACKUPEXCLUDE='999' #Machines to be excluded from Proxmox Backup PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) @@ -24,15 +27,19 @@ SCRIPTPATH=/usr/bin #Location of bashclub-zfs Tool - https://raw.githubuserconte MAINTDAY=0 -SOURCEALL=$(ssh -p$SSHPORT root@$SOURCEHOST 'for src in $(zfs list -H -o name |grep '"$ZFSROOT"'/|grep -v alt|grep -v state|grep -v disk-9); do echo ${src##*/}; done') #determines Source Datasets without 'alt, state and disk-9' in Name - Those are typlically not replicated -echo '' -echo Pulling Replicas from $SOURCEHOST following Datasets/ZVOLS $SOURCEALL -echo '' -for DATA in $SOURCEALL -do - $SCRIPTPATH/bashclub-zfs -p $SSHPORT -k $ZFSKEEP -v $SOURCEHOST:$ZFSROOT/$DATA $ZFSTRGT #for debugging add an echo at the Beginning of this line -done -### +# ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT +# Schleife für Excludes +echo "target=rpool/repl" > /etc/bashclub/$SOURCEHOST.conf +echo "source=root@$SOURCEHOST" >> /etc/bashclub/$SOURCEHOST.conf +echo "sshport=$SSHPORT" >> /etc/bashclub/$SOURCEHOST.conf +echo "tag=$ZPUSHTAG" >> /etc/bashclub/$SOURCEHOST.conf +echo "snapshot_filter=$ZPUSHFILTER" >> /etc/bashclub/$SOURCEHOST.conf +echo "min_keep=$ZPUSHMINKEEP" >> /etc/bashclub/$SOURCEHOST.conf +echo "zfs_auto_snapshot_keep=$ZPUSHKEEP" >> /etc/bashclub/$SOURCEHOST.conf +echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf + + +/usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 /usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter $ZFSTRGT/ --filter $ZFSROOT/ --threshold 1500,2000 --output checkmk --prefix pullrepl > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs From 13dbf8e04a72a77932c29181a49f0a12d29bd0c5 Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 25 Jan 2024 16:27:51 +0100 Subject: [PATCH 10/39] Update pbs-zfs-daily.sh Added Second Datastore, Loop for more variables up to come --- pbs-zfs-daily.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 4a5fffc..c6e5344 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -7,6 +7,7 @@ SOURCEHOST='192.168.1.20' # IP from Proxmox VE System to be backuped and replica SOURCEHOSTNAME='pve20' #Hostname of Proxmox VE System to be backuped and replicated daily ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily +ZFSSECOND='rpool-hdd/data' #Optional second Dataset ZFSTRGT='rpool/repl' #This pulling Machines Target ZFS Sourcepath ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily ZPOOLDST=rpool #This pulling Machines Pool/Tank @@ -42,11 +43,10 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf /usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 -/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter $ZFSTRGT/ --filter $ZFSROOT/ --threshold 1500,2000 --output checkmk --prefix pullrepl > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs +/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter $ZFSTRGT/ --filter "$ZFSROOT/|$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pullrepl > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool - ### @@ -91,6 +91,9 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool #doing updates without regeret + +#/root/02pull32nas ##PVE32 NAS Replika mit Report auf pve32 + apt dist-upgrade -y #shutdown now From 5a26c26a4f433d752c080880d4f12ba9b7796dd5 Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 25 Jan 2024 18:08:23 +0100 Subject: [PATCH 11/39] Update pbs-zfs-daily.sh Bugfix --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index c6e5344..cc6f12b 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -30,7 +30,7 @@ MAINTDAY=0 # ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT # Schleife für Excludes -echo "target=rpool/repl" > /etc/bashclub/$SOURCEHOST.conf +echo "target=$ZFSTRGT" > /etc/bashclub/$SOURCEHOST.conf echo "source=root@$SOURCEHOST" >> /etc/bashclub/$SOURCEHOST.conf echo "sshport=$SSHPORT" >> /etc/bashclub/$SOURCEHOST.conf echo "tag=$ZPUSHTAG" >> /etc/bashclub/$SOURCEHOST.conf From c2c87a8579d96b5d2cd12a35ea24b08c69f986d2 Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 26 Jan 2024 14:47:02 +0100 Subject: [PATCH 12/39] Update pbs-zfs-daily.sh Monitoring Tags --- pbs-zfs-daily.sh | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index cc6f12b..59c71f0 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -3,28 +3,27 @@ #Requirements for Myiagi ultimate Backup ## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE -SOURCEHOST='192.168.1.20' # IP from Proxmox VE System to be backuped and replicated daily -SOURCEHOSTNAME='pve20' #Hostname of Proxmox VE System to be backuped and replicated daily +SOURCEHOST='192.168.50.200' # IP from Proxmox VE System to be backuped and replicated daily +SOURCEHOSTNAME='pve3' #Hostname of Proxmox VE System to be backuped and replicated daily ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily ZFSSECOND='rpool-hdd/data' #Optional second Dataset -ZFSTRGT='rpool/repl' #This pulling Machines Target ZFS Sourcepath +ZFSTRGT='rpool-ssd1/200' #This pulling Machines Target ZFS Sourcepath ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily ZPOOLDST=rpool #This pulling Machines Pool/Tank ZPUSHTAG=bashclub:zsync ZPUSHMINKEEP=3 ZPUSHKEEP=14 -ZPUSHLABEL=zsync-30 -ZPUSHFILTER="\"monthly|daily\"" #zpushlabel kommt automatisch mit +ZPUSHLABEL=zsync-rz +ZPUSHFILTER="\"rz_pull|monthly|daily\"" #zpushlabel kommt automatisch mit -PBSHOST='192.168.1.16' #IP from your Proxmox Backupserver +PBSHOST='192.168.50.199' #IP from your Proxmox Backupserver BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server -BACKUPEXCLUDE='999' #Machines to be excluded from Proxmox Backup +BACKUPEXCLUDE='124,3021,3022,3023,3251,3252,3253,3254' #Machines to be excluded from Proxmox Backup PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) SSHPORT='22' #SSH Port, usually default 22 internally -SCRIPTPATH=/usr/bin #Location of bashclub-zfs Tool - https://raw.githubusercontent.com/bashclub/bashclub-zfs-push-pull/master/bashclub-zfs MAINTDAY=0 @@ -39,16 +38,15 @@ echo "min_keep=$ZPUSHMINKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_keep=$ZPUSHKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf - -/usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf +echo /usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 -/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter $ZFSTRGT/ --filter "$ZFSROOT/|$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pullrepl > /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs +/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname)> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool ### - +exit if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" From 1f45092ea9e2f85af5d6d603033a49fdd7f0b3eb Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 26 Jan 2024 14:55:57 +0100 Subject: [PATCH 13/39] Update pbs-zfs-daily.sh bugfix removed echo and exit for debugging --- pbs-zfs-daily.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 59c71f0..21d8f27 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -38,7 +38,7 @@ echo "min_keep=$ZPUSHMINKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_keep=$ZPUSHKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf -echo /usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf +/usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 /usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname)> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs @@ -46,7 +46,7 @@ echo /usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool ### -exit + if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" From b66f3a07391a22925162a89153ec92eb0a61d66a Mon Sep 17 00:00:00 2001 From: Chriz Date: Fri, 26 Jan 2024 19:26:44 +0100 Subject: [PATCH 14/39] Update pbs-zfs-daily.sh housekeeping --- pbs-zfs-daily.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 21d8f27..38217b7 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -89,9 +89,6 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool #doing updates without regeret - -#/root/02pull32nas ##PVE32 NAS Replika mit Report auf pve32 - apt dist-upgrade -y #shutdown now From f85ea33537d391cfdffe70fde49c6428fa2eafe5 Mon Sep 17 00:00:00 2001 From: Chriz Date: Sun, 4 Feb 2024 13:32:39 +0100 Subject: [PATCH 15/39] Update pbs-zfs-daily.sh Installs Zsync and Checkzfs Marking all for Zsync on Source --- pbs-zfs-daily.sh | 45 +++++++++++++++++++++++++++++---------------- 1 file changed, 29 insertions(+), 16 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 38217b7..6b74d7c 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -3,31 +3,44 @@ #Requirements for Myiagi ultimate Backup ## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE -SOURCEHOST='192.168.50.200' # IP from Proxmox VE System to be backuped and replicated daily -SOURCEHOSTNAME='pve3' #Hostname of Proxmox VE System to be backuped and replicated daily +# Install Requiered Bashclub CheckZFS +wget -O /usr/local/bin/checkzfs https://raw.githubusercontent.com/bashclub/check-zfs-replication/main/checkzfs.py +chmod +x /usr/local/bin/checkzfs -ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily -ZFSSECOND='rpool-hdd/data' #Optional second Dataset -ZFSTRGT='rpool-ssd1/200' #This pulling Machines Target ZFS Sourcepath -ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily -ZPOOLDST=rpool #This pulling Machines Pool/Tank -ZPUSHTAG=bashclub:zsync +# Install Requiered Bashclub Zsync +wget -q --no-cache -O /usr/bin/bashclub-zsync https://git.bashclub.org/bashclub/zsync/raw/branch/dev/bashclub-zsync/usr/bin/bashclub-zsync +chmod +x /usr/bin/bashclub-zsync + +SOURCEHOST='192.168.50.202' # IP from Proxmox VE System to be backuped and replicated daily +SOURCEHOSTNAME='pve4' #Hostname of Proxmox VE System to be backuped and replicated daily + +ZFSROOT='rpool-hdd/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily +ZFSSECOND='' #Optional second Dataset +ZFSTRGT='rpool-hdd/202' #This pulling Machines Target ZFS Sourcepath +ZPOOLSRC=rpool-hdd #First Pool/Tank from Proxmox VE System to be backuped and replicated daily +ZPOOLDST=rpool-hdd #This pulling Machines Pool/Tank +ZPUSHTAG=bashclub:zsync-198-hdd ZPUSHMINKEEP=3 ZPUSHKEEP=14 ZPUSHLABEL=zsync-rz -ZPUSHFILTER="\"rz_pull|monthly|daily\"" #zpushlabel kommt automatisch mit +ZPUSHFILTER="" #zpushlabel kommt automatisch mit PBSHOST='192.168.50.199' #IP from your Proxmox Backupserver BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server -BACKUPEXCLUDE='124,3021,3022,3023,3251,3252,3253,3254' #Machines to be excluded from Proxmox Backup +BACKUPEXCLUDE='99999' #Machines to be excluded from Proxmox Backup, must not be empty! +REPLEXCLUDE=$BACKUPEXCLUDE PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) SSHPORT='22' #SSH Port, usually default 22 internally MAINTDAY=0 -# ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT +#Mark Source for full Backup with Zsync + +ssh root@$SOURCEHOST zfs set $ZPUSHTAG=all $ZFSROOT +ssh root@$SOURCEHOST zfs set $ZPUSHTAG=all $ZFSSECOND + # Schleife für Excludes echo "target=$ZFSTRGT" > /etc/bashclub/$SOURCEHOST.conf echo "source=root@$SOURCEHOST" >> /etc/bashclub/$SOURCEHOST.conf @@ -41,13 +54,12 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf /usr/bin/bashclub-zsync -d -c /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 -/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname)> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs +/usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname):$ZPUSHTAG> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs -scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool +scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$SOURCEHOST_$ZPOOLSRC ### - if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" @@ -89,6 +101,7 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool #doing updates without regeret -apt dist-upgrade -y -#shutdown now +#/root/02pull32nas ##PVE32 NAS Replika mit Report auf pve32 + +apt dist-upgrade -y From dfc2729e3a265c080c91bcd45777cd1705315ddc Mon Sep 17 00:00:00 2001 From: Chriz Date: Sun, 4 Feb 2024 14:04:45 +0100 Subject: [PATCH 16/39] Update pbs-zfs-daily.sh Disable ZFS on Target --- pbs-zfs-daily.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 6b74d7c..2ba3a31 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -36,6 +36,10 @@ SSHPORT='22' #SSH Port, usually default 22 internally MAINTDAY=0 +#Disable ZFS Auto Snapshot on Destination + +zfs set com.sun:auto-snapshot=false $ZFSTRGT + #Mark Source for full Backup with Zsync ssh root@$SOURCEHOST zfs set $ZPUSHTAG=all $ZFSROOT From e37710faf3c36a6a95e82567138526d75d1e1943 Mon Sep 17 00:00:00 2001 From: Chriz Date: Tue, 6 Feb 2024 13:52:16 +0100 Subject: [PATCH 17/39] Update pbs-zfs-daily.sh Minor Changes --- pbs-zfs-daily.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 2ba3a31..fd1cae0 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -1,5 +1,7 @@ #!/bin/bash +apt update + #Requirements for Myiagi ultimate Backup ## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE @@ -38,6 +40,8 @@ MAINTDAY=0 #Disable ZFS Auto Snapshot on Destination +# ssh root@$SOURCEHOST apt install zfs-auto-snapshot #uncomment if you did not use our Postinstaller from github.com/bashclub and modify /etc/cron.xxx zfs-auto-snapshot Scripts, especially monthly rec. 12 to 3 Month + zfs set com.sun:auto-snapshot=false $ZFSTRGT #Mark Source for full Backup with Zsync From 4b8d2c9ce492eb4127568d3d3eac4ab6fb1fbf56 Mon Sep 17 00:00:00 2001 From: Chriz Date: Wed, 7 Feb 2024 17:11:02 +0100 Subject: [PATCH 18/39] Update pbs-zfs-daily.sh Esacped Filter ZSYNC --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index fd1cae0..d7a0581 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -54,7 +54,7 @@ echo "target=$ZFSTRGT" > /etc/bashclub/$SOURCEHOST.conf echo "source=root@$SOURCEHOST" >> /etc/bashclub/$SOURCEHOST.conf echo "sshport=$SSHPORT" >> /etc/bashclub/$SOURCEHOST.conf echo "tag=$ZPUSHTAG" >> /etc/bashclub/$SOURCEHOST.conf -echo "snapshot_filter=$ZPUSHFILTER" >> /etc/bashclub/$SOURCEHOST.conf +echo "snapshot_filter=\"$ZPUSHFILTER\"" >> /etc/bashclub/$SOURCEHOST.conf echo "min_keep=$ZPUSHMINKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_keep=$ZPUSHKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf From 31a855c25cf5907e189c06d9665366d9309c2001 Mon Sep 17 00:00:00 2001 From: Chriz Date: Wed, 7 Feb 2024 21:31:59 +0100 Subject: [PATCH 19/39] Update pbs-zfs-daily.sh Uneccesary Comment --- pbs-zfs-daily.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index d7a0581..8d9a9fc 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -110,6 +110,4 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool #doing updates without regeret -#/root/02pull32nas ##PVE32 NAS Replika mit Report auf pve32 - apt dist-upgrade -y From 66b1725d87957965d1d522589e334f0090249056 Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 8 Feb 2024 13:30:16 +0100 Subject: [PATCH 20/39] Update pbs-zfs-daily.sh More unique Spool Monitoring --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 8d9a9fc..bcb3c06 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -64,7 +64,7 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 /usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname):$ZPUSHTAG> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs -scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$SOURCEHOST_$ZPOOLSRC +scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs-$SOURCEHOSTNAME-$ZPOOLSRC ### From 266b9b072c01591908de75663d87f270a982cc0f Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 8 Feb 2024 13:41:34 +0100 Subject: [PATCH 21/39] Update pbs-zfs-daily.sh bugfix --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index bcb3c06..7879f67 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -64,7 +64,7 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 /usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname):$ZPUSHTAG> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs -scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs-$SOURCEHOSTNAME-$ZPOOLSRC +scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$(hostname)-${ZPOOLSRC} ### From a9d762d834dbc7f1c8f4f27c3d6581316135783b Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 18 Mar 2024 20:08:33 +0100 Subject: [PATCH 22/39] Update pbs-zfs-daily.sh prune first, gc second --- pbs-zfs-daily.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 7879f67..b48f528 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -71,8 +71,9 @@ scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" - ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS ssh root@$PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB + ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS + #optional delete all zfs-auto-snapshots ssh root@$PBSHOST proxmox-backup-manager verify backup From f24c53cad4e7f25825c37bbb09572d1c273b794b Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 21 Mar 2024 09:32:07 +0100 Subject: [PATCH 23/39] Major Update Now start with -c configfile for Variables Addred Shutdown and no Backup --- pbs-zfs-daily.sh | 71 +++++++++++++++--------------------------------- 1 file changed, 22 insertions(+), 49 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index b48f528..3626477 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -1,60 +1,28 @@ #!/bin/bash -apt update - #Requirements for Myiagi ultimate Backup ## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE -# Install Requiered Bashclub CheckZFS -wget -O /usr/local/bin/checkzfs https://raw.githubusercontent.com/bashclub/check-zfs-replication/main/checkzfs.py -chmod +x /usr/local/bin/checkzfs -# Install Requiered Bashclub Zsync -wget -q --no-cache -O /usr/bin/bashclub-zsync https://git.bashclub.org/bashclub/zsync/raw/branch/dev/bashclub-zsync/usr/bin/bashclub-zsync -chmod +x /usr/bin/bashclub-zsync +while getopts "c:" arg; do + case $arg in + c) + configfile=$OPTARG + echo $configfile + ;; +esac +done -SOURCEHOST='192.168.50.202' # IP from Proxmox VE System to be backuped and replicated daily -SOURCEHOSTNAME='pve4' #Hostname of Proxmox VE System to be backuped and replicated daily +source $PWD/$configfile -ZFSROOT='rpool-hdd/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily -ZFSSECOND='' #Optional second Dataset -ZFSTRGT='rpool-hdd/202' #This pulling Machines Target ZFS Sourcepath -ZPOOLSRC=rpool-hdd #First Pool/Tank from Proxmox VE System to be backuped and replicated daily -ZPOOLDST=rpool-hdd #This pulling Machines Pool/Tank -ZPUSHTAG=bashclub:zsync-198-hdd -ZPUSHMINKEEP=3 -ZPUSHKEEP=14 -ZPUSHLABEL=zsync-rz -ZPUSHFILTER="" #zpushlabel kommt automatisch mit - -PBSHOST='192.168.50.199' #IP from your Proxmox Backupserver -BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily -BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server -BACKUPEXCLUDE='99999' #Machines to be excluded from Proxmox Backup, must not be empty! -REPLEXCLUDE=$BACKUPEXCLUDE -PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) - -SSHPORT='22' #SSH Port, usually default 22 internally - -MAINTDAY=0 - -#Disable ZFS Auto Snapshot on Destination - -# ssh root@$SOURCEHOST apt install zfs-auto-snapshot #uncomment if you did not use our Postinstaller from github.com/bashclub and modify /etc/cron.xxx zfs-auto-snapshot Scripts, especially monthly rec. 12 to 3 Month - -zfs set com.sun:auto-snapshot=false $ZFSTRGT - -#Mark Source for full Backup with Zsync - -ssh root@$SOURCEHOST zfs set $ZPUSHTAG=all $ZFSROOT -ssh root@$SOURCEHOST zfs set $ZPUSHTAG=all $ZFSSECOND +# ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT # Schleife für Excludes echo "target=$ZFSTRGT" > /etc/bashclub/$SOURCEHOST.conf echo "source=root@$SOURCEHOST" >> /etc/bashclub/$SOURCEHOST.conf echo "sshport=$SSHPORT" >> /etc/bashclub/$SOURCEHOST.conf echo "tag=$ZPUSHTAG" >> /etc/bashclub/$SOURCEHOST.conf -echo "snapshot_filter=\"$ZPUSHFILTER\"" >> /etc/bashclub/$SOURCEHOST.conf +echo "snapshot_filter=$ZPUSHFILTER" >> /etc/bashclub/$SOURCEHOST.conf echo "min_keep=$ZPUSHMINKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_keep=$ZPUSHKEEP" >> /etc/bashclub/$SOURCEHOST.conf echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf @@ -64,24 +32,25 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 /usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname):$ZPUSHTAG> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs -scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$(hostname)-${ZPOOLSRC} +scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$SOURCEHOST_$ZPOOLSRC + +if [ "$BACKUPSERVER" == "no" ]; then exit +fi + ### if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" - ssh root@$PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB - ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS - - #optional delete all zfs-auto-snapshots + ssh root@$PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB + ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS ssh root@$PBSHOST proxmox-backup-manager verify backup else echo "Today no Maintenance" fi - ssh root@$SOURCEHOST zpool scrub -s $ZPOOLSRC zpool scrub -s $ZPOOLDST @@ -112,3 +81,7 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool apt dist-upgrade -y + + +if [ "$SHUTDOWN" == "yes" ]; then shutdown now +fi From 08f8c8d416e36d8032a39d1207070f48ac9063d5 Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 21 Mar 2024 09:33:01 +0100 Subject: [PATCH 24/39] Config with Vars --- config.example | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 config.example diff --git a/config.example b/config.example new file mode 100644 index 0000000..2149450 --- /dev/null +++ b/config.example @@ -0,0 +1,28 @@ +SOURCEHOST='192.168.50.200' # IP from Proxmox VE System to be backuped and replicated daily +SOURCEHOSTNAME='pve3' #Hostname of Proxmox VE System to be backuped and replicated daily + +ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily +ZFSSECOND='' #Optional second Dataset +ZFSTRGT='rpool-ssd1/200' #This pulling Machines Target ZFS Sourcepath +ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily +ZPOOLDST=rpool #This pulling Machines Pool/Tank +ZPUSHTAG=bashclub:zsync-198-ssd +ZPUSHMINKEEP=3 +ZPUSHKEEP=14 +ZPUSHLABEL=zsync-rz +ZPUSHFILTER="" #zpushlabel kommt automatisch mit + +PBSHOST='192.168.50.199' #IP from your Proxmox Backupserver +BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily +BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server +BACKUPEXCLUDE='124,3021,3022,3023,3251,3252,3253,3254' #Machines to be excluded from Proxmox Backup +REPLEXCLUDE=$BACKUPEXCLUDE +PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) + +SSHPORT='22' #SSH Port, usually default 22 internally + +BACKUPSERVER=no + +MAINTDAY=7 + +SHUTDOWN=no From b4eb641467246440f1304accb5e4c6a6a4778b11 Mon Sep 17 00:00:00 2001 From: Chriz Date: Tue, 26 Mar 2024 10:19:27 +0100 Subject: [PATCH 25/39] Update pbs-zfs-daily.sh Absolute Path for config necessary --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 3626477..57bbe40 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -13,7 +13,7 @@ while getopts "c:" arg; do esac done -source $PWD/$configfile +source $configfile # ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT From 4c2755bb81ab47f47bc0a6c6b1eda032a8b20948 Mon Sep 17 00:00:00 2001 From: Chriz Date: Tue, 26 Mar 2024 10:35:03 +0100 Subject: [PATCH 26/39] Update pbs-zfs-daily.sh --- pbs-zfs-daily.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 57bbe40..c0b4de5 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -15,9 +15,8 @@ done source $configfile +ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT -# ssh root@$SOURCEHOST zfs set $ZPUSHTAG=subvols $ZFSROOT -# Schleife für Excludes echo "target=$ZFSTRGT" > /etc/bashclub/$SOURCEHOST.conf echo "source=root@$SOURCEHOST" >> /etc/bashclub/$SOURCEHOST.conf echo "sshport=$SSHPORT" >> /etc/bashclub/$SOURCEHOST.conf From 4bd75b40978d442c28e3c3f046b355345f543f6e Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 18 Apr 2024 13:19:31 +0200 Subject: [PATCH 27/39] Update pbs-zfs-daily.sh 90000_checkzfs_$(hostname)_$ZPOOLSRC --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index c0b4de5..e2b986b 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -31,7 +31,7 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf # So one Day has 1440 Minutes, so we go condition Yellow on 1500 /usr/local/bin/checkzfs --source $SOURCEHOST --replicafilter "$ZFSTRGT/" --filter "#$ZFSROOT/|#$ZFSSECOND/" --threshold 1500,2000 --output checkmk --prefix pull-$(hostname):$ZPUSHTAG> /tmp/cmk_tmp.out && ( echo "<<>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkzfs -scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$SOURCEHOST_$ZPOOLSRC +scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$(hostname)_$ZPOOLSRC if [ "$BACKUPSERVER" == "no" ]; then exit fi From 537eb78d7456a8df8999144fb3fa848818019e97 Mon Sep 17 00:00:00 2001 From: Chriz Date: Thu, 18 Apr 2024 14:11:35 +0200 Subject: [PATCH 28/39] Update pbs-zfs-daily.sh verify after erverything else --- pbs-zfs-daily.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index e2b986b..f39d85d 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -44,7 +44,6 @@ fi ssh root@$PBSHOST proxmox-backup-manager prune-job run $PRUNEJOB ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS - ssh root@$PBSHOST proxmox-backup-manager verify backup else echo "Today no Maintenance" @@ -73,6 +72,7 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool ### ssh root@$SOURCEHOST pvesm set $BACKUPSTORE --disable 1 + if [ $(date +%u) == $MAINTDAY ]; then ssh root@$PBSHOST proxmox-backup-manager verify backup /etc/cron.daily/zfs-auto-snapshot #protecting all Datasets/ZVOLs except the Replicas with daily Snaps From d2091c1ada22bbf7ba65fa8713c500d1495fd9ba Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 11:33:18 +0200 Subject: [PATCH 29/39] Update pbs-zfs-daily.sh Find Prunejob only on Backup yes --- pbs-zfs-daily.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index f39d85d..b75f909 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -38,6 +38,7 @@ fi ### +PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" From fa7a181c79f7b086e009eef52afd78408c7abc53 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 11:34:33 +0200 Subject: [PATCH 30/39] Update config.example Prunejob will be lookued up in main script --- config.example | 1 - 1 file changed, 1 deletion(-) diff --git a/config.example b/config.example index 2149450..25295bf 100644 --- a/config.example +++ b/config.example @@ -17,7 +17,6 @@ BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be ba BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server BACKUPEXCLUDE='124,3021,3022,3023,3251,3252,3253,3254' #Machines to be excluded from Proxmox Backup REPLEXCLUDE=$BACKUPEXCLUDE -PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) SSHPORT='22' #SSH Port, usually default 22 internally From c0f088044832b7f5aae93d6e610dbbfa84769d9f Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 11:49:34 +0200 Subject: [PATCH 31/39] Update README.md --- README.md | 30 +++++++++++++++++++----------- 1 file changed, 19 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index ac59f9b..d69f58c 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,12 @@ # miyagi-pbs-zfs Secure Proxmox PVE with Proxmox Backup Server PBS and ZFS Pull Replication with a mostly turned off System +Optimize Processes without colliding Replications, Backups, Monitorings or Scrubs +Save lot of Money with less performant Hardware What it does -Miyagi says, best Defense, not be present +Miyagi said, best defense, no be there +Usecase Proxmox Backupserver is running unnecessarly 24/7 ZFS Replication is usually done by a zfs send, so its a push @@ -14,23 +17,28 @@ Consider not using a Gateway, use Routes! What we do... Turning on the Computer with a @reboot Cron -Pulling all Datasets with ZFS -Reporting ZFS Replication with 100% certainty to backuped PVE Host using Check_MK and checkzfs.py from #bashclub -Regarding to the Weekday doing Maintenance on Proxmox Backup Server for getting Space -Triggering a Push (only Way to do) Backup to PBS and checking Exitcode for Report +@reboot /root/pbs-zfs-daily.sh -c 200-ssd.conf && /root/pbs-zfs-daily.sh -c 200-hdd.conf + +So Miyagi at this point can pull two ZFS-Datastores to one Target Datastore, using the full Path of ZFS for Naming. +If you have multiple Target Datasets, please run multiple Configs and disable Proxmox Backup Server! +Miyagi will tag your Source for Replication with Zsync! + +Replicating by a Pull with https://github.com/bashclub-zsync +Pushing a Report to Proxmox Source Host, monitored by Check_MK unsing https://github.com/bashclub/checkzfs +The Report will be found by Check_MK´s built in Autdiscovery for new Services. +Data will be valid vor about one Day (90000s) bevore it expires. +So there nothing can go wrong! + +Regarding to the Weekday doing Maintenance on Proxmox Backup Server for getting more free Space. +Triggering a Push Backup with PBS (only Way to do) Backup to PBS and checking Exitcode for Report Reporting PBS Result with 100% certainty in compact OK/WARN State to backuped PVE Host using Check_MK Verifying older Backups Protecting the PBS Backups with a ZFS Snapshot +Updating the Host and PBS TURNING OFF THE MACHINE!!! - - -ToDo: - -Prio1: Replace bashclub-zfs with bashclub-zsync:) Test Targets Tank if less than 75% free, otherwise report to Check_MK Test Disks after PBS Maintenance, before shutdown with SmartCTL Short Test and report to Check_MK Support multiple Sources -Move Env Variables to Config File From 082b58beb90d3f9d3d37a5b021e882437dac7cbc Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 12:34:00 +0200 Subject: [PATCH 32/39] Update config.example --- config.example | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/config.example b/config.example index 25295bf..c001f50 100644 --- a/config.example +++ b/config.example @@ -2,17 +2,17 @@ SOURCEHOST='192.168.50.200' # IP from Proxmox VE System to be backuped and repli SOURCEHOSTNAME='pve3' #Hostname of Proxmox VE System to be backuped and replicated daily ZFSROOT='rpool/data' #First Dataset/Datastoresourcepath from Proxmox VE System to be backuped and replicated daily -ZFSSECOND='' #Optional second Dataset -ZFSTRGT='rpool-ssd1/200' #This pulling Machines Target ZFS Sourcepath +ZFSSECOND='rpool-hdd/data' #Optional second Dataset +ZFSTRGT='rpool-ssd1/repl/pve200' #This pulling Machines Target ZFS Sourcepath ZPOOLSRC=rpool #First Pool/Tank from Proxmox VE System to be backuped and replicated daily ZPOOLDST=rpool #This pulling Machines Pool/Tank -ZPUSHTAG=bashclub:zsync-198-ssd -ZPUSHMINKEEP=3 -ZPUSHKEEP=14 -ZPUSHLABEL=zsync-rz -ZPUSHFILTER="" #zpushlabel kommt automatisch mit +ZPUSHTAG=bashclub:zsync-198-ssd #ZFS User parameter will be set on ZFSROOT and ZFSSECOND to select. +ZPUSHMINKEEP=3 #Keep min x Snapshots on all Source Datasets to resume Replication +ZPUSHKEEP=14 #Number of Snapshots with ZPUSHLABEL +ZPUSHLABEL=zsync-rz #Suffix for ZFS-Auto-Snapshot Engine +ZPUSHFILTER="" #ZPUSHLABEL will be replicated. So you can add more Patterns from ZFS, line hourly, daily, weekly, monthly. -PBSHOST='192.168.50.199' #IP from your Proxmox Backupserver +PBSHOST='192.168.50.199' #IP from your Proxmox Backupserver - dont forget to add your hosts public key to PBS authorized keys BACKUPSTORE=backup #Datastorename configured in your Proxmox VE System to be backuped and replicated daily BACKUPSTOREPBS=backup #Datastorename configured in your Proxmox Backup Server BACKUPEXCLUDE='124,3021,3022,3023,3251,3252,3253,3254' #Machines to be excluded from Proxmox Backup From 8057f8699e8b5db4c78fcc811e85e543c6909df4 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 12:43:20 +0200 Subject: [PATCH 33/39] Update README.md --- README.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/README.md b/README.md index d69f58c..e01e2c6 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,24 @@ What if our Backup/Replicaserver is turned off most the time, nobody can attack Consider not using a Gateway, use Routes! +Prerequisites + +Proxmox with ZFS on Host to Backup/Replicate - we recommend check_mk Agent for automaticly added Tests +Proxmox with ZFS on Target Machine - it´s WOL MAC Address +Proxmox Backup Server as a VM oder better PCT on Target machine +Your contet of your Public Key of the Target Host .ssh/id_rsa.pub added to + Host to Backup .ssh/authorized_keys + Proxmox Backup Server on Target Host .ssh/authorized_keys +ssh one from your Target Host to Source Host and PBS to confirm Host Key with a yes + +At all Proxmox 'apt install zfs-auto-snapshot -y' +Target Hosts needs the following tools to be installed + + https://github.com/bashclub/zsync + https://github.com/bashclub/check-zfs-replication + +Any Host waking up the Target Host or a daily Cronjob + What we do... Turning on the Computer with a @reboot Cron From 546c3380233b8f99ed8680139e564f7174f63407 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 13:06:17 +0200 Subject: [PATCH 34/39] Update README.md --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index e01e2c6..c87573f 100644 --- a/README.md +++ b/README.md @@ -3,6 +3,11 @@ Secure Proxmox PVE with Proxmox Backup Server PBS and ZFS Pull Replication with Optimize Processes without colliding Replications, Backups, Monitorings or Scrubs Save lot of Money with less performant Hardware +There are german payed Lessons here: +14. + 16.05.2024 (13-17h) - Replikationen und Backups Trojanersicher (V2) - on https://cloudisevil.com + +You also can searh vor sysops.tv or zfs. rocks on YouTube #miyagi - an english Tutorial will follow! + What it does Miyagi said, best defense, no be there @@ -19,6 +24,7 @@ Prerequisites Proxmox with ZFS on Host to Backup/Replicate - we recommend check_mk Agent for automaticly added Tests Proxmox with ZFS on Target Machine - it´s WOL MAC Address Proxmox Backup Server as a VM oder better PCT on Target machine +Proxmox Backup Server Datastore has to be Setup on Source Your contet of your Public Key of the Target Host .ssh/id_rsa.pub added to Host to Backup .ssh/authorized_keys Proxmox Backup Server on Target Host .ssh/authorized_keys From a71cb8d2bf8cdde320da81a78cbab08ce111e850 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 13:10:55 +0200 Subject: [PATCH 35/39] Drawings --- miyagi-6.drawio | 140 ++++++++++++++++++++++++++++++++++++++++++++ miyagi.drawio-3.png | Bin 0 -> 229947 bytes 2 files changed, 140 insertions(+) create mode 100644 miyagi-6.drawio create mode 100644 miyagi.drawio-3.png diff --git a/miyagi-6.drawio b/miyagi-6.drawio new file mode 100644 index 0000000..0aa93d8 --- /dev/null +++ b/miyagi-6.drawio @@ -0,0 +1,140 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/miyagi.drawio-3.png b/miyagi.drawio-3.png new file mode 100644 index 0000000000000000000000000000000000000000..44355316b7eb08297cbea708948e636ac4f1064d GIT binary patch literal 229947 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

gOx^Y(vkBPN_xp{wmTB1xH3T{MB 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 z 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 Date: Mon, 29 Apr 2024 13:11:17 +0200 Subject: [PATCH 36/39] Rename miyagi-6.drawio to miyagi.drawio --- miyagi-6.drawio => miyagi.drawio | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename miyagi-6.drawio => miyagi.drawio (100%) diff --git a/miyagi-6.drawio b/miyagi.drawio similarity index 100% rename from miyagi-6.drawio rename to miyagi.drawio From 91c7e98baee0e6da893250d3bb42474750e8e9e1 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 13:11:41 +0200 Subject: [PATCH 37/39] Rename miyagi.drawio-3.png to miyagi.drawio.png --- miyagi.drawio-3.png => miyagi.drawio.png | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename miyagi.drawio-3.png => miyagi.drawio.png (100%) diff --git a/miyagi.drawio-3.png b/miyagi.drawio.png similarity index 100% rename from miyagi.drawio-3.png rename to miyagi.drawio.png From c84c6d900cd583473e24014281832c9125ed6938 Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 13:13:19 +0200 Subject: [PATCH 38/39] Update pbs-zfs-daily.sh Bugfixes to Beta --- pbs-zfs-daily.sh | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index b75f909..13398ed 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -33,12 +33,16 @@ echo "zfs_auto_snapshot_label=$ZPUSHLABEL" >> /etc/bashclub/$SOURCEHOST.conf scp /tmp/90000_checkzfs $SOURCEHOST:/var/lib/check_mk_agent/spool/90000_checkzfs_$(hostname)_$ZPOOLSRC -if [ "$BACKUPSERVER" == "no" ]; then exit +if [[ "$BACKUPSERVER" == "no" ]] +then +echo No Backup configured in this Run +exit fi +PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) + ### -PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format json-pretty | grep -m 1 "id" | cut -d'"' -f4) if [ $(date +%u) == $MAINTDAY ]; then echo "MAINTENANCE" @@ -47,7 +51,7 @@ PRUNEJOB=$(ssh $PBSHOST proxmox-backup-manager prune-job list --output-format js ssh root@$PBSHOST proxmox-backup-manager garbage-collection start $BACKUPSTOREPBS else - echo "Today no Maintenance" + echo "Today no Maintenance" fi ssh root@$SOURCEHOST zpool scrub -s $ZPOOLSRC @@ -57,7 +61,7 @@ fi ### one Day is 86400 Seconds, so we going Condition grey if no new Status File will be pushed -ssh root@$SOURCEHOST vzdump --node $SOURCEHOSTNAME --storage $BACKUPSTORE --exclude $BACKUPEXCLUDE --mode snapshot --all 1 --notes-template '{{guestname}}' +echo ssh root@$SOURCEHOST vzdump --node $SOURCEHOSTNAME --storage $BACKUPSTORE --exclude $BACKUPEXCLUDE --mode snapshot --all 1 --notes-template '{{guestname}}' if [ $? -eq 0 ]; then echo command returned 0 is good @@ -73,7 +77,7 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool ### ssh root@$SOURCEHOST pvesm set $BACKUPSTORE --disable 1 - if [ $(date +%u) == $MAINTDAY ]; then ssh root@$PBSHOST proxmox-backup-manager verify backup + if [ $(date +%u) == $MAINTDAY ]; then ssh root@$PBSHOST proxmox-backup-manager verify backup; fi /etc/cron.daily/zfs-auto-snapshot #protecting all Datasets/ZVOLs except the Replicas with daily Snaps @@ -81,7 +85,11 @@ scp /tmp/90000_checkpbs root@$SOURCEHOST:/var/lib/check_mk_agent/spool apt dist-upgrade -y +ssh $PBSHOST apt dist-upgrade -y - -if [ "$SHUTDOWN" == "yes" ]; then shutdown now +if [[ "$SHUTDOWN" == "yes" ]] +then + shutdown now +else + echo no Shutdown configured - Next run has to be set in crontab! fi From a6cc6797be058f5bf08be88ac4eddd8051722c8b Mon Sep 17 00:00:00 2001 From: Chriz Date: Mon, 29 Apr 2024 13:14:42 +0200 Subject: [PATCH 39/39] Update pbs-zfs-daily.sh --- pbs-zfs-daily.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/pbs-zfs-daily.sh b/pbs-zfs-daily.sh index 13398ed..10bfb16 100644 --- a/pbs-zfs-daily.sh +++ b/pbs-zfs-daily.sh @@ -1,8 +1,6 @@ #!/bin/bash -#Requirements for Myiagi ultimate Backup -## Proxmox Source Host with only daily Autosnapshots, Proxmox Destination Host, Destination Public SSH Key on Source authorized-keys File, autostarting Proxmox Backupserver running on this PVE, zfs set com.sun:auto-snapshots=false on $ZFSTRGT, instaled checkzfs from https://github.com/bashclub/check-zfs-replication, check_mk Agent running on PVE - +#Requirements for Myiagi ultimate Backup found in README! Always use a Config File! while getopts "c:" arg; do case $arg in