miyagi-backup.sh aktualisiert
This commit is contained in:
+70
-44
@@ -46,7 +46,7 @@ fi
|
|||||||
# Konfigurationsprüfung
|
# Konfigurationsprüfung
|
||||||
# ==========================
|
# ==========================
|
||||||
REQUIRED_VARS=(
|
REQUIRED_VARS=(
|
||||||
SSHPORT
|
SOURCEPORT
|
||||||
BACKUPSERVER
|
BACKUPSERVER
|
||||||
ZSYNC
|
ZSYNC
|
||||||
MAINTDAY
|
MAINTDAY
|
||||||
@@ -88,13 +88,13 @@ fi
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Funktionen
|
# Funktionen
|
||||||
remote_ssh() {
|
#remote_ssh() {
|
||||||
ssh -p "$SSHPORT" "$@"
|
# ssh -p "$SOURCEPORT" "$@"
|
||||||
}
|
#}
|
||||||
|
|
||||||
remote_scp() {
|
#remote_scp() {
|
||||||
scp -P "$SSHPORT" "$@"
|
# scp -P "$SOURCEPORT" "$@"
|
||||||
}
|
#}
|
||||||
|
|
||||||
set_wol_g_enabled() {
|
set_wol_g_enabled() {
|
||||||
log "Pruefe, ob ethtool installiert ist..."
|
log "Pruefe, ob ethtool installiert ist..."
|
||||||
@@ -145,7 +145,7 @@ write_zsync_config() {
|
|||||||
{
|
{
|
||||||
echo "target=$ZFSTRGT"
|
echo "target=$ZFSTRGT"
|
||||||
echo "source=root@$SOURCEHOST"
|
echo "source=root@$SOURCEHOST"
|
||||||
echo "sshport=$SSHPORT"
|
echo "sourceport=$SOURCEPORT"
|
||||||
echo "tag=$ZPUSHTAG"
|
echo "tag=$ZPUSHTAG"
|
||||||
echo "snapshot_filter=\"$ZPUSHFILTER\""
|
echo "snapshot_filter=\"$ZPUSHFILTER\""
|
||||||
echo "min_keep=$ZPUSHMINKEEP"
|
echo "min_keep=$ZPUSHMINKEEP"
|
||||||
@@ -178,19 +178,11 @@ run_remote_updates() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
run_remote_updates() {
|
|
||||||
if [[ "$UPDATES" == "yes" ]]; then
|
|
||||||
ssh "$PBSHOST" apt update && apt dist-upgrade -y
|
|
||||||
else
|
|
||||||
log "Remote updates disabled"
|
|
||||||
fi
|
|
||||||
}
|
|
||||||
|
|
||||||
send_piggyback_data() {
|
send_piggyback_data() {
|
||||||
# Falls SOURCEHOSTNAME leer ist, ueber SSH vom Zielhost ermitteln
|
# Falls SOURCEHOSTNAME leer ist, ueber SSH vom Zielhost ermitteln
|
||||||
if [[ -z "${SOURCEHOSTNAME:-}" ]]; then
|
if [[ -z "${SOURCEHOSTNAME:-}" ]]; then
|
||||||
log "SOURCEHOSTNAME is empty retrieving via SSH from $SOURCEHOST..."
|
log "SOURCEHOSTNAME is empty retrieving via SSH from $SOURCEHOST..."
|
||||||
SOURCEHOSTNAME=$(ssh -p "$SSHPORT" "$SOURCEHOST" hostname)
|
SOURCEHOSTNAME=$(ssh -p "$SOURCEPORT" "$SOURCEHOST" hostname)
|
||||||
log "Detected SOURCEHOSTNAME: $SOURCEHOSTNAME"
|
log "Detected SOURCEHOSTNAME: $SOURCEHOSTNAME"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -206,7 +198,7 @@ send_piggyback_data() {
|
|||||||
echo "<<<<>>>>"
|
echo "<<<<>>>>"
|
||||||
} > "$filename"
|
} > "$filename"
|
||||||
|
|
||||||
if scp -P "$SSHPORT" "$filename" "$SOURCEHOST:/var/lib/check_mk_agent/spool/"; then
|
if scp -P "$SOURCEPORT" "$filename" "$SOURCEHOST:/var/lib/check_mk_agent/spool/"; then
|
||||||
log "Piggyback data successfully sent to $SOURCEHOST"
|
log "Piggyback data successfully sent to $SOURCEHOST"
|
||||||
else
|
else
|
||||||
log "ERROR: Failed to send piggyback data to $SOURCEHOST"
|
log "ERROR: Failed to send piggyback data to $SOURCEHOST"
|
||||||
@@ -215,16 +207,16 @@ send_piggyback_data() {
|
|||||||
|
|
||||||
run_pbs_backup() {
|
run_pbs_backup() {
|
||||||
if [[ -z "${SOURCEHOSTNAME:-}" ]]; then
|
if [[ -z "${SOURCEHOSTNAME:-}" ]]; then
|
||||||
SOURCEHOSTNAME=$(ssh "$SOURCEHOST" hostname)
|
SOURCEHOSTNAME=$(ssh -p "$SOURCEPORT" root@"$SOURCEHOST" hostname)
|
||||||
fi
|
fi
|
||||||
|
|
||||||
log "Running PBS vzdump job..."
|
log "Running PBS vzdump job..."
|
||||||
|
|
||||||
# PBS-Storage ggf. aktivieren
|
# PBS-Storage ggf. aktivieren
|
||||||
log "Checking if PBS storage '$BACKUPSTORE' is enabled on $SOURCEHOST..."
|
log "Checking if PBS storage '$BACKUPSTORE' is enabled on $SOURCEHOST..."
|
||||||
if ssh root@"$SOURCEHOST" "pvesm status | grep -w '$BACKUPSTORE' | grep -q 'disabled'"; then
|
if ssh -p "$SOURCEPORT" root@"$SOURCEHOST" "pvesm status | grep -w '$BACKUPSTORE' | grep -q 'disabled'"; then
|
||||||
log "PBS storage '$BACKUPSTORE' is disabled. Attempting to enable...sleep 10 Sekunden"
|
log "PBS storage '$BACKUPSTORE' is disabled. Attempting to enable... sleep 10 Sekunden"
|
||||||
ssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 0 && sleep 10"
|
ssh -p "$SOURCEPORT" root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 0 && sleep 10"
|
||||||
pbs_enabled_by_script=true
|
pbs_enabled_by_script=true
|
||||||
else
|
else
|
||||||
log "PBS storage '$BACKUPSTORE' is already enabled."
|
log "PBS storage '$BACKUPSTORE' is already enabled."
|
||||||
@@ -234,7 +226,7 @@ run_pbs_backup() {
|
|||||||
vzdump_success=false
|
vzdump_success=false
|
||||||
|
|
||||||
# Hauptversuch mit --pbs-change-detection-mode
|
# Hauptversuch mit --pbs-change-detection-mode
|
||||||
if ssh root@"$SOURCEHOST" vzdump --pbs-change-detection-mode metadata \
|
if ssh -p "$SOURCEPORT" root@"$SOURCEHOST" vzdump --pbs-change-detection-mode metadata \
|
||||||
--node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \
|
--node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \
|
||||||
--exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \
|
--exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \
|
||||||
--notes-template '{{guestname}}'; then
|
--notes-template '{{guestname}}'; then
|
||||||
@@ -245,7 +237,7 @@ run_pbs_backup() {
|
|||||||
else
|
else
|
||||||
log "Fallback: vzdump with change-detection-mode failed, trying without it..."
|
log "Fallback: vzdump with change-detection-mode failed, trying without it..."
|
||||||
|
|
||||||
if ssh root@"$SOURCEHOST" vzdump \
|
if ssh -p "$SOURCEPORT" root@"$SOURCEHOST" vzdump \
|
||||||
--node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \
|
--node "$SOURCEHOSTNAME" --storage "$BACKUPSTORE" \
|
||||||
--exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \
|
--exclude "$BACKUPEXCLUDE" --mode snapshot --all 1 \
|
||||||
--notes-template '{{guestname}}'; then
|
--notes-template '{{guestname}}'; then
|
||||||
@@ -261,7 +253,7 @@ run_pbs_backup() {
|
|||||||
# PBS-Storage wieder deaktivieren, wenn zuvor aktiviert und erfolgreich
|
# PBS-Storage wieder deaktivieren, wenn zuvor aktiviert und erfolgreich
|
||||||
if [[ "$vzdump_success" == true && "$pbs_enabled_by_script" == true ]]; then
|
if [[ "$vzdump_success" == true && "$pbs_enabled_by_script" == true ]]; then
|
||||||
log "Disabling PBS storage '$BACKUPSTORE' again on $SOURCEHOST..."
|
log "Disabling PBS storage '$BACKUPSTORE' again on $SOURCEHOST..."
|
||||||
ssh root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 1"
|
ssh -p "$SOURCEPORT" root@"$SOURCEHOST" "pvesm set '$BACKUPSTORE' --disable 1"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Monitoring-Output für Checkmk
|
# Monitoring-Output für Checkmk
|
||||||
@@ -272,10 +264,9 @@ run_pbs_backup() {
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
( echo "<<<local>>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkpbs
|
( echo "<<<local>>>" ; cat /tmp/cmk_tmp.out ) > /tmp/90000_checkpbs
|
||||||
scp /tmp/90000_checkpbs root@"$SOURCEHOST":/var/lib/check_mk_agent/spool || log "Fehler beim SCP des Monitoring-Outputs"
|
scp -P "$SOURCEPORT" /tmp/90000_checkpbs root@"$SOURCEHOST":/var/lib/check_mk_agent/spool || log "Fehler beim SCP des Monitoring-Outputs"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
run_maintenance() {
|
run_maintenance() {
|
||||||
if [[ "$(date +%u)" == "$MAINTDAY" ]]; then
|
if [[ "$(date +%u)" == "$MAINTDAY" ]]; then
|
||||||
log "Running maintenance..."
|
log "Running maintenance..."
|
||||||
@@ -289,7 +280,7 @@ run_maintenance() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
run_scrub_stop_src() {
|
run_scrub_stop_src() {
|
||||||
ssh -p "$SSHPORT" root@"$SOURCEHOST" 'for pool in $(zpool list -H -o name); do
|
ssh -p "$SOURCEPORT" root@"$SOURCEHOST" 'for pool in $(zpool list -H -o name); do
|
||||||
echo "Stoppe Scrub auf Pool: $pool"
|
echo "Stoppe Scrub auf Pool: $pool"
|
||||||
if zpool status "$pool" | grep -q "scrub in progress"; then
|
if zpool status "$pool" | grep -q "scrub in progress"; then
|
||||||
if zpool scrub -s "$pool"; then
|
if zpool scrub -s "$pool"; then
|
||||||
@@ -363,29 +354,64 @@ send_piggyback_data_external() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
send_checkzfs_output_external() {
|
send_checkzfs_output_external() {
|
||||||
if [[ "${ECHECKZFS,,}" != "yes" ]]; then
|
if [[ "${ECHECKZFS,,}" == "yes" ]]; then
|
||||||
log "Externer check_zfs-Export deaktiviert."
|
log "ECHECKZFS aktiviert – beginne Monitoring-Ausgabe."
|
||||||
|
else
|
||||||
|
log "ECHECKZFS ist deaktiviert – überspringe Monitoring-Ausgabe."
|
||||||
return
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if [[ -z "$ECHECKZFS_HOST" || -z "$ECHECKZFS_PORT" ]]; then
|
local checkzfs_cmd
|
||||||
log "ECHECKZFS_HOST oder ECHECKZFS_PORT nicht gesetzt – Abbruch."
|
checkzfs_cmd=$(which checkzfs)
|
||||||
return 1
|
|
||||||
|
if [[ -z "$checkzfs_cmd" ]]; then
|
||||||
|
log "check_zfs ist nicht installiert – Abbruch."
|
||||||
|
return
|
||||||
fi
|
fi
|
||||||
|
|
||||||
local checkfile="/tmp/90000_checkzfs_external"
|
local config_file="/etc/bashclub/${SOURCEHOST}.conf"
|
||||||
|
|
||||||
log "Führe check_zfs aus und schreibe Output nach $checkfile"
|
if [[ ! -f "$config_file" ]]; then
|
||||||
/usr/lib/nagios/plugins/check_zfs > "$checkfile" 2>&1 || log "check_zfs Befehl fehlgeschlagen"
|
log "Konfigurationsdatei $config_file nicht gefunden – check_zfs-Ausführung abgebrochen."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
log "Sende check_zfs-Daten an $ECHECKZFS_HOST..."
|
# Konfiguration einlesen
|
||||||
if scp -P "$ECHECKZFS_PORT" "$checkfile" "$ECHECKZFS_HOST:/var/lib/check_mk_agent/spool/"; then
|
log "Lese Konfiguration aus $config_file..."
|
||||||
log "Check_zfs-Daten erfolgreich an $ECHECKZFS_HOST gesendet."
|
source "$config_file"
|
||||||
|
|
||||||
|
# Prüfung auf deaktiviertes Monitoring in der Konfig
|
||||||
|
if [[ "${checkzfs_disabled:-0}" -eq 1 ]]; then
|
||||||
|
log "check_zfs Monitoring laut Konfiguration deaktiviert – überspringe."
|
||||||
|
return
|
||||||
|
fi
|
||||||
|
|
||||||
|
local spool_tmp="/tmp/${checkzfs_spool_maxage}_${checkzfs_prefix}"
|
||||||
|
local remote_host="$ECHECKZFS_HOST"
|
||||||
|
local remote_port="$ECHECKZFS_PORT"
|
||||||
|
|
||||||
|
echo "<<<local>>>" > "$spool_tmp"
|
||||||
|
|
||||||
|
log "Generiere check_zfs Monitoring-Ausgabe mit Prefix $checkzfs_prefix..."
|
||||||
|
|
||||||
|
$checkzfs_cmd --source "$source:$soru" \
|
||||||
|
--output checkmk \
|
||||||
|
--threshold "$checkzfs_max_age" \
|
||||||
|
--maxsnapshots "$checkzfs_max_snapshot_count" \
|
||||||
|
--prefix "$checkzfs_prefix" \
|
||||||
|
--replicafilter "^${target}" \
|
||||||
|
--filter "$snapshot_filter" >> "$spool_tmp"
|
||||||
|
|
||||||
|
if [[ -s "$spool_tmp" ]]; then
|
||||||
|
log "Übertrage Spool-Datei an $remote_host über Port $remote_port..."
|
||||||
|
scp -P "$remote_port" "$spool_tmp" root@"$remote_host":/var/lib/check_mk_agent/spool/ && \
|
||||||
|
log "Spool-Datei erfolgreich übertragen." || \
|
||||||
|
log "Fehler beim Übertragen der Spool-Datei."
|
||||||
|
rm -f "$spool_tmp"
|
||||||
else
|
else
|
||||||
log "Fehler beim Senden der Check_zfs-Daten an $ECHECKZFS_HOST"
|
log "check_zfs-Ausgabe war leer – keine Übertragung erfolgt."
|
||||||
|
rm -f "$spool_tmp"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
rm -f "$checkfile"
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -395,8 +421,8 @@ main() {
|
|||||||
log "Starting full backup routine..."
|
log "Starting full backup routine..."
|
||||||
|
|
||||||
log "Versuche Hostname von $SOURCEHOST via SSH (Port $SOURCEPORT) abzurufen..."
|
log "Versuche Hostname von $SOURCEHOST via SSH (Port $SOURCEPORT) abzurufen..."
|
||||||
if ! SOURCEHOSTNAME=$(ssh -p "$SSHPORT" -o ConnectTimeout=5 -o BatchMode=yes "$SOURCEHOST" hostname 2>/dev/null); then
|
if ! SOURCEHOSTNAME=$(ssh -p "$SOURCEPORT" -o ConnectTimeout=5 -o BatchMode=yes "$SOURCEHOST" hostname 2>/dev/null); then
|
||||||
log "Error: Hostname von $SOURCEHOST konnte nicht abgerufen werden | Abbruch."
|
log "Error: Hostname von $SOURCEHOST konnte nicht abgerufen werden – Abbruch."
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
log "Hostname von $SOURCEHOST: $SOURCEHOSTNAME"
|
log "Hostname von $SOURCEHOST: $SOURCEHOSTNAME"
|
||||||
|
|||||||
Reference in New Issue
Block a user