Benutzer-Werkzeuge

Webseiten-Werkzeuge


tachtler:dovecot_backup_-_skript

Dies ist eine alte Version des Dokuments!


Dovecot Backup - Skript

:!: HINWEIS - Die Nachfolgende Konfiguration von Dovecot setzt eine lauffähige Installation von Dovecot voraus, wie unter nachfolgendem internen Link beschrieben !!!

Dovecot ist ein Open-Source-IMAP-und POP3-E-Mail-Server für Linux bzw. UNIX-ähnlichen Systeme, entwickelt mit dem Hauptaugenmerk auf Sicherheit. Dovecot ist eine ausgezeichnete Wahl für kleine und große Installationen. Dovecot ist schnell und einfach zu installieren, erfordert keine besonderen Voraussetzungen und ist Ressourcenschonend.

Dovecot wird von Timo Sirainen entwickelt.

Ab hier werden root-Rechte zur Ausführung der nachfolgenden Befehle benötigt. Um root zu werden geben Sie bitte folgenden Befehl ein:

$ su -
Password: 

Backup

Nachfolgendes Skript ermöglicht die Erstellung einer *.tar.gz-Datei

  • von allen Benutzerkonten
  • oder über eine Datei mit E-Mail-Adressen, der zu sichernden Benutzerkonten
  • pro Benutzer eine eigene *.tar.gz-Datei
  • auf Dateiebene
  • mit konfigurierbaren Parametern
  • und automatischer Löschung von älteren Sicherungsdateien
  • und Erstellung einer fortlaufenden Log-Datei unter /var/log/

Nachfolgende Parameter sind in der aktuellen Version konfigurierbar: (Nur relevanter Ausschnitt)

...
##############################################################################
# >>> Please edit following lines for personal settings and custom usages. ! #
##############################################################################
 
# CUSTOM - Script-Name.
SCRIPT_NAME='dovecot_backup'
 
# CUSTOM - Backup-Files.
TMP_FOLDER='/srv/backup'
DIR_BACKUP='/srv/backup'
FILE_BACKUP=dovecot_backup_`date '+%Y%m%d_%H%M%S'`.tar.gz
FILE_DELETE='*.tar.gz'
BACKUPFILES_DELETE=14
 
# CUSTOM - dovecot Folders.
MAILDIR_TYPE='maildir'
MAILDIR_NAME='Maildir'
MAILDIR_USER='vmail'
MAILDIR_GROUP='vmail'
 
# CUSTOM - Path and file name of a file with e-mail addresses to backup, if
#          SET. If NOT, the script will determine all mailboxes by default.
# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/email/per/line'
# - OR -
# FILE_USERLIST=''
FILE_USERLIST=''
 
# CUSTOM - Check when FILE_USERLIST was used, if the user per line was a
#          valid e-mail address [Y|N].
FILE_USERLIST_VALIDATE_EMAIL='N'
 
# CUSTOM - Mail-Recipient.
MAIL_RECIPIENT='root@tachtler.net'
 
# CUSTOM - Status-Mail [Y|N].
MAIL_STATUS='N'
 
##############################################################################
# >>> Normaly there is no need to change anything below this comment line. ! #
##############################################################################
...
Parametername Beschreibung
SCRIPT_NAME Name des Skriptes
TMP_FOLDER Verzeichnis in dem ein temporärer Ordner erstellt werden soll, um die Backup-Dateien temporär zu extrahiert, damit diese dann abschließend in ein Archivformat (tar.gz) zu packen
DIR_BACKUP Verzeichnis in dem die Backup-Dateien abgelegt werden sollen
FILE_BACKUP Allgemeiner Teil der Bezeichnung für die Backup-Dateien
FILE_DELETE Endung zur Löschung von älteren Archivdateien, muss wie FILE_BACKUP enden !
BACKUPFILES_DELETE Anzahl der Backup-Dateien pro Benutzer die gespeichert bleiben sollen
MAILDIR_TYPE Maildir-Format - :!: ohne Doppelpunkt
MAILDIR_NAME Name des Maildir-Verzeichnisses unterhalb des home-Verzeichnisses des Benutzers
MAILDIR_USER Benutzername unter dem alle Postfächer (Mailboxes) verwaltet werden, siehe auch:
Dovecot CentOS 6 - Konfiguration Authentifizierung - Authentifizierungsbenutzer
Dovecot CentOS 7 - Konfiguration Authentifizierung - Authentifizierungsbenutzer
MAILDIR_GROUP Benutzergruppe unter dem alle Postfächer (Mailboxes) verwaltet werden, siehe auch:
Dovecot CentOS 6 - Konfiguration Authentifizierung - Authentifizierungsbenutzer
Dovecot CentOS 7 - Konfiguration Authentifizierung - Authentifizierungsbenutzer
FILE_USERLIST Datei mit Benutzernamen (einer pro Zeile), welche Mailboxen/Benutzer gesichert werden, anstelle der Ermittlung durch doveadm user ”*”, um nicht alle Mailboxen/Benutzer zwangsweise zu sichern
FILE_USERLIST_VALIDATE_EMAIL Überprüfung des Benutzernamens, ob dieser eine gültige E-Mail Adresse darstellt. Muss dann deaktiviert werden, wenn der Benutzername keine E-Mail Adresse ist!
MAIL_RECIPIENT Empfänger E-Mail-Adresse für E-Mails des Skripts
MAIL_STATUS Versand einer Status E-Mail nach erfolgreicher Skript Ausführung

/var/lib/dovecot

Damit nachfolgendes Backup-Skript die nötigen Rechte zum lesen der Konfigurationsdatei

  • /var/lib/dovecot/db/shared-mailboxes.db

hat, müssen die Besitzrechte am Verzeichnis

  • /var/lib/dovecot

wie folgt angepasst werden:

# chown dovecot:vmail /var/lib/dovecot

Ein Überprüfung der entsprechenden Besitzrechte sollte dann wie folgt aussehen:

