Shell Backup-Skript – Windows-SMB / Linux-Server

bereiten

  • Kopieren Sie alle Dateien in einem Ordner
  • ändern backup-start.sh mit Ihrem Weg und configs
  • machen eine Btrfs-Partition
  • ein Teilvolumen für den Backup-Pfad erstellen
  • schaffen einen Cronjob

Anfang

backup-start.sh täglich
backup-start.sh wöchentlich

Backup-Modi

  • smb
  • sshs
  • sshnosymlink
  • sshsudoftp

backup-start.sh

#!/bin / bash
# überprüfen Sie die Backup-Skript, wenn sein Lauf und wenn ja, dann für einen Schnappschuss calc
script_name = / home / backup / backup-script.sh
email_admin=mail1@mail.de,mail2@mail.de
backup_path = / srv / backup / done
snapshot_path = / srv / backup / Schnappschüsse / Backup- $(date +% Y-% m-% d-% H-% M)
snapshot_script = / home / eit / backup / services-snapshots.sh

## Skript Start

ob [ -von "$1" ];dann
 Echo "kein Ziel gesetzt"
 Ausfahrt 1
sonst
 #Echo "Ziel festlegen"
 backup_mode = $ 1
fi

## Funktion für die errpr Codes
check_error(){
 ob [ "$1" -geben "100" ]; dann
 Echo "Anfang - Sicherung läuft noch"
 Ausfahrt 1
 fi
 ob [ "$1" -eq "10" ]; dann
 Echo "Anfang - Sicherung getan - keine Dateien"
 MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ Server $ snapshot_local_path / $ Server
 sonst
 ob [ "$1" -eq "0" ]; dann
 Echo "Anfang - Sicherung getan - mit Dateien"
 MODE = $ backup_mode $ snapshot_script $ backup_local_path / $ Server $ snapshot_local_path / $ Server
 fi
 fi
}

script_start(){
 ob [ ! -d "$backup_local_path / $ Server" ]; dann
 Echo "Backup-Ordner nicht vorhanden"
 Btrfs Subvolume $ backup_local_path erstellen / $ Server
 chmod 740 $backup_local_path / $ Server
 Echo "Backup-Ordner erstellt"
 sonst
 Echo "Backup-Ordner vorhanden"
 fi
}

##
# laufen Backup-Skript
##

server = mysvwe1
script_start
sh $ script_name $ email_admin $ server / path / to / backup / data $ password backup_local_path ssh username
error_now = $?
check_error $ error_now

Ausfahrt 0

backup-script.sh

#!/bin / bash
#
# Thomas Mosandl - 2014-11-14
#
# apt-get install CIFS-utils sendmail-bin
# send~~POS=TRUNC-Config
#
# definieren Parameter #!/bin / sh
# definieren parameterss
## variablen
## 1. Mail an
## 2. backup_source_ip
## 3. backup_source_path
## 4. backup_dest_path

backup_source_ip = $ 2
backup_source_path = $ 3
backup_source_user = $ 6
backup_source_domain = 'asd'
backup_source_pw = $ 7
backup_log_path = / var / log
backup_check_client_ping ="1"
backup_service = $ 5
backup_dest_path = $ 4 / $ backup_source_ip
backup_log_path = / var / log
backup_log_file = backup_ $ backup_source_ip
backup_email_to_config ="thomas.mosandl@mosandl.eu"
backup_email_from ="backup@mosandl.eu"

# Ende Config

Echo "Sicherung starten - $backup_source_ip"

# vaiable Scheck
wenn [ -von "$1" ];dann
        Echo "mail set config"
        backup_email_to ="$backup_email_to_config"
sonst
        Echo "Mail auf Parameter"
        backup_email_to = $ 1
fi
# überprüfen iSCSI-Ziel


