All pastes #394657 Raw Edit

lvm-backup-v6.sh

public shellscript v1 · immutable
·published 2007-03-14 14:19 UTC
rendered paste body
#! /bin/shbackup_dir="$1"log_file="$backup_dir/lvm-backup-log.txt"# Pfad zum vol_id Programm angeben - wird mit udev geliefert.VOL_ID="/lib/udev/vol_id"echo `date`: "Starte Sicherung" >> $log_file# Partitionstabelle auslesenecho `date`: "Partitionstabelle:" >> $log_filesfdisk -d | tee -a $log_file > "$backup_dir/sfdisk.txt" echo `date`: "-----------------------------------------------------------------------------  1" >> $log_file# Vorhandene PVs, VGs und LVs auslesenecho `date`: "Physical Volumes (PVs):" >> $log_filepvdisplay -C --noheadings | tee -a $log_file > "$backup_dir/pvdisplay.txt"echo `date`: "-----------------------------------------------------------------------------  2" >> $log_fileecho `date`: "Volume Groups (VGs):" >> $log_filevgdisplay -C --noheadings | tee -a $log_file > "$backup_dir/vgdisplay.txt"echo `date`: "-----------------------------------------------------------------------------  3" >> $log_fileecho `date`: "Logical Volumes (LVs):" >> $log_filelvdisplay -C --noheadings --units m | tee -a $log_file > "$backup_dir/lvdisplay.txt"echo `date`: "-----------------------------------------------------------------------------  4" >> $log_file# Mountverzeichnis für root anlegenecho `date`: "Mounte / nach /tmp/backup.root.$$" >> $log_filemkdir -p /tmp/backup.root.$$# Root in das Mountverzeichnis einhängenmount -v -o bind / /tmp/backup.root.$$ 2>&1 | tee -a $log_file# In das Mountverzeichnis wechselnecho `date`: "Erstelle Backup von / in Datei $backup_dir/root.cpio" >> $log_filepushd /tmp/backup.root.$$ > /dev/null 2>&1# Root sichernfind . -print0 | cpio -o0aB -H crc > "$backup_dir/root.cpio" 2>> $log_file# Das Mountverzeichnis verlassenpopd > /dev/null 2>&1# Das Mountverzeichnis aushängen und löschenumount /tmp/backup.root.$$ && rm -rfv /tmp/backup.root.$$echo `date`: "-----------------------------------------------------------------------------  5" >> $log_file# Mountverzeichnis für boot anlegenecho `date`: "Mounte /boot nach /tmp/backup.boot.$$" >> $log_filemkdir -p /tmp/backup.boot.$$# boot einhängen - richtig, falls noch nicht gemounted, per bind andernfallsif grep -q /boot /proc/mounts; then	# /boot per -o bind einhängen, da es schon gemounted ist	echo `date`: "/boot war schon gemounted, mache bind mount" >> $log_file	mount -v -o bind /boot /tmp/backup.boot.$$ 2>&1 | tee -a $log_fileelse	# /boot ist noch nicht gemounted - richtig einhängen	# Dazu bestimmen, auf welchem Blockdevice es sich befindet	echo `date`: "/boot war nicht gemounted, mounte von `grep boot /etc/fstab | grep -v ^# | awk '{print $1}'`" >> $log_file	mount -v -o ro `grep boot /etc/fstab | grep -v ^# | awk '{print $1}'` /tmp/backup.boot.$$ 2>&1 | tee -a $log_filefi# In das Mountverzeichnis wechselnecho `date`: "Erstelle Backup von /boot in Datei $backup_dir/boot.cpio" >> $log_filepushd /tmp/backup.boot.$$ > /dev/null 2>&1# /boot sichernfind . -print0 | cpio -o0aB -H crc > "$backup_dir/boot.cpio" 2>> $log_file# Das Mountverzeichnis verlassenpopd > /dev/null 2>&1# Liste aller Mounts sichern, mit Angabe der Labelsecho `date`: "Liste aller Mountpoints:" >> $log_filemount -l | tee -a $log_file > "$backup_dir/mount.txt"# Das Mountverzeichnis von /boot aushängen und löschenumount /tmp/backup.boot.$$ && rm -rfv /tmp/backup.boot.$$echo `date`: "-----------------------------------------------------------------------------  6" >> $log_file# Alle LVs sichernlvdisplay -C --noheadings --units m | while read lv vg opt size; do	# Sofern Swap auf diesem Device angelegt ist, überspringe	# dieses Device.	# Hierzu wird auf ein Tool von udev zurückgegriffen, sofern	# vorhanden.	echo `date`: "Erstelle Backup von /dev/$vg/$lv mit Snapshot Snap-$lv" >> $log_file	unset ID_FS_TYPE	if test -x "$VOL_ID"; then		eval $("$VOL_ID" --export /dev/$vg/$lv)		echo `date`: "VOL_ID ($VOL_ID) ausführbar, ID_FS_TYPE=$ID_FS_TYPE" >> $log_file		# Das vol_id Programm wurde gefunden - verwende es!		if echo $ID_FS_TYPE | grep -qi swap; then			# Es handelt sich um ein Swapdevice -> mit 			# dem nächsten Device weitermachen.			continue		fi	fi	# Snapshot LV anlegen	lvcreate --snapshot --name Snap-$lv --size 512m /dev/$vg/$lv 2>&1 | tee -a $log_file	# Mountverzeichnis anlegen	mkdir -p /tmp/snaps_Snap-$lv.$$	echo `date`: "=============================================================================  1" >> $log_file	# Snapshot LV einhängen	# Sofern vol_id vorhanden ist, vol_id verwenden um den 	# Typ des Dateisystems zu bestimmen. Andernfalls auf die	# Automatik des Kernels vertrauen.	# XFS & Rest müssen mit unterschiedlichen Optionen eingehängt	# werden (bei XFS: mit nouuid). Standard: Nur "ro"	mount_opts=ro	if [ -n "$ID_FS_TYPE" ]; then		# Ueberprüfen, ob es sich um XFS handelt		test "$ID_FS_TYPE" = "xfs" && mount_opts=nouuid,ro		echo `date`: "ID_FS_TYPE war auf \"$ID_FS_TYPE\" gesetzt, mounte mit mount_opts=$mount_opts. Befehl: mount -v -o $mount_opts -t $ID_FS_TYPE /dev/$vg/Snap-$lv /tmp/snaps_Snap-$lv.$$" >> $log_file		mount -v -o $mount_opts -t "$ID_FS_TYPE" /dev/$vg/Snap-$lv /tmp/snaps_Snap-$lv.$$ 2>&1 | tee -a $log_file	else		# VOL_ID war nicht vorhanden, FS Type auf andere Art und		# Weise bestimmen.		test "`egrep "${vg}.*${lv}" /proc/mounts | awk '{print $3}'`" = "xfs" && mount_opts=nouuid,ro		echo `date`: "ID_FS_TYPE war NICHT gesetzt. Mounte mit mount_opts=$mount_opts. Befehl: mount -v -o $mount_opts /dev/$vg/Snap-$lv /tmp/snaps_Snap-$lv.$$" >> $log_file		mount -v -o $mount_opts /dev/$vg/Snap-$lv /tmp/snaps_Snap-$lv.$$ 2>&1 | tee -a $log_file	fi	echo `date`: "=============================================================================  2" >> $log_file	# In das Mountverzeichnis wechseln	echo `date`: "Erstelle Backup von /tmp/snaps_Snap-$lv.$$ in Datei $backup_dir/${vg}_$lv.cpio" >> $log_file	pushd /tmp/snaps_Snap-$lv.$$ > /dev/null 2>&1	# Das Dateisystem sichern	find . -print0 | cpio -o0aB -H crc > "$backup_dir/${vg}_$lv.cpio" 2>> $log_file	# Das Mountverzeichnis verlassen	popd > /dev/null 2>&1	# Das Mountverzeichnis aushängen und löschen	umount -v /dev/$vg/Snap-$lv && rm -rfv /tmp/snaps_Snap-$lv.$$	# Snapshot LV entfernen	echo `date`: "Entferne Snapshot Volume /dev/$vg/Snap-$lv" >> $log_file	lvremove --force /dev/$vg/Snap-$lv 2>&1 | tee -a $log_file	echo `date`: "-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-+=*-  3" >> $log_file	echo >> $log_filedoneecho `date`: "Sicherung beendet." >> $log_fileecho `date`: "################################################################################" >> $log_file