# ls -ld /var/lib/dovecot/
drwxr-x--- 3 dovecot vmail 56 Mar 16 15:01 /var/lib/dovecot/

:!: WICHTIG - Vorhergehend werden der Gruppe vmail die Rechte: lesen und ausführen eingeräumt.

Skript

#!/bin/bash
 
##############################################################################
# Script-Name : dovecot_backup.sh                                            #
# Description : Script to backup the mailboxes from dovecot.                 #
#               On successful execution only a LOG file will be written.     #
#               On error while execution, a LOG file and a error message     #
#               will be send by e-mail.                                      #
#                                                                            #
# Last update : 08.10.2019                                                   #
# Version     : 1.11                                                         #
#                                                                            #
# Author      : Klaus Tachtler, <klaus@tachtler.net>                         #
# DokuWiki    : http://www.dokuwiki.tachtler.net                             #
# Homepage    : http://www.tachtler.net                                      #
#                                                                            #
#  +----------------------------------------------------------------------+  #
#  | This program is free software; you can redistribute it and/or modify |  #
#  | it under the terms of the GNU General Public License as published by |  #
#  | the Free Software Foundation; either version 2 of the License, or    |  #
#  | (at your option) any later version.                                  |  #
#  +----------------------------------------------------------------------+  #
#                                                                            #
# Copyright (c) 2019 by Klaus Tachtler.                                      #
#                                                                            #
##############################################################################
 
##############################################################################
#                                H I S T O R Y                               #
##############################################################################
# Version     : 1.01                                                         #
# Description : Bugfix: Delete all temporary domain directories not only the #
#               last one. Thanks to Guenther J. Niederwimmer.                #
# -------------------------------------------------------------------------- #
# Version     : 1.02                                                         #
# Description : GitHub: Issue #1                                             #
#               The name of the variable to delete the number of old backup  #
#               files $DAYS_DELETE was renamed to $BACKUPFILES_DELETE. This  #
#               was done for better understanding, because if the script was #
#               running more than once a day, this could be misunderstood.   #
#               Thanks to Diane Trout.                                       #
# -------------------------------------------------------------------------- #
# Version     : 1.03                                                         #
# Description : Quota calculation double the calculated size of a mailbox,   #
#               when dict was used. See also following mailing-list entry:   #
#                                                                            #
#               https://www.dovecot.org/list/dovecot/2012-February/          #
#               063585.html                                                  #
#                                                                            #
#               Thanks to André Peters.                                      #
# -------------------------------------------------------------------------- #
# Version     : 1.04                                                         #
# Description : Typo: Correction of the return code query of                 #
#               "# Delete LOCK file." in a pure string comparison.           #
#               Thanks to Oli Sennhauser.                                    #
# -------------------------------------------------------------------------- #
# Version     : 1.05                                                         #
# Description : GitHub: Issue #4                                             #
#               Add error handling for dsync command.                        #
#               Add runtime statistics.                                      #
#               Thanks to HenrikWMG.                                         #
# -------------------------------------------------------------------------- #
# Version     : 1.06                                                         #
# Description : Avoid an error when trying to delete backup files, if the    #
#               $BACKUPFILES_DELETE count is NOT reached.                    #
#               Change file owner, after backup was created.                 #
#               Change file permissions to 600, after backup was created.    #
#               Thanks to Seep1959.                                          #
# -------------------------------------------------------------------------- #
# Version     : 1.07                                                         #
# Description : Compatibility: Change the parameter order for the step       #
#               "Delete archive files for user" for better compatibility     #
#               with FreeBSD.                                                #
#               Thanks to Alexander Preyer.                                  #
# -------------------------------------------------------------------------- #
# Version     : 1.08                                                         #
# Description : GitHub Issue #9                                              #
#               Add ability to only backup specific mailboxes, by using the  # 
#               variable FILE_USERLIST with the file path and file name as   #
#               content. The file must contain one e-mail address per line.  #
#               Add the calculation of the script runtime.                   #
#               Thanks to graue Ritter.                                      #
# -------------------------------------------------------------------------- #
# Version     : 1.09                                                         #
# Description : Add a switch to enable or disable e-mail address check, when #
#               FILE_USERLIST was set and used.                              #
#               Thanks to kbridger.                                          #
# -------------------------------------------------------------------------- #
# Version     : 1.10                                                         #
# Description : Code redesign.                                               #
# -------------------------------------------------------------------------- #
# Version     : 1.11                                                         #
# Description : GitHub Issue #12                                             #
#               Change of the temporary storage medium from DIR_BACKUP to    #
#               TMP_FOLDER for temporary storage of extracted emails from    #
#               the mailboxes was introduced. This allows the use of a       #
#               temporary storage of the extracted emails from the mailboxes #
#               on a faster storage medium, or also on a local storage       #
#               medium, which avoids rights problems if DIR_BACKUP is e.g.   #
#               an NFS mounted storage.                                      #
#               Thanks to Krisztián Hamar.                                   #
# -------------------------------------------------------------------------- #
# Version     : x.xx                                                         #
# Description : <Description>                                                #
# -------------------------------------------------------------------------- #
##############################################################################
 
##############################################################################
# >>> Please edit following lines for personal settings and custom usages. ! #
##############################################################################
 
# CUSTOM - Script-Name.
SCRIPT_NAME='dovecot_backup'
 
# CUSTOM - Backup-Files.
TMP_FOLDER='/srv/backup'
DIR_BACKUP='/srv/backup'
FILE_BACKUP=dovecot_backup_`date '+%Y%m%d_%H%M%S'`.tar.gz
FILE_DELETE='*.tar.gz'
BACKUPFILES_DELETE=14
 
# CUSTOM - dovecot Folders.
MAILDIR_TYPE='maildir'
MAILDIR_NAME='Maildir'
MAILDIR_USER='vmail'
MAILDIR_GROUP='vmail'
 
# CUSTOM - Path and file name of a file with e-mail addresses to backup, if
#          SET. If NOT, the script will determine all mailboxes by default.
# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/user/per/line'
# - OR -
# FILE_USERLIST=''
FILE_USERLIST=''
 