#ping -q -c $ backup_check_client_ping $ backup_iscsi_target_1 > /dev / null
#ob [ ! $? -eq 0 ]; dann
#	Echo "ISCSI Ping nicht availible"
#	Echo " "  | mail -s "Sicherungskopie - ISCSI - Ping funktioniert nicht" -ein "Von: $backup_email_from" $backup_email_to
#	Ausfahrt 1
#sonst
#	#ob [ $(iscsiadm -m-Sitzung | grep -c "$backup_iscsi_target_1") -eq 0 ]; dann
	#	Echo "ISCSI Berg nicht availible"
	#	Echo " "  | mail -s "Sicherungskopie - ISCSI - Mount funktioniert nicht" -ein "Von: $backup_email_from" $backup_email_to
	#	Ausfahrt 1
	#sonst
#		Echo "ISCSI ist in Ordnung"
	#sein
#fi

#192.168.144.167
# überprüfen, ob Backup ausgeführt wird
ps aux > /tmp / temp.txt
ob [ $(Katze /tmp/temp.txt  | grep -c "ssh -o StrictHostKeyChecking = no -l")  -gt 0 ]; dann
Echo "Sicherung war defekt oder nicht ausgeführt"
	ob [ -f "$backup_log_path / $ backup_log_file.lck" ]; dann
rm -rf "$backup_log_path / $ backup_log_file.lck"
	fi
fi
rm -rf /tmp/temp.txt

ob [ -f "$backup_log_path / $ backup_log_file.lck" ]; dann
Echo " "  | mail -s "Sicherungskopie - $backup_source_ip - Backup ist immer noch läuft"  -r $ backup_email_from $ backup_email_to
Echo "Skript - Backup ausgeführt wird"
		set -e
		Ausfahrt 100
sonst
Echo "Skript - Sicherung nicht noch läuft"
	berühren "$backup_log_path / $ backup_log_file.lck"
fi

# überprüfen, ob log in logrotate ist

ob [ $(grep -c "$backup_log_path / $ backup_log_file" /etc / logrotate.d / rsyslog)  -eq 1 ]; dann
Echo "Skript - rsyslog gesetzt"
sonst
Echo "$backup_log_path / $ backup_log_file {}" >> /etc / logrotate.d / rsyslog
Echo "Skript - rsyslog erstellt"
fi

#
ob [ ! $(montieren | grep -c "/Medien / data0 / srv / Backup-Typ Btrfs (rw)")  -eq 0 ]; dann
Echo "Lagerung nicht montiert"
	Ausfahrt 11
	Echo " "  | mail -s "Sicherungskopie - Lagerung nicht montiert"  -r $ backup_email_from $ backup_email_to
sonst
Echo "Lagerung montiert"
fi

# Ordner erstellen

# überprüfen Backup-Verzeichnis
ob [ ! -d "$backup_dest_path" ]; dann
      Echo "Backup-Ordner nicht vorhanden"
      mkdir -p $ backup_dest_path
      chmod 740 $backup_dest_path
      Echo "Backup-Ordner erstellt"
sonst
      Echo "Backup-Ordner vorhanden"
fi


ob [ ! -d "$backup_log_path" ]; dann
      Echo "Backup-Protokollordner nicht vorhanden"
      mkdir -p $ backup_log_path
      Echo "Backup-Protokollordner erstellt"
sonst
      Echo "Backup-Protokollordner vorhanden"
fi





# nslookup Scheck
nslookup $ backup_source_ip > /dev / null
ob [ ! $? -eq 0 ]; dann
Echo "DNS funktioniert nicht für $ backup_source_ip"
	Echo " "  | mail -s "Sicherungskopie - $backup_source_ip - nslookup funktioniert nicht für $ backup_source_ip"  -r $ backup_email_from $ backup_email_to
rm -rf "$backup_log_path / $ backup_log_file.lck"
	set -e
	Ausfahrt 1
sonst
Echo "DNS ist in Ordnung"
fi


# Ping-Check
ob [ ! $backup_source_ip = "server.de" ]; dann
ping -q -c $ backup_check_client_ping $ backup_source_ip > /dev / null
		ob [ ! $? -eq 0 ]; dann
Echo "PING funktioniert nicht für $ backup_source_ip"
		Echo " "  | mail -s "Sicherungskopie - $backup_source_ip - ping $ backup_source_ip nicht funktioniert"  -r $ backup_email_from $ backup_email_to
rm -rf "$backup_log_path / $ backup_log_file.lck"
		set -e
		Ausfahrt 1
	sonst
