nach meinen Script-Dateien möchte ich nun ein Menü vorstellen was alle diese scripte beinhaltet und eine .desktop Datei zum starten.
Dies ist alles auf Plasma 5 getestet, einzig die .desktop müßte evtl angepasst werden.
Hier wird mit Funktionen innerhalb des Script gearbeitet um ein springen zu ermöglichen. Einige Variablen sind als erstes benannt andere erst nach der Auswahl, dann kommen die Fukktionen, zu erkennen an test() {hier steht dann was passieren soll}. Zuletzt steht das eigendliche Menü mit den entsprechenden Untermenüs. Am Ende wird eine Funktion aufgerufen.ÂÂ
Wichtig ist, dass die Werte der Variablen angepasst werden insbesondere die für backup/restore sonst stimmen die Pfade nicht.
Ich hatte zuerst daran gedacht dieses zu automatisieren. Das funktioniert aber nur durch die UUID des Sicherungsträgers welche im script
eingetragen werden muss. Das war mir dann doch für viele zu kompleziert und Fehlerträchtig, weshalb ich davon Abstand genommen habe.
Vorhanden sind Sicherung und Wiederherstellung sowie Systemupdate mit verheriger Snapshoterstellung und Sicherung der vorherigen. Es ist also auch auf BTRFS ausgelegt, durch auskommentieren dieser Snapshot-Möglichkeit aber auch für andere Filesysteme geeignet.
Weiter gibt es eine Sicherung auf rsync auf externe Datenträger. Wahlweise für /home / oder beides. Speicherung erfolgt getrennt und mit Hardlinks, womit Speicherplatz gespart wird.
Mit der menu.desktop Datei startet mat ein Terminal welches man durch das Menü wieder sauber beenden kann. Wie geschrieben die .desktop habe ich nur auf plasma5 getestet.
Dieser Abschnitt im script ist für die Zerlegung div Zeilen zuständig nur um ein oder zwei Informationen herauszuholen.
Code: Alles auswählen
LASTVAR=$(sudo readlink $rziel/last_backup | cut -d "/" -f5-)
      PFADVAR=$(sudo find -P $rziel/$LASTVAR -name $name | xargs -i ls -tr {} | cut -d" " -f10-)ÂÂ
      COPYVAR=$(sudo ls -tl $PFADVAR | cut -d" " -f9 | head -n1 | cut -d "/" -f5-)
      ORIGINALVAR=$(sudo ls -tl $PFADVAR | cut -d" " -f9 | head -n1 | cut -d "/" -f7-)