# CUSTOM - Check when FILE_USERLIST was used, if the user per line was a
#          valid e-mail address [Y|N].
FILE_USERLIST_VALIDATE_EMAIL='N'
 
# CUSTOM - Mail-Recipient.
MAIL_RECIPIENT='you@example.com'
 
# CUSTOM - Status-Mail [Y|N].
MAIL_STATUS='N'
 
##############################################################################
# >>> Normaly there is no need to change anything below this comment line. ! #
##############################################################################
 
# Variables.
DSYNC_COMMAND=`command -v dsync`
TAR_COMMAND=`command -v tar`
TOUCH_COMMAND=`command -v touch`
RM_COMMAND=`command -v rm`
PROG_SENDMAIL=`command -v sendmail`
CAT_COMMAND=`command -v cat`
DATE_COMMAND=`command -v date`
MKDIR_COMMAND=`command -v mkdir`
CHOWN_COMMAND=`command -v chown`
CHMOD_COMMAND=`command -v chmod`
MKTEMP_COMMAND=`command -v mktemp`
GREP_COMMAND=`command -v grep`
MV_COMMAND=`which --skip-alias mv`
FILE_LOCK='/tmp/'$SCRIPT_NAME'.lock'
FILE_LOG='/var/log/'$SCRIPT_NAME'.log'
FILE_LAST_LOG='/tmp/'$SCRIPT_NAME'.log'
FILE_MAIL='/tmp/'$SCRIPT_NAME'.mail'
FILE_MBOXLIST='/tmp/'$SCRIPT_NAME'.mboxlist'
VAR_HOSTNAME=`uname -n`
VAR_SENDER='root@'$VAR_HOSTNAME
VAR_EMAILDATE=`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`
declare -a VAR_LISTED_USER=()
declare -a VAR_FAILED_USER=()
VAR_COUNT_USER=0
VAR_COUNT_FAIL=0
 
# Functions.
function log() {
        echo $1
        echo `$DATE_COMMAND '+%Y/%m/%d %H:%M:%S'` " INFO:" $1 >>${FILE_LAST_LOG}
}
 
function retval() {
if [ "$?" != "0" ]; then
        case "$?" in
        *)
                log "ERROR: Unknown error $?"
        ;;
        esac
fi
}
 
function movelog() {
	$CAT_COMMAND $FILE_LAST_LOG >> $FILE_LOG
	$RM_COMMAND -f $FILE_LAST_LOG	
	$RM_COMMAND -f $FILE_LOCK
}
 
function sendmail() {
        case "$1" in
        'STATUS')
                MAIL_SUBJECT='Status execution '$SCRIPT_NAME' script.'
        ;;
        *)
                MAIL_SUBJECT='ERROR while execution '$SCRIPT_NAME' script !!!'
        ;;
        esac
 
$CAT_COMMAND <<MAIL >$FILE_MAIL
Subject: $MAIL_SUBJECT
Date: $VAR_EMAILDATE
From: $VAR_SENDER
To: $MAIL_RECIPIENT
 
MAIL
 
$CAT_COMMAND $FILE_LAST_LOG >> $FILE_MAIL
 
$PROG_SENDMAIL -f $VAR_SENDER -t $MAIL_RECIPIENT < $FILE_MAIL
 
$RM_COMMAND -f $FILE_MAIL
 
}
 
function error () {
	# Parameters.
	CODE_ERROR="$1"
 
        sendmail ERROR
	movelog
	exit $CODE_ERROR
}
 
function headerblock () {
	# Parameters.
	TEXT_INPUT="$1"
	LINE_COUNT=68
 
        # Help variables.
        WORD_COUNT=`echo $TEXT_INPUT | wc -c`
        CHAR_AFTER=`expr $LINE_COUNT - $WORD_COUNT - 5`
        LINE_SPACE=`expr $LINE_COUNT - 3`
 
	# Format placeholder.
	if [ "$CHAR_AFTER" -lt "0" ]; then
		CHAR_AFTER="0"
	fi
 
	printf -v char '%*s' $CHAR_AFTER ''
	printf -v line '%*s' $LINE_SPACE ''
 
	log "+${line// /-}+"
	log "| $TEXT_INPUT${char// /.} |"
	log "+${line// /-}+"
}
 
function logline () {
	# Parameters.
	TEXT_INPUT="$1"
	TRUE_FALSE="$2"
	LINE_COUNT=68
 
        # Help variables.
        WORD_COUNT=`echo $TEXT_INPUT | wc -c`
        CHAR_AFTER=`expr $LINE_COUNT - $WORD_COUNT - 9`
 
	# Format placeholder.
	if [ "$CHAR_AFTER" -lt "0" ]; then
		CHAR_AFTER="0"
	fi
 
	printf -v char '%*s' $CHAR_AFTER ''
 
	if [ "$TRUE_FALSE" == "true" ]; then
		log "$TEXT_INPUT${char// /.}[  OK  ]"
	else
		log "$TEXT_INPUT${char// /.}[FAILED]"
	fi
}
 
function checkcommand () {
	# Parameters.
        CHECK_COMMAND="$1"
 
	if [ ! -s "$1" ]; then
		logline "Check if command '$CHECK_COMMAND' was found " false
		error 10
	else
		logline "Check if command '$CHECK_COMMAND' was found " true
	fi
}
 
# Main.
log ""
RUN_TIMESTAMP=`$DATE_COMMAND '+%s'`
headerblock "Start backup of the mailboxes [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`]"
log ""
log "SCRIPT_NAME.................: $SCRIPT_NAME"
log ""
log "TMP_FOLDER..................: $TMP_FOLDER"
log "DIR_BACKUP..................: $DIR_BACKUP"
log ""
log "MAIL_RECIPIENT..............: $MAIL_RECIPIENT"
log "MAIL_STATUS.................: $MAIL_STATUS"
log ""
log "FILE_USERLIST...............: $FILE_USERLIST"
log "FILE_USERLIST_VALIDATE_EMAIL: $FILE_USERLIST_VALIDATE_EMAIL"
log ""
 