Echo "Ping ist in Ordnung"
	sein
sein

# rsync
echo $ backup_service
ob [ $backup_service = ssh ]; dann
exit_code ="0"
	log_file_temp = $ backup_log_file_ $(date +% Y_% m_% d_% H_% M_% S)
	Export sshpass = $ backup_source_pw
ionice -c 3 rsync -rptgoDvzLKh --delete --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = no -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp
	ob [ ! $? -geben 0 ]; dann
Echo "Backup-Fehler - $?"
		Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to
set -e
		Ausfahrt 1
	sonst
Echo "Backup ist in Ordnung"
		ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann
mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -r $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
Echo "Skript - keine Dateien"
			 exit_code ="10"
		 sonst
Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup"  -r $ backup_email_from $ backup_email_to
fi
cat $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
rm $ backup_log_path / $ log_file_temp
fi
Elif [ $backup_service = sshnosymlink ]; dann
exit_code ="0"
	 log_file_temp = $ backup_log_file_ $(date +% Y_% m_% d_% H_% M_% S)
	 Export sshpass = $ backup_source_pw
ionice -c 3 rsync -rptgoDvzlKh --delete --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = no -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp
	 ob [ ! $? -geben 0 ]; dann
Echo "Backup-Fehler - $?"
		 Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to
set -e
		 Ausfahrt 1
	 sonst
Echo "Backup ist in Ordnung"
		 ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann
mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -r $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
Echo "Skript - keine Dateien"
			 exit_code ="10"
		 sonst
Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup"  -r $ backup_email_from $ backup_email_to
fi
cat $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
rm $ backup_log_path / $ log_file_temp
fi
Elif [ $backup_service = sshsudoftp ]; dann
exit_code ="0"
	 log_file_temp = $ backup_log_file_ $(date +% Y_% m_% d_% H_% M_% S)
	 Export sshpass = $ backup_source_pw
ionice -c 3 rsync -rptgoDzLKh --delete --exclude "*Benutzer / Daten *" --ausschließen "*Benutzer / * / Daten *"  --rsync-path ="sudo rsync" --rsh ="/usr / bin / sshpass -e ssh -o StrictHostKeyChecking = no -l $ backup_source_user " $backup_source_ip:$backup_source_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats >> $backup_log_path / $ log_file_temp
	 ob [ ! $? -geben 0 ]; dann
Echo "Backup-Fehler - $?"
		 Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to
set -e
		 Ausfahrt 1
	 sonst
Echo "Backup ist in Ordnung"
		 ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann
mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -r $ backup_email_from $ backup_email_to < $backup_log_path / $ log_file_temp
Echo "Skript - keine Dateien"
			  exit_code ="10"
		  sonst
Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup"  -r $ backup_email_from $ backup_email_to
fi
cat $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
rm $ backup_log_path / $ log_file_temp
fi

Elif [ $backup_service = smb ]; dann
        # Mount-Backup
        mount -t cifs // $ backup_source_ip / $ backup_source_path $ backup_mount_path -o username = $ backup_source_user,Passwort = $ backup_source_pw,ro,sec = ntlm

        ob [ ! $? -eq 0 ]; dann
                Echo "Berg ist nicht in Ordnung - $?"
                Echo " "  | mail -s "Sicherungskopie - $backup_source_ip - mount -t cifs // $ backup_source_ip / $ backup_source_path $ backup_mount_path nicht funktioniert" -ein "Von: $backup_email_from" $backup_email_to
                rm -rf "$backup_log_path / $ backup_log_file.lck"
                set -e
                Ausfahrt 1
        sonst
                Echo "Berg ist in Ordnung"
        fi


        # rsync
        exit_code ="0"
        log_file_temp = $ backup_log_file_ $(date +% Y_% m_% d_% H_% M_% S)
        rsync -rlptDvz $ backup_mount_path $ backup_dest_path --log-file = $ backup_log_path / $ log_file_temp --stats --chmod = u = rwx,g = rx,o = rx >> $backup_log_path / $ log_file_temp
        ob [ ! $? -geben 0 ]; dann
                Echo "Backup-Fehler - $?"
                Katze -v $ backup_log_path / $ backup_log_file | mail -s "Sicherungskopie - $backup_source_ip - Fehler-Backup - $?" -ein "Von: $backup_email_from" $backup_email_to
                set -e
                Ausfahrt 1
        sonst
                Echo "Backup ist in Ordnung"
                                                                                                                     199,2-9       92%
        sonst
                Echo "Backup ist in Ordnung"
                ob [ ! $(grep -c "Anzahl der erstellten Dateien: 0" $backup_log_path / $ log_file_temp) -eq 0 ]; dann
                        Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup - keine Dateien" -ein "Von: $backup_email_from" $backup_email_to
                        Echo "Skript - keine Dateien"
                        exit_code ="10"
                sonst
                        Katze -v $ backup_log_path / $ log_file_temp | mail -s "Sicherungskopie - $backup_source_ip - Fertig-Backup" -ein "Von: $backup_email_from" $backup_email_to
                fi
                cat $ backup_log_path / $ log_file_temp >>  $backup_log_path / $ backup_log_file
                rm $ backup_log_path / $ log_file_temp
        fi
