在 VPS 上备份 Debian Jessie 64 网络服务器并在 VPS 上的 Debian Jessie 64 上恢复

在 VPS 上备份 Debian Jessie 64 网络服务器并在 VPS 上的 Debian Jessie 64 上恢复

我在数据中心租用了一个 VPS,运行 apache2 网络服务器、nodejs、webmin、phpMyadmin 以及许多其他在 Debian Jessie 64 上安装和配置的软件。

操作系统最初安装时采用了有关磁盘分区的默认设置,因此没有 LVM 和其他东西。

现在我正在研究备份和恢复计划,需要在大约 10 分钟内恢复完整的设置。

我偶然发现了这个有吸引力的解决方案,它简单地说明你从系统的根目录开始制作一个好的 Tar 进行备份,如果需要,它可以在只有操作系统(debian Jessie 64)的新系统的根目录下解压,然后你就可以让全新的完全相同的系统重新上线并运行。

剩下要做的就是更改 DNS 中的 IP,然后我们就很高兴了。

我正在尝试这里描述的解决方案:http://www.aboutdebian.com/tar-backup.htm

我很确定事情不会这么简单,而且我觉得某些文件和目录应该从备份中排除。例如网络接口?在我看来,当你将其从一个复制到另一个时,会发生冲突,因为新的 VPS 有来自其主机的另一个 ip 等。

我还可以理解,目录 /proc 是保存与机器上运行的进程有关的所有数据的目录,绝对不应该备份以进行恢复?

关于如何使用 Tar,有一个简单的答案吗?解压 tar 时我应该排除什么以及在目标机器上应该配置什么?

编辑 简单地打包和解包并不能解决问题。解包到单独的文件夹后,我可以看到,例如 apache2 目录。在根目录中解包后,看不到是什么让这些说明变得完全是胡说八道。

让我们进一步尝试

答案1

我认为这应该可以做到,只需根据您的需要进行修改即可。

备份.sh:

#!/bin/sh

# Backupscript mit TAR
# Definieren der Konstanten
###########################
HOSTNAME="YOUR-SERVER-NAME-HERE"
# Backupname
BACKUPNAME="How your backup will be called"
# Emailempfaenger
EMAIL_TO="your-mail@com"
# Emailsender
EMAIL_FROM="Your Name <[email protected]>"
# Backup Verzeichnis
BACKUP_DIR="/root/scripts/backup"
# zu sicherende Files
LIST=$BACKUP_DIR"/backuplist"
# exkludierte Files
EXLIST=$BACKUP_DIR"/excludelist"
# Name des Backup-Device
#OUTDEV="/dev/st0"
OUTDEV="BACKUP-PATH/backup.`date +%A`.tar.gz"
# Log-Datei
LOGFILE=$BACKUP_DIR"/backup.`date +%A`.log"
# Copy Log
LOGCOPY=$BACKUP_DIR"/copy.log"
# Mail Subject Log
SUBJECT_LOG=$BACKUP_DIR"/subject.log"
# Mount Log
MOUNT_LOG=$BACKUP_DIR"/mount.log"
# tar Kommando zum sichern
# TAR_SICH="tar cvf"
TAR_SICH="tar cvzf"
# tar Kommando zum lesen
# TAR_READ="tar tvf"
TAR_READ="tar tvzf"
# tar Kommando zum zurueckspulen
# TAR_REWIND="mt -f /dev/st0 rewind"
# erwartete Filenamen
FILE_EXP=$BACKUP_DIR"/file_expected"
# gesicherte Filenamen
FILE_BCK=$BACKUP_DIR"/savedfiles"
# gelesene Dateien
FILE_READ=$BACKUP_DIR"/file_read"
# Fehler bei erwartete Filenamen
ERR_EXP=$BACKUP_DIR"/tar_find_error"
# Fehler bei gesicherte Filenamen
ERR_BCK=$BACKUP_DIR"/tar_write_error"
# Fehler bei Band zurueckspulen
ERR_REWIND=$BACKUP_DIR"/tar_rewind_error"
# Fehler bei gelesene Dateien
ERR_READ=$BACKUP_DIR"/tar_read_error"