# Check if command (file) NOT exist OR IS empty.
checkcommand $DSYNC_COMMAND
checkcommand $TAR_COMMAND
checkcommand $TOUCH_COMMAND
checkcommand $RM_COMMAND
checkcommand $CAT_COMMAND
checkcommand $DATE_COMMAND
checkcommand $MKDIR_COMMAND
checkcommand $CHOWN_COMMAND
checkcommand $CHMOD_COMMAND
checkcommand $GREP_COMMAND
checkcommand $MKTEMP_COMMAND
checkcommand $MV_COMMAND
checkcommand $PROG_SENDMAIL
 
# Check if LOCK file NOT exist.
if [ ! -e "$FILE_LOCK" ]; then
        logline "Check if the script is NOT already runnig " true
 
        $TOUCH_COMMAND $FILE_LOCK
else
        logline "Check if the script is NOT already runnig " false
        log ""
        log "ERROR: The script was already running, or LOCK file already exists!"
        log ""
	error 20
fi
 
# Check if DIR_BACKUP directory NOT exists.
if [ ! -d "$DIR_BACKUP" ]; then
        logline "Check if DIR_BACKUP exists " false
	$MKDIR_COMMAND -p $DIR_BACKUP
	if [ "$?" != "0" ]; then
        	logline "DIR_BACKUP was NOT created " false
		error 21
	else
        	logline "DIR_BACKUP was now created " true
	fi
else
        logline "Check if DIR_BACKUP exists " true
fi
 
# Check if FILE_USERLIST NOT set OR IS empty.
log ""
if [ ! -n "$FILE_USERLIST"  ]; then
        log "Check if the variable FILE_USERLIST is set ................[  NO  ]"
        log "Mailboxes to backup will be determined by doveadm user \"*\"."
 
	for users in `doveadm user "*"`; do
		VAR_LISTED_USER+=($users);
	done
else
        logline "Check if the variable FILE_USERLIST is set " true
        log "Mailboxes to backup will be read from file."
        log ""
        log "- File: [$FILE_USERLIST]"
 
	# Check if file exists.
	if [ -f "$FILE_USERLIST" ]; then
        	logline "- Check if FILE_USERLIST exists " true
	else
        	logline "- Check if FILE_USERLIST exists " false
        	log ""
		error 30
	fi
 
	# Check if file is readable.
	if [ -r "$FILE_USERLIST" ]; then
        	logline "- Check if FILE_USERLIST is readable " true
	else
        	logline "- Check if FILE_USERLIST is readable " false
        	log ""
		error 31
	fi
 
	# Read file into variable.
	while IFS= read -r line
	do	
		# Check for valid e-mail address.
		if [ $FILE_USERLIST_VALIDATE_EMAIL = 'Y' ]; then
			# Check if basic email address syntax is valid.
			if echo "${line}" | $GREP_COMMAND '^[a-zA-Z0-9]*@[a-zA-Z0-9]*\.[a-zA-Z0-9]*$' >/dev/null; then
				VAR_LISTED_USER+=($line);
			else
        			log ""
		        	log "ERROR: The user: $line is NOT valid e-mail address!"
 
	                	((VAR_COUNT_FAIL++))
	                	VAR_FAILED_USER+=($line);
			fi
		else
			VAR_LISTED_USER+=($line);
		fi
	done <"$FILE_USERLIST"
 
	# Check if VAR_COUNT_FAIL is greater than zero. If YES, set VAR_COUNT_USER to VAR_COUNT_FAIL.
	if [ "$VAR_COUNT_FAIL" -ne "0" ]; then
		VAR_COUNT_USER=$VAR_COUNT_FAIL
	fi
fi
 
# Start backup.
log ""
headerblock "Run backup $SCRIPT_NAME "
log ""
 
# Check if TMP_FOLDER directory path NOT exists, else create it.
if [ ! -d "$TMP_FOLDER" ]; then
        logline "Check if TMP_FOLDER exists " false
	$MKDIR_COMMAND -p $TMP_FOLDER
	if [ "$?" != "0" ]; then
		logline "Create temporary '$TMP_FOLDER' folder " false
		error 40
	else
		logline "Create temporary '$TMP_FOLDER' folder " true
	fi
else
        logline "Check if TMP_FOLDER exists " true
fi
 
# Make temporary directory DIR_TEMP inside TMP_FOLDER.
DIR_TEMP=$($MKTEMP_COMMAND -d -p $TMP_FOLDER -t $SCRIPT_NAME-XXXXXXXXXXXX)
if [ "$?" != "0" ]; then
	logline "Create temporary '$DIR_TEMP' folder " false
	error 41
else
	logline "Create temporary '$DIR_TEMP' folder " true
	log ""
fi
 
# Set rights permissions to DIR_TEMP.
$CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_TEMP
 