fi

# aushängen

rm -rf "$backup_log_path / $ backup_log_file.lck"
Ausfahrt $ exit_code

services-snapshots.sh

#!/bin / bash
set -e

ob [[ -z $ MODE ]]; dann
Echo "$MODE nicht angegeben"
	Ausfahrt 1
fi

ob [[ $UID -nicht 0 ]]; dann
Echo "Muss als root ausgeführt werden"
	Ausfahrt 1
fi

ob [ -von "$1" ];dann
Echo "nicht Quellen gesetzt"
	Ausfahrt 1
sonst
Echo "Set Source"
	BACKUP_SOURCE_DIR = $ 1

fi

ob [ -von "$2" ];dann
Echo "kein Ziel gesetzt"
	Ausfahrt 1
sonst
Echo "Ziel festlegen"
	BACKUP_BASE_DIR = $ 2
fi

BACKUP_DIR_DAILY = ${BACKUP_BASE_DIR}/täglich
BACKUP_DIR_WEEKLY = ${BACKUP_BASE_DIR}/wöchentlich
BACKUP_DIR_MONTHLY = ${BACKUP_BASE_DIR}/monatlich
BACKUP_DIR_YEARLY = ${BACKUP_BASE_DIR}/jährlich

ob [ ! -d "$BACKUP_DIR_DAILY" ]; dann
Echo "Backup-Ordner nicht vorhanden"
	mkdir -p $ BACKUP_DIR_DAILY
chmod 740 $BACKUP_DIR_DAILY
Echo "Backup-Ordner erstellt"
sonst
Echo "Backup-Ordner vorhanden"
fi
ob [ ! -d "$BACKUP_DIR_WEEKLY" ]; dann
Echo "Backup-Ordner nicht vorhanden"
	mkdir -p $ BACKUP_DIR_WEEKLY
chmod 740 $BACKUP_DIR_WEEKLY
Echo "Backup-Ordner erstellt"
sonst
Echo "Backup-Ordner vorhanden"
fi
ob [ ! -d "$BACKUP_DIR_MONTHLY" ]; dann
Echo "Backup-Ordner nicht vorhanden"
	mkdir -p $ BACKUP_DIR_MONTHLY
chmod 740 $BACKUP_DIR_MONTHLY
Echo "Backup-Ordner erstellt"
sonst
Echo "Backup-Ordner vorhanden"
fi
ob [ ! -d "$BACKUP_DIR_YEARLY" ]; dann
Echo "Backup-Ordner nicht vorhanden"
	mkdir -p $ BACKUP_DIR_YEARLY
chmod 740 $BACKUP_DIR_YEARLY
Echo "Backup-Ordner erstellt"
sonst
Echo "Backup-Ordner vorhanden"
fi




NUM_FILES_TO_KEEP_DAILY = 10
NUM_FILES_TO_KEEP_WEEKLY = 20
NUM_FILES_TO_KEEP_MONTHLY = 12
NUM_FILES_TO_KEEP_YEARLY = 10