# Sicherungsprotokolldateien auf NULL setzen
rm $LOGFILE $FILE_EXP $FILE_BCK $FILE_READ $ERR_EXP $ERR_BCK $ERR_REWIND $ERR_READ $SUBJECT_LOG $LOGCOPY $MOUNT_LOG 2> /dev/null
echo "Beginne Sicherung"
echo `date` > $LOGFILE
echo

makebackup() {
    # Ins Root Verzeichnis wechseln
    cd /


    # Eintrag in die LOG 
    echo -n "Start TAR Datensicherung: " >> $LOGFILE
    date >> $LOGFILE
    echo >> $LOGFILE

    # Backuplist in Logfile schreiben
    echo >> $LOGFILE
    echo "Backuplist: " >> $LOGFILE
    cat $LIST >> $LOGFILE
    echo >> $LOGFILE

    # Sichern mit dem TAR Kommando
    echo "Beginne Sicherung ..." >> $LOGFILE
    $TAR_SICH $OUTDEV -T $LIST -X $EXLIST > $FILE_BCK 2> $ERR_BCK
    if [ -s $ERR_BCK ]; then
        cat $ERR_BCK >> $LOGFILE
    fi
    echo "Beende Sicherung ..." >> $LOGFILE
    echo >> $LOGFILE

    # Rueckgabewert von TAR Sicherung speichern
    RC=$?

    # Anzahl gesicherte Dateien speichern
    ANZ_SICH_FILES=`wc $FILE_BCK | awk '{print $1}'`
    echo "Anzahl gesicherte Dateien: " $ANZ_SICH_FILES >> $LOGFILE

    # Dateiverzeichnis des Bandes mit dem TAR Kommando lesen
    $TAR_READ $OUTDEV > $FILE_READ 2> $ERR_READ
    if [ -s $ERR_READ ]; then
        cat $ERR_READ >> $LOGFILE
    fi

    # Anzahl gesicherte Dateien speichern
    ANZ_READ_FILES=`wc $FILE_READ | awk '{print $1}'`
    echo "Anzahl gelesene Dateien  : " $ANZ_READ_FILES >> $LOGFILE
    echo >> $LOGFILE

    du -hs $OUTDEV >> $LOGFILE

    # Wenn die Anzahl erwarteten Dateien ungleich der gelesenen ist
    if [ $ANZ_READ_FILES -ne $ANZ_SICH_FILES ]; then
        echo "FEHLER bei Datensicherung " > $SUBJECT_LOG
        cat $SUBJECT_LOG >> $LOGFILE
        echo -n "Ende Datensicherung: " >> $LOGFILE
        date >> $LOGFILE
    else
        echo "Datensicherung erfolgreich abgeschlossen " > $SUBJECT_LOG
        cat $SUBJECT_LOG >> $LOGFILE
        echo -n "Ende Datensicherung: " >> $LOGFILE
        date >> $LOGFILE
    fi

    if [ $ANZ_READ_FILES != $ANZ_SICH_FILES ]; then
        echo "FEHLER bei Datensicherung " > $SUBJECT_LOG
    fi

    echo >> $LOGFILE

    # Mail Benachrichtigung
    mail $EMAIL_TO -r "`echo $EMAIL_FROM`" -s "`echo "Backup"` - `echo $HOSTNAME` - `echo $BACKUPNAME` - `cat $SUBJECT_LOG`" < $LOGFILE

}



makebackup

#EOF

备份列表(必须与脚本位于同一文件夹中)

/bin
/boot
/etc
/home
/lib
/lib64
/opt
/root
/sbin
/usr
/var

excludelist(也在同一文件夹中)

/var/lib
/var/spool
/var/run
/root/scripts/backup

答案2

/etc 文件夹中这个可怜的小 fstab 文件阻止了我完成这项工作。排除它就成功了。我花了 10 个小时试图排除这个、那个、这个和那个!:)

因此备份是这样的:

tar -zcvpf /tars/$archive_file --directory=/ --exclude='etc/fstab' -- exclude='boot' --exclude='dev' --exclude='var/www/uploads' --exclude='tars'  --exclude='proc' --exclude='sys' --exclude='tmp' --exclude='run' --exclude='mnt' --exclude='media' --exclude='lost+found' .

然后在新系统上全新安装 Debian Jessie 64:

tar -zxvpf transonly-Sunday.gz

重启后就好了!:-)

相关内容