# Start real backup process for all users.
for users in "${VAR_LISTED_USER[@]}"; do
	log "Start backup process for user: $users ..."
 
	((VAR_COUNT_USER++))
	DOMAINPART=${users#*@}
	LOCALPART=${users%%@*}
	LOCATION="$DIR_TEMP/$DOMAINPART/$LOCALPART/$MAILDIR_NAME"
	USERPART="$DOMAINPART/$LOCALPART"
 
	log "Extract mailbox data for user: $users ..."
	$DSYNC_COMMAND -o plugin/quota= -f -u $users backup $MAILDIR_TYPE:$LOCATION
 
	# Check the status of dsync and continue the script depending on the result.
	if [ "$?" != "0" ]; then
		case "$?" in
		1)	log "Synchronization failed > user: $users !!!"
			;;
		2)	log "Synchronization was done without errors, but some changes couldn't be done, so the mailboxes aren't perfectly synchronized for user: $users !!!"
			;;
		esac
		if [ "$?" -gt "3" ]; then
			log "Synchronization failed > user: $users !!!"
		fi
 
		((VAR_COUNT_FAIL++))
		VAR_FAILED_USER+=($users);
	else
        	log "Synchronization done for user: $users ..."
 
		cd $DIR_TEMP
 
		log "Packaging to archive for user: $users ..."
		$TAR_COMMAND -cvzf $users-$FILE_BACKUP $USERPART --atime-preserve --preserve-permissions
 
		log "Delete mailbox files for user: $users ..."
		$RM_COMMAND "$DIR_TEMP/$DOMAINPART" -rf
		if [ "$?" != "0" ]; then
        		logline "Delete mailbox files at: $DIR_TEMP " false
		else
        		logline "Delete mailbox files at: $DIR_TEMP " true
		fi
 
		log "Copying archive file for user: $users ..."
		$MV_COMMAND "$DIR_TEMP/$users-$FILE_BACKUP" "$DIR_BACKUP"
		if [ "$?" != "0" ]; then
        		logline "Move archive file for user to: $DIR_BACKUP " false
		else
        		logline "Move archive file for user to: $DIR_BACKUP " true
		fi
 
		cd $DIR_BACKUP
 
		log "Delete archive files for user: $users ..."
		(ls -t $users-$FILE_DELETE|head -n $BACKUPFILES_DELETE;ls $users-$FILE_DELETE)|sort|uniq -u|xargs -r rm
		if [ "$?" != "0" ]; then
        		logline "Delete old archive files from: $DIR_BACKUP " false
		else
        		logline "Delete old archive files from: $DIR_BACKUP " true
		fi
	fi
 
	log "Ended backup process for user: $users ..."
        log ""
done
 
# Delete the temporary folder DIR_TEMP.
$RM_COMMAND $DIR_TEMP -rf
if [ "$?" != "0" ]; then
	logline "Delete temporary '$DIR_TEMP' folder " false
	error 42
else
	logline "Delete temporary '$DIR_TEMP' folder " true
	log ""
fi
 