ob [[ $MODE = "TÄGLICH" ]]; dann
BACKUP_DIR = $ BACKUP_DIR_DAILY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_DAILY
Elif [[ $MODE = "WÖCHENTLICH" ]]; dann
BACKUP_DIR = $ BACKUP_DIR_WEEKLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_WEEKLY
Elif [[ $MODE = "MONATLICH" ]]; dann
BACKUP_DIR = $ BACKUP_DIR_MONTHLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_MONTHLY
Elif [[ $MODE = "JÄHRLICH" ]]; dann
BACKUP_DIR = $ BACKUP_DIR_YEARLY
NUM_FILES_TO_KEEP = $ NUM_FILES_TO_KEEP_YEARLY
sonst
Echo "verfügbar $ MODE Werte: TÄGLICH, MONATLICH, WÖCHENTLICH, JÄHRLICH"
	Ausfahrt 1
fi

NUM_FILES_TO_KEEP = $(( $NUM_FILES_TO_KEEP + 1 ))

_backup () {
	/sbin / Btrfs Subvolume Snapshot -r $ BACKUP_SOURCE_DIR ${BACKUP_DIR}/Backup- $(date +% Y-% m-% d)
}

_Aufräumen () {
	für Datei in $(ls -rt $ BACKUP_DIR | tail -n  +${NUM_FILES_TO_KEEP} ); machen
sudo Btrfs Subvolume löschen ${BACKUP_DIR}/$Datei
	erledigt
}

_backup
_Aufräumen

 

Bad RAID-Controller

IMG_26022014_084034

Wenn Sie ein UCS-Chassis, wo die VMs offline gehen und Sie können nicht die VMs mit vSphere zugreifen, Sie können das Chassis über die IMC Web-Interface neu starten müssen. Aber, wenn Sie es neu starten und es über die IP-KVM-Konsole sehen, das ist, was Sie wollen nicht sehen:

LSI Megaraid SAS-MFI-BIOS
Version 3.20.00 (Bauen November 19, 2010)
Copyright(c) 2010 LSI Corporation
HA -0 (Bus 14 dev 0) LSI Megaraid SAS 9261-8i
FW-Paket: 12.12.0-0038
 
Multibit-ECC-Fehler wurden auf dem RAID-Controller erkannt.
Das DIMM-Modul auf dem Controller ausgetauscht werden muss.
Bitte kontaktieren Sie den technischen Support um dieses Problem zu beheben.
Wenn Sie weiterhin, Datenbeschädigung kann auftreten,.
Drücken Sie 'X', um fortzufahren oder sonst schalten Sie das System und ersetzen die
DIMM-Modul und Neustart. Wenn Sie das DIMM drücken 'X' ersetzt haben, um fortzufahren.
OK, so erhalten TAC am Telefon und haben sie Sie den Ersatz-Controller senden. Hoffentlich, du hast 4 Stunden Reaktions. Hier ist der Link den RAID-Controller in das UCS-Chassis zu ersetzen:
Nach dem Wechsel des RAID-Controllers, Sie wollen die Antriebskonfiguration an die neu ersetzt Controller zu kopieren, um sicherzustellen,. Dies wurde nicht in der Kartenersatz Dokumentation dokumentiert. Hier ist der Link, dies zu tun. Folgen Sie den Anweisungen GENAU:
Überprüfen Sie die virtuellen Geräte zeigen, bis auf den RAID-Controller während des Bootens. noch könnte Dinge gehen Süden. Der vSphere-Client kann CUCM und UCXN zeigen als fehlend. Dies liegt daran, die Datenspeicher sind nicht da,. TAC müssen die Datenspeicher für Sie neu hinzufügen, möglicherweise über CLI. Mehr als wahrscheinlich, das Dateisystem haben Fehler auf den virtuellen Rechnern. Es kann so schlimm sein, dass das nicht mehr startet, so müssen Sie die Wiederherstellungs-CD zu montieren, Boot, um es, dann wählen Sie die Option, um die Dateisystemfehler zu beheben. Danach, greifen ein Bier. Die Server sollten kommen ganz gut.
sehen -> http://iptbuzz.blogspot.de/2011/10/bad-raid-controller-on-ucs-c210-m2.html