我在数据中心租用了一个 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
重启后就好了!:-)