# Set owner and rights permissions to backup directory and backup files.
$CHOWN_COMMAND -R $MAILDIR_USER:$MAILDIR_GROUP $DIR_BACKUP
$CHMOD_COMMAND 700 $DIR_BACKUP
$CHMOD_COMMAND -R 600 $DIR_BACKUP/*
 
# Delete LOCK file.
if [ "$?" != "0" ]; then
        retval $?
        log ""
        $RM_COMMAND -f $FILE_LOCK
	error 99
else
	headerblock "End backup $SCRIPT_NAME "
        log ""
fi
 
# Finish syncing with runntime statistics.
headerblock "Runtime statistics "
log ""
log "- Number of determined users: $VAR_COUNT_USER"
log "- ...Summary of failed users: $VAR_COUNT_FAIL"
 
if [ "$VAR_COUNT_FAIL" -gt "0" ]; then
	log "- ...Mailbox of failed users: "
	for i in "${VAR_FAILED_USER[@]}"
	do
		log "- ... $i"
	done
fi
 
log ""
END_TIMESTAMP=`$DATE_COMMAND '+%s'`
log "Runtime: `$DATE_COMMAND -u -d "0 $END_TIMESTAMP seconds - $RUN_TIMESTAMP seconds" +'%H:%M:%S'` time elapsed."
log ""
headerblock "Finished creating the backups [`$DATE_COMMAND '+%a, %d %b %Y %H:%M:%S (%Z)'`]"
log ""
 
# If errors occurred on user backups, exit with return code 1 instead of 0.
if [ "$VAR_COUNT_FAIL" -gt "0" ]; then
        sendmail ERROR
	movelog
	exit 1
else
	# Status e-mail.
	if [ $MAIL_STATUS = 'Y' ]; then
        	sendmail STATUS
	fi
	movelog
	exit 0
fi

Beispieldatei: FILE_USERLIST

Nachfolgend eine Beispiel für den Inhalt einer Datei, welche unter der Variable:

# CUSTOM - Path and file name of a file with e-mail addresses to backup, if
#          SET. If NOT, the script will determine all mailboxes by default.
# FILE_USERLIST='/path/and/file/name/of/user/list/with/one/email/per/line'
# - OR -
# FILE_USERLIST=''
FILE_USERLIST='/srv/dovecot_backup.userlist'

definiert werden kann:

klaus@tachtler.net
petra@tachtler.net

oder

klaus
petra

Skript - Log

Nachfolgende Log-Datei entsteht im Verzeichnis

  • /var/log/ - hier z.B. /var/log/dovecot_backup.log

OHNE FILE_USERLIST:

2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO: | Start backup of the mailboxes [Wed, 16 Oct 2019 04:00:02 (CEST)] |
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: SCRIPT_NAME.................: dovecot_backup
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: TMP_FOLDER..................: /srv/backup
2019/10/16 04:00:02  INFO: DIR_BACKUP..................: /srv/backup
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: MAIL_RECIPIENT..............: you@example.com
2019/10/16 04:00:02  INFO: MAIL_STATUS.................: N
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: FILE_USERLIST...............:
2019/10/16 04:00:02  INFO: FILE_USERLIST_VALIDATE_EMAIL: N
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: Check if command '/bin/dsync' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/tar' was found .....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/touch' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/rm' was found ......................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/cat' was found .....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/date' was found ....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/mkdir' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/chown' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/chmod' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/grep' was found ....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/mktemp' was found ..................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/mv' was found ......................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/sbin/sendmail' was found ...............[ OK ]
2019/10/16 04:00:02  INFO: Check if the script is NOT already runnig .................[ OK ]
2019/10/16 04:00:02  INFO: Check if DIR_BACKUP exists ................................[ OK ]
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: Check if the variable FILE_USERLIST is set ................[ NO ]
2019/10/16 04:00:02  INFO: Mailboxes to backup will be determined by doveadm user "*".
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO: | Run backup dovecot_backup ..................................... |
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: Check if TMP_FOLDER exists ................................[ OK ]
2019/10/16 04:00:02  INFO: Create temporary '/srv/backup/dovecot_backup-kKnIclhvj92B' folder [ OK ]
2019/10/16 04:00:05  INFO: Start backup process for user: klaus@tachtler.net ...
2019/10/16 04:00:05  INFO: Extract mailbox data for user: klaus@tachtler.net ...
2019/10/16 04:03:32  INFO: Synchronization done for user: klaus@tachtler.net ...
2019/10/16 04:03:32  INFO: Packaging to archive for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Delete mailbox files for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Delete mailbox files at: /srv/backup/dovecot_backup-kKnIclhvj92B [ OK ]
2019/10/16 04:03:37  INFO: Copying archive file for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Move archive file for user to: /srv/backup ................[ OK ]
2019/10/16 04:03:37  INFO: Delete archive files for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Delete old archive files from: /srv/backup ................[ OK ]
2019/10/16 04:03:37  INFO: Ended backup process for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO:
2019/10/16 04:03:37  INFO: Start backup process for user: petra@tachtler.net ...
2019/10/16 04:03:37  INFO: Extract mailbox data for user: petra@tachtler.net ...
2019/10/16 04:03:45  INFO: Synchronization done for user: petra@tachtler.net ...
2019/10/16 04:03:45  INFO: Packaging to archive for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Delete mailbox files for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Delete mailbox files at: /srv/backup/dovecot_backup-kKnIclhvj92B [ OK ]
2019/10/16 04:03:46  INFO: Copying archive file for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Move archive file for user to: /srv/backup ................[ OK ]
2019/10/16 04:03:46  INFO: Delete archive files for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Delete old archive files from: /srv/backup ................[ OK ]
2019/10/16 04:03:46  INFO: Ended backup process for user: petra@tachtler.net ...
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: Delete temporary '/srv/backup/dovecot_backup-kKnIclhvj92B' folder [ OK ]
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO: | End backup dovecot_backup ..................................... |
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO: | Runtime statistics ............................................ |
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: - Number of determined users: 2
2019/10/16 04:03:53  INFO: - ...Summary of failed users: 0
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: Runtime: 00:03:51 time elapsed.
2019/10/16 04:03:54  INFO:
2019/10/16 04:03:54  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:54  INFO: | Finished creating the backups [Wed, 16 Oct 2019 04:03:54 (CEST)] |
2019/10/16 04:03:54  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:54  INFO:

MIT FILE_USERLIST:

2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO: | Start backup of the mailboxes [Wed, 16 Oct 2019 04:00:02 (CEST)] |
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: SCRIPT_NAME.................: dovecot_backup
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: TMP_FOLDER..................: /srv/backup
2019/10/16 04:00:02  INFO: DIR_BACKUP..................: /srv/backup
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: MAIL_RECIPIENT..............: you@example.com
2019/10/16 04:00:02  INFO: MAIL_STATUS.................: N
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: FILE_USERLIST...............: /srv/dovecot_backup.userlist
2019/10/16 04:00:02  INFO: FILE_USERLIST_VALIDATE_EMAIL: Y
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: Check if command '/bin/dsync' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/tar' was found .....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/touch' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/rm' was found ......................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/cat' was found .....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/date' was found ....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/mkdir' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/chown' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/chmod' was found ...................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/grep' was found ....................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/mktemp' was found ..................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/bin/mv' was found ......................[ OK ]
2019/10/16 04:00:02  INFO: Check if command '/sbin/sendmail' was found ...............[ OK ]
2019/10/16 04:00:02  INFO: Check if the script is NOT already runnig .................[ OK ]
2019/10/16 04:00:02  INFO: Check if DIR_BACKUP exists ................................[ OK ]
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: Check if the variable FILE_USERLIST is set.................[ OK ]
2019/10/16 04:00:02  INFO: Mailboxes to backup will read from file.
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: - File: [/home/klaus/dovecot_backup.userlist]
2019/10/16 04:00:02  INFO: - Check if FILE_USERLIST exists............................[ OK ]
2019/10/16 04:00:02  INFO: - Check if FILE_USERLIST is readable.......................[ OK ]
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: ERROR: The user: notvaild_email.net is NOT valid e-mail address!
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO: | Run backup dovecot_backup ..................................... |
2019/10/16 04:00:02  INFO: +-----------------------------------------------------------------+
2019/10/16 04:00:02  INFO:
2019/10/16 04:00:02  INFO: Check if TMP_FOLDER exists ................................[ OK ]
2019/10/16 04:00:02  INFO: Create temporary '/srv/backup/dovecot_backup-kKnIclhvj92B' folder [ OK ]
2019/10/16 04:00:05  INFO: Start backup process for user: klaus@tachtler.net ...
2019/10/16 04:00:05  INFO: Extract mailbox data for user: klaus@tachtler.net ...
2019/10/16 04:03:32  INFO: Synchronization done for user: klaus@tachtler.net ...
2019/10/16 04:03:32  INFO: Packaging to archive for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Delete mailbox files for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Delete mailbox files at: /srv/backup/dovecot_backup-kKnIclhvj92B [ OK ]
2019/10/16 04:03:37  INFO: Copying archive file for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Move archive file for user to: /srv/backup ................[ OK ]
2019/10/16 04:03:37  INFO: Delete archive files for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO: Delete old archive files from: /srv/backup ................[ OK ]
2019/10/16 04:03:37  INFO: Ended backup process for user: klaus@tachtler.net ...
2019/10/16 04:03:37  INFO:
2019/10/16 04:03:37  INFO: Start backup process for user: petra@tachtler.net ...
2019/10/16 04:03:37  INFO: Extract mailbox data for user: petra@tachtler.net ...
2019/10/16 04:03:45  INFO: Synchronization done for user: petra@tachtler.net ...
2019/10/16 04:03:45  INFO: Packaging to archive for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Delete mailbox files for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Delete mailbox files at: /srv/backup/dovecot_backup-kKnIclhvj92B [ OK ]
2019/10/16 04:03:46  INFO: Copying archive file for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Move archive file for user to: /srv/backup ................[ OK ]
2019/10/16 04:03:46  INFO: Delete archive files for user: petra@tachtler.net ...
2019/10/16 04:03:46  INFO: Delete old archive files from: /srv/backup ................[ OK ]
2019/10/16 04:03:46  INFO: Ended backup process for user: petra@tachtler.net ...
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: Delete temporary '/srv/backup/dovecot_backup-kKnIclhvj92B' folder [ OK ]
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO: | End backup dovecot_backup ..................................... |
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO: | Runtime statistics ............................................ |
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO:2019/01/30 15:07:56  INFO: - Number of determined users: 3
2019/10/16 04:03:53  INFO: - ...Summary of failed users: 1
2019/10/16 04:03:53  INFO: - ...Mailbox of failed users:
2019/10/16 04:03:53  INFO: - ... notvaild_email.net
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: Runtime: 00:03:56 time elapsed.
2019/10/16 04:03:53  INFO:
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO: | Finished creating the backups [Wed, 30 Jan 2019 15:07:56 (CET)] |
2019/10/16 04:03:53  INFO: +-----------------------------------------------------------------+
2019/10/16 04:03:53  INFO:

Anmerkung zur Ausführung:

:!: HINWEIS - Bis Version 1.05 !

:!: HINWEIS - Falls nachfolgende Fehlermeldung auftreten sollte:

...  INFO: Delete old archive files /srv/backup ......................[FAILED]

bedeutet dies nur, dass noch nicht genug alte Archivdateien vorhanden sind, damit diese gelöscht werden können!

Skript - Logrotate

Damit die LOG-Datei des Skriptes nicht ins unendliche wächst, sollte diese ebenfalls, wie auch die Log-Dateien von Dovecot selbst, rotiert werden.

Um die LOG-Dateien des Skriptes ebenfalls wie die LOG-Dateien von Dovecot selbst zu rotieren ist nachfolgende Ergänzung in der Kofigurationsdatei

  • /etc/logrotate.d/dovecot

erforderlich:

VORHER: (Komplette Konfigurationsdatei)

# dovecot SIGUSR1: Re-opens the log files.
/var/log/dovecot.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true
  endscript
}

NACHHER: (Komplette Konfigurationsdatei)

# dovecot SIGUSR1: Re-opens the log files.
/var/log/dovecot.log /var/log/dovecot_backup.log {
  missingok
  notifempty
  delaycompress
  sharedscripts
  postrotate
    /bin/kill -USR1 `cat /var/run/dovecot/master.pid 2>/dev/null` 2> /dev/null || true
  endscript
}

Nachfolgend die geänderte Zeile (Nur relevanter Ausschnitt):

...
/var/log/dovecot.log /var/log/dovecot_backup.log {
...

Skript - cron-Job

Nachfolgend kann auch ein cron-Job zur z.B. nächtlichen Ausführung eingerichtet werden. Dazu können nachfolgende zwei Konfigurationszeilen an die bestehende Konfigurationsdatei

  • /etc/crontab

angehängt werden:

# Backup dovecot mailboxes
5 03 * * * root /usr/local/bin/dovecot_backup.sh > /dev/null 2>&1

* Ausführung nächtlich um 03:05 Uhr

Skript - Dateien

Nachfolgend sollten nachfolgende Dateien im Backup-Verzeichnis, welches im Skript definiert ist, erstellt worden sein, nachdem das Skript zur Ausführung gekommen ist. Hier z.B. /srv/backup/, was mit nachfolgendem Befehl überprüft werden kann:

# ls -la /srv/backup/
total 50108
drwx------  2 vmail vmail     4096 Apr 29 15:11 .
drwxr-xr-x. 4 root  root      4096 Apr 29 13:03 ..
-rw-------  1 vmail vmail 51290558 Apr 29 15:11 klaus@tachtler.net-dovecot_backup_20140429_151044.tar.gz
-rw-------  1 vmail vmail 21230432 Apr 29 15:12 petra@tachtler.net-dovecot_backup_20140429_151044.tar.gz

Recovery

Die Erstellung eines Backups (Sicherung) ist eine Sache, jedoch wie können im Fall eines Datenverlusts, die Daten wiederhergestellt werden.

Entpacken

Nachfolgendes Beispiel zeigt, wie zuerst die im Backup enthaltenen Daten in eine Verzeichnis unterhalb von

  • /tmp

wiederhergestellt werden können.

Dazu kann mit nachfolgendem Befehl ein Verzeichnis mit dem Namen recovery unterhalb des Verzeichnisses /tmp angelegt werden:

# mkdir /tmp/recovery

Anschließend kann dann mit nachfolgendem Befehl das komplette Maildir-Verzeichnis aller Benutzer unterhalb einer ganzen Domäne wiederhergestellt werden:

Als Beispiel sind hier nachfolgende Gegebenheiten angenommen:

  1. Das Backup befindet sich unter /srv/backup
  2. Der Benutzer lautet klaus@tachtler.net
# tar -xvzf /srv/backup/klaus@tachtler.net-dovecot_backup_20140429_151044.tar.gz -C /tmp/recovery --atime-preserve --preserve-permissions

Nach erfolgreicher Ausführung des oben gezeigten Befehls, kann mit nachfolgendem Befehl überprüft werden, ob alle Daten aus der Backup-Datei erfolgreich extrahiert werden konnten:

# ls -la /tmp/recovery/tachtler.net/klaus/Maildir
total 464
drwx------ 30 vmail vmail   4096 Apr 29 15:11 .
drwx------  3 vmail vmail   4096 Apr 29 15:10 ..
drwx------  2 vmail vmail  36864 Apr 29 15:11 cur
-rw-------  1 vmail vmail      0 Apr 29 15:10 dovecot-acl-list
-rw-------  1 vmail vmail 260484 Apr 29 15:11 dovecot.index.cache
-rw-------  1 vmail vmail   8640 Apr 29 15:11 dovecot.index.log
-rw-------  1 vmail vmail     24 Apr 29 15:11 dovecot-keywords
-rw-------  1 vmail vmail    648 Apr 29 15:10 dovecot.mailbox.log
-rw-------  1 vmail vmail  20649 Apr 29 15:11 dovecot-uidlist
-rw-------  1 vmail vmail      8 Apr 29 15:10 dovecot-uidvalidity
-r--r--r--  1 vmail vmail      0 Apr 29 15:10 dovecot-uidvalidity.535fa4ee
drwx------  5 vmail vmail   4096 Apr 29 15:11 .Drafts
drwx------  5 vmail vmail   4096 Apr 29 15:11 .Junk
-rw-------  1 vmail vmail      0 Apr 29 15:10 maildirfolder
-rw-------  1 vmail vmail     81 Apr 29 15:11 maildirsize
drwx------  2 vmail vmail   4096 Apr 29 15:10 new
drwx------  5 vmail vmail   4096 Apr 29 15:11 .Sent
-rw-------  1 vmail vmail    574 Apr 29 15:10 subscriptions
drwx------  2 vmail vmail   4096 Apr 29 15:11 tmp
drwx------  5 vmail vmail   4096 Apr 29 15:11 .Trash

dsync-Befehl

Nachfolgender Befehl kopiert dann im laufenden Betrieb, die Daten in das Maildir-Verzeichnis von Dovecot zurück.

Als Beispiel sind hier nachfolgende Gegebenheiten angenommen:

  1. Das Backup befindet sich unter /tmp/recovery/tachtler.net/klaus/Maildir/
  2. Der Benutzer lautet klaus@tachtler.net
# dsync -R -f -u klaus@tachtler.net backup maildir:/tmp/recovery/tachtler.net/klaus/Maildir

Mit nachfolgendem Befehl kann nun überprüft werden, ob das recovery (zurück kopieren) erfolgreich war.

Als Beispiel sind hier nachfolgende Gegebenheiten angenommen:

  1. Das Backup befindet sich unter /tmp/recovery/tachtler.net/klaus/Maildir/
  2. Der Benutzer lautet klaus@tachtler.net
  3. Das Maildir-Verzeichnis unter Dovecot befindet sich unter /var/spool/vmail/tachtler.net/klaus/Maildir
# ls -la /var/spool/vmail/tachtler.net/klaus/Maildir
total 480
drwx------ 30 vmail vmail   4096 Apr 29 16:27 .
drwx------  4 vmail vmail   4096 Apr 29 12:27 ..
drwx------  2 vmail vmail  36864 Apr 29 16:27 cur
-rw-------  1 vmail vmail      0 Apr 29 16:26 dovecot-acl-list
-rw-------  1 vmail vmail 260484 Apr 29 16:27 dovecot.index.cache
-rw-------  1 vmail vmail   8556 Apr 29 16:27 dovecot.index.log
-rw-------  1 vmail vmail    648 Apr 29 16:26 dovecot.mailbox.log
-rw-------  1 vmail vmail  20649 Apr 29 16:27 dovecot-uidlist
-rw-------  1 vmail vmail      8 Apr 29 16:26 dovecot-uidvalidity
-r--r--r--  1 vmail vmail      0 Apr 29 16:26 dovecot-uidvalidity.535fb6a3
drwx------  5 vmail vmail   4096 Apr 29 16:27 .Drafts
drwx------  6 vmail vmail   4096 Apr 29 16:27 .Junk
-rw-------  1 vmail vmail      0 Apr 29 16:26 maildirfolder
-rw-------  1 vmail vmail     25 Apr 29 16:27 maildirsize
drwx------  2 vmail vmail   4096 Apr 29 16:26 new
drwx------  5 vmail vmail   4096 Apr 29 16:27 .Sent
-rw-------  1 vmail vmail    574 Apr 29 16:26 subscriptions
drwx------  2 vmail vmail  24576 Apr 29 16:27 tmp
drwx------  5 vmail vmail   4096 Apr 29 16:27 .Trash

Login-Test mit telnet

Um zu Überprüfen, ob eine Anmeldung als Benutzer von einem entfernten Rechner möglich ist, kann nachfolgender Befehl genutzt werden:

# telnet 192.168.0.80 143
Trying 192.168.0.80...
Connected to 192.168.0.80.
Escape character is '^]'.
* OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE STARTTLS AUTH=PLAIN AUTH=DIGEST-MD5
AUTH=CRAM-MD5 AUTH=LOGIN] Dovecot ready.
a1 login klaus@tachtler.net geheim
a1 OK [CAPABILITY IMAP4rev1 LITERAL+ SASL-IR LOGIN-REFERRALS ID ENABLE IDLE SORT SORT=DISPLAY
THREAD=REFERENCES THREAD=REFS THREAD=ORDEREDSUBJECT MULTIAPPEND URL-PARTIAL CATENATE UNSELECT CHILDREN
NAMESPACE UIDPLUS LIST-EXTENDED I18NLEVEL=1 CONDSTORE QRESYNC ESEARCH ESORT SEARCHRES WITHIN CONTEXT=SEARCH
LIST-STATUS SPECIAL-USE BINARY MOVE COMPRESS=DEFLATE QUOTA ACL RIGHTS=texk] Logged in
a2 list "" "*"
* LIST (\HasChildren) "/" INBOX
* LIST (\HasNoChildren \Junk) "/" INBOX/Junk
* LIST (\HasNoChildren \Sent) "/" INBOX/Sent
* LIST (\HasNoChildren \Trash) "/" INBOX/Trash
* LIST (\HasNoChildren \Drafts) "/" INBOX/Drafts
a2 OK List completed.
a3 logout
* BYE Logging out
a3 OK Logout completed.
Connection closed by foreign host.

Erforderliche Benutzereingaben:

  1. telnet 192.168.0.80 143
  2. a1 login klaus@tachtler.net geheim
  3. a2 list "" "*"
  4. a3 logout
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
tachtler/dovecot_backup_-_skript.1571231230.txt.gz · Zuletzt geändert: 2019/10/16 15:07 von klaus