Diesen Thread, sowie meine anderen auch, werde ich immer wieder anpassen oder Verbesserungen einbauen.
Viel Spass - have fun!
Die menu.desktop Datei:
Code: Alles auswählen
[Desktop Entry]
Comment[de_DE]=
Comment=
Exec=\s/bin/./menue.sh
GenericName[de_DE]=
GenericName=
Icon=kcmdevices
MimeType=
Name[de_DE]=
Name=
Path=
StartupNotify=true
Terminal=true
TerminalOptions=
Type=Application
X-DBUS-ServiceName=
X-DBUS-StartupType=
X-KDE-SubstituteUID=false
X-KDE-Username=
Code: Alles auswählen
#! /bin/sh
## Menü für Backup / Restore und
## Systemupdate
## Variablen
## Datensicherung Root Variable-Funktion
func_rovar() {
rquelle=/
rziel=/media/Backup/system/
rexcludes=${rziel}.exclude-liste
}
## Datensicherung Home Variable-Funktion
func_hovar() {
uquelle=/home/$USER
uziel=/media/Backup/home/ ÂÂ
uexcludes=${uziel}.exclude-liste
}
## Datensicherung Allgemein Variable-Funktion
func_allgvar() {
medium=/media/Backup
datum=$(date +%d-%m-%Y-%H%M%S)
hosts=$(hostname | tail)
}
## Systemupdate Variable-Funktion
func_upvar() {
BTRFS=/usr/bin/btrfs
PACMAN=/usr/bin/pacman
MV=/usr/bin/mv
CP=/usr/bin/cp
REFLECTOR=/usr/bin/reflector
up=$(checkupdates)
}
## Funktionen
## Informationsmeldungen
func_backInfo() {
echo "Backup- HDD ist eingehängt", sleep 5
}
func_backFailed() {
echo "Kein Medium eingehängt, Backup beendet"; sleep 5
}
## Datensicherung Root-System
func_bakRo() {
cd /
if [[ -d $medium ]]; then
  func_backInfo
  cd /
  sudo rsync -avlR --progress --exclude-from="$rexcludes" "${rquelle}" "${rziel}${hosts}-${datum}/" --link-dest="${rziel}last_backup/"
  ln -nsf "${rziel}${hosts}-${datum}" "${rziel}last_backup"
  sync
else
  func_backFailed
fi
}
## Datensicherung Home - System
func_bakHo() {
cd /
if [[ -d $medium ]]; then
  func_backInfo
  cd /
  rsync -avlR --progress --exclude-from="$uexcludes" "${uquelle}" "${uziel}${hosts}-${datum}/" --link-dest="${uziel}last_backup/"
  ln -nsf "${uziel}${hosts}-${datum}" "${uziel}last_backup"
  sync
else
  func_backFailed
fi
}
## Rücksicherung Root - System
func_restRo() {
cd /
echo -n "Dateinamen eingeben (Beispiel mkinitcpio.conf): "; read name
  if [[ -d $medium ]]; then
    if [ -z "$name" ]; then
      echo "Bitte einen Dateinamen angeben, z. B. restore.sh irgendwas.txt"
      func_Menu
    else
      LASTVAR=$(sudo readlink $rziel/last_backup | cut -d "/" -f5-)
      PFADVAR=$(sudo find -P $rziel/$LASTVAR -name $name | xargs -i ls -tr {} | cut -d" " -f10-)ÂÂ
      COPYVAR=$(sudo ls -tl $PFADVAR | cut -d" " -f9 | head -n1 | cut -d "/" -f5-)
      ORIGINALVAR=$(sudo ls -tl $PFADVAR | cut -d" " -f9 | head -n1 | cut -d "/" -f7-)
     ÂÂ
    fi
  fi
}
## Rücksicherung Home - System
func_restHo() {
cd /
echo -n "Dateinamen eingeben (Beispiel datei.txt): "; read name
  if [[ -d $medium ]]; then
    if [ -z "$name" ]; then
      echo "Bitte einen Dateinamen angeben, z. B. restore.sh irgendwas.txt"
      func_Menu;
    else
      LASTVAR=$(readlink $uziel/last_backup | cut -d "/" -f5-)
      PFADVAR=$(find -P $uziel/$LASTVAR -name $name | xargs -i ls -tr {} | cut -d" " -f10-)ÂÂ
      COPYVAR=$(ls -tl $PFADVAR | cut -d" " -f9 | head -n1 | cut -d "/" -f5-)
      ORIGINALVAR=$(ls -tl $PFADVAR | cut -d" " -f9 | head -n1 | cut -d "/" -f7-)
    fi
  fi
}
## Rücksicherung kpl manuell
func_restComp() {
echo ""
echo -n "Quelle eingeben kpl. Pfad!: "; read q
echo -n "Ziel eingeben kpl. Pfad!: "; read z
echo -n "Der Quell und Zielpfad lautet: "$q $z "weiter? (j), sonst (n)"; read jn
if [ "$jn" = "j" ]; then
  sudo cp -R $q $z
elif [ "$jn" = "n" ]; then
  func_Menu;
fi
}
## System - Update
func_sysUp() {
# sudo -u $USER DISPLAY=:0 DBUS_SESSION_BUS_ADDRESS=unix:path=/run/user/1000/bus notify-send "$(echo $up)" -t 50000
echo sudo $(date +%d-%m-%y/%H:%M:%S) $up >> /var/log/update/update.log
unset up
# ----- Snapshot System -----
# ---------------------------
sudo $BTRFS subvolume delete /.snapshots/OLDSTABLE
sudo $MV /.snapshots/STABLE /.snapshots/OLDSTABLE
sudo $BTRFS subvolume snapshot / /.snapshots/STABLE
sudo $CP /.snapshots/fstab.bak /.snapshots/STABLE/etc/fstab
sudo $CP /boot/vmlinuz-linux /boot/vmlinuz-linux-stable
sudo $CP /boot/initramfs-linux.img /boot/initramfs-linux-stable.img
# ----- Update System -------
# ---------------------------
sudo $REFLECTOR --country 'Germany' -l 25 -p https --sort rate --save /etc/pacman.d/mirrorlist
sudo $PACMAN -Syyu ## --noconfirm
sudo $PACMAN -Sc  ## --noconfirm
#  Balance Filesystem
# --------------------------
sudo $BTRFS balance start -dusage=55 /
}
## Menü
func_Menu() {
while true; do
  clear
  echo ""
  echo ""
  echo ""
  echo "(1) Datensicherung"
  echo "(2) Datei zurückschreiben"
  echo "(3) System Update durchführen"
  echo "(4) Programm beenden"
  echo ""
  echo -n "Funktion auswählen: "; read f
    if [ "$f" = "1" ]; then
      while true; do
        clear
        echo ""
        echo ""
        echo ""
        echo "(1) Datensicherung Root - Dateisystem"
        echo "(2) Datensicherung User - Dateisystem"
        echo "(3) Datensicherung Root & User Dateisystem"
        echo "(4) Hauptmenü"
        echo -n "Funktion auswählen: "; read f
          if [ "$f" = "1" ]; then
            func_rovar;
            func_allgvar;
            func_bakRo;
            func_Menu;
          elif [ "$f" = "2" ]; then
            func_hovar;
            func_allgvar;
            func_bakHo;
            func_menu;
          elif [ "$f" = "3" ]; then
            func_rovar;
            func_hovar;
            func_allgvar;
            func_bakHo;
            func_bakRo;
            func_Menu;
          elif [ "$f" = "4" ]; then
            func_Menu;
          fi
      done
    elif [ "$f" = "2" ]; then
      while true; do
        clear
        echo ""
        echo ""
        echo ""
        echo "Achte auf einen korrekten Zielpfad, falls über ein Live-System"
        echo "gearbeitet wird manuelle Pfad-Eingabe nutzen."
        echo ""
        echo ""
        echo "(1) Rücksicherung einer Datei im Root - Dateisystem"
        echo "(2) Rücksicherung einer Datei im User - Dateisystem"
        echo "(3) Rücksicherung des kompletten Systemes"
        echo "(4) zurück"
        echo -n "Funktion auswählen: "; read f
          if [ "$f" = "1" ]; then
            while true; do
              clear
              echo ""
              echo "(1) Datei zurück kopieren"
              echo "(2) Anderen Pfad eingeben"
              echo "(3) Abrechen"
              echo " "
              echo -n "Funktion auswählen: "; read f
              func_rovar;
              func_allgvar;
                if [ "$f" = "1" ]; then
                  func_restRo;
                  echo $rziel$COPYVAR $ORIGINALVAR" wird kopiert"
                  sudo cp $rziel$COPYVAR $ORIGINALVAR
                  func_Menu;
                elif [ "$f" = "2" ]; then
                  func_restRo;
                  echo -n "Bitte vollständigen Pfad angeben: "; read c
                  echo $rziel$COPYVAR $c "wird kopiert"
                  sudo cp $rziel$COPYVAR $c
                  func_Menu;
                elif [ "$f" = "3" ]; then
                  func_Menu;
                fi
            done
         ÂÂ
          elif [ "$f" = "2" ]; then
            while true; do
              clear
              echo "(1) Datei zurück kopieren"
              echo "(2) Anderen Pfad eingeben"
              echo "(3) Hauptmenü"
              echo " "
              echo -n "Funktion auswählen: "; read f
              func_hovar;
              func_allgvar;
                if [ "$f" = "1" ]; then
                  func_restHo;
                  echo $uziel$COPYVAR $ORIGINALVAR" wird kopiert"
                  cp $uziel$COPYVAR $ORIGINALVAR
                  func_Menu;
                elif [ "$f" = "2" ]; then
                  func_restHo;
                  echo -n "Bitte vollständigen Pfad angeben: "; read c
                  echo $uziel$COPYVAR $c "wird kopiert"
                  cp $uziel$COPYVAR $c
                elif [ "$f" = "3" ]; then
                  func_Menu;
                fi
            done
         ÂÂ
          elif [ "$f" = "3" ]; then
            while true; do
              clear
              echo "Eine einwandfrei Rücksicherung ist nur möglich"
              echo "wenn ein externes System (Live-System) gestartet"
              echo "wird. Andernfalls kann es zum System-Ausfall führen!"
              echo "Zielpfad muss auf jedem Fall manuell angegeben werden!"
              echo ""
              echo ""
              echo "(1) Trotzdem starten?"
              echo "(2) Hauptmenue"
              echo -n "Funktion auswählen: "; read a
              func_rovar;
              func_hovar;
              func_allgvar;
                if [ "$a" = "1" ]; then
                  func_restComp;
                  func_Menu;
                elif [ "$a" = "2" ]; then
                  func_Menu;
                fi
            done
         ÂÂ
          elif [ "$f" = "4" ]; then
            func_Menu;  ÂÂ
          fi ÂÂ
      done ÂÂ
   ÂÂ
    elif [ "$f" = "3" ]; then
      func_upvar;
      if [ -z "$up" ]; then
        clear
        echo ""
        echo ""
        echo ""
        echo "Kein Update vorhanden"
        echo "(1) Beenden"
        echo "(2) Zurück"
        echo -n "Funktion wählen"; read e
          if [ "$e" = "1" ]; then
            id=$(echo $$)
            exit $id
          elif [ "$e" = "2" ]; then
            func_Menu;
          fi
      else
            func_sysUp;
      fi
    elif [ "$f" = "4" ]; then
    id=$(echo $$)
    exit $id        ÂÂ
    fi ÂÂ
done
}
func_Menu;