Skip to content

Restic - Ein Backupkonzept

Angeheftet Restic
1 1 1.2k
  • Wie viele, stehe ich auch immer wieder vor dem Problem einige wichtige Daten zu sichern. Mein System sicher ich nicht, nur die Daten unter /home

    Aber, es gibt ja auch wichtige Daten, die man nicht zu Hause speichern möchte. Doch in der Cloud? Nö, das ist nicht mein Stil, da lesen mir zu viele mit 🙂 Ok, also muss man die Daten verschlüsselt irgendwo ablegen. Dafür habe ich auch schon so einige Sachen durch. Boxcryptor, Cryptonator und wie sie alle heißen. Doch irgendwas ist immer, was mich daran stört. In meinem Twitter-Account bin ich doch letztens wieder über Restic gestolpert. Da war doch mal was!?

    Restic - Backuptool vorgestellt

    Armbian - Backupscript mit Restic anlegen

    Die Grundlagen sind also schon erarbeitet. Dann schauen wir uns das nochmal an und erarbeiten ein Konzept um gewisse Daten verschlüsselt auf einem Datenspeicher abzulegen. Los geht's....

    Restic

    Was ist Restic? Mit meinen eigenen Worten, ein Backup-Tool 😋 Gut, es hat keine grafische Oberfläche, es ist ein reines Kommandozeilen-Tool. Es sichert Daten, und diese AES-256 verschlüsselt. Das sollte reichen um die Daten irgendwo außerhalb der eigenen Wohnung zu lagern. (Denkt an das PW, bei einem schlechten PW braucht man auch gar nicht verschlüsseln!)

    Hier die Links zum Projekt:

    GO

    Restic ist in GO geschrieben. GO ist eine Programmiersprache die von Mitarbeitern von Google entwickelt wurde. Mit GO kompiliert man ausführbare Dateien. Hier mal das typische Hello World Beispiel.

    package main
    
    import "fmt"
    
    func main() {
    fmt.Println("Hallo Welt")
    }
    

    Der Link zum Projekt GO https://golang.org

    Installation GO

    Unter meinem Linux Mint Cinnamon 18.3 gibt es leider kein aktuelles Paket. Das Paket was man installieren kann ist für Restic nicht nutzbar 😠

    go run build.go
    Go 1.6.2 detected, this program requires at least Go 1.8.0
    exit status 1
    

    Ok, das bringt so nix. Also das Paket wieder entfernt, dann müssen wir da anders ran gehen. Also müssen wir das Repository vom Entwickler benutzen.

    sudo add-apt-repository ppa:longsleep/golang-backports
    

    Nach der Eingabe erscheint folgendes:

    Sie sind dabei das folgende PPA hinzuzufügen:
    Golang 1.8 and 1.9 PPA for Ubuntu 16.04 Xenial
    Mehr Informationen: https://launchpad.net/~longsleep/+archive/ubuntu/golang-backports
    Zum Fortfahren bitte Eingabetaste drücken oder Strg+C zum Abbrechen
    

    Danach ein

    apt-get update
    apt-get install golang-go
    

    Nach der Installation eben die Version checken.

    go version
    go version go1.9.4 linux/amd64
    

    Gut, damit haben wir die Grundvoraussetzung für Restic erst mal auf dem System. Nun können wir uns das aktuelle Restic halt selber bauen.

    Wenn man mal mit dem o.g. Probleme hat, kann man sich hier fertige Pakete runterladen.
    https://golang.org/dl/

    Installation Restic

    Wir holen uns mal eben das Programm von Github.

    git clone https://github.com/restic/restic
    

    Danach ins Verzeichnis wechseln

    cd restic
    

    Und nun bauen wir

    go run build.go
    

    Nach Beendigung kopieren wir uns das Programm nach /usr/bin damit wir es von überall aufrufen können.

    sudo cp restic /usr/bin
    

    Nun bekommen wir beim Aufruf von Restic die Hilfe angezeigt.

    restic
    
    restic is a backup program which allows saving multiple revisions of files and
    directories in an encrypted repository stored on different backends.
    
    Usage:
    restic [command]
    
    Available Commands:
    backup Create a new backup of files and/or directories
    cat Print internal objects to stdout
    check Check the repository for errors
    diff Show differences between two snapshots
    dump Print a backed-up file to stdout
    find Find a file or directory
    forget Remove snapshots from the repository
    generate Generate manual pages and auto-completion files (bash, zsh)
    help Help about any command
    init Initialize a new repository
    key Manage keys (passwords)
    list List objects in the repository
    ls List files in a snapshot
    migrate Apply migrations
    mount Mount the repository
    prune Remove unneeded data from the repository
    rebuild-index Build a new index file
    restore Extract the data from a snapshot
    snapshots List all snapshots
    tag Modify tags on snapshots
    unlock Remove locks other processes created
    version Print version information
    
    Flags:
    --cacert stringSlice path to load root certificates from (default: use system certificates)
    --cache-dir string set the cache directory
    --cleanup-cache auto remove old cache directories
    -h, --help help for restic
    --json set output mode to JSON for commands that support it
    --limit-download int limits downloads to a maximum rate in KiB/s. (default: unlimited)
    --limit-upload int limits uploads to a maximum rate in KiB/s. (default: unlimited)
    --no-cache do not use a local cache
    --no-lock do not lock the repo, this allows some operations on read-only repos
    -o, --option key=value set extended option (key=value, can be specified multiple times)
    -p, --password-file string read the repository password from a file (default: $RESTIC_PASSWORD_FILE)
    -q, --quiet do not output comprehensive progress report
    -r, --repo string repository to backup to or restore from (default: $RESTIC_REPOSITORY)
    --tls-client-cert string path to a file containing PEM encoded TLS client certificate and private key
    
    Use "restic [command] --help" for more information about a command.
    

    Somit können wir nun das Backup-Tool einsetzen.

    Backup einrichten

    Um ein Backup einzurichten, müssen wir folgenden Befehl eingeben.

    restic -r /tmp/repo init
    enter password for new repository: 
    enter password again: 
    created restic repository c2f4383c89 at /tmp/repo
    

    -r /tmp/repo definiert den Pfad des Backups
    init dient zur Initialisierung des Backups. Danach fragt das Programm das Passwort für das Backup ab!

    Wichtig!

    Please note that knowledge of your password is required to access
    the repository. Losing your password means that your data is
    irrecoverably lost.
    

    Backup anlegen

    Um ein Backup anzulegen wird folgendes eingegeben

    restic -r /tmp/repo backup /home/frank/Bilder
    enter password for repository: 
    password is correct
    scan [/home/frank/Bilder]
    scanned 4 directories, 64 files in 0:00
    [0:00] 100.00%  91.252 MiB / 91.252 MiB  68 / 68 items  0 errors  ETA 0:00 
    duration: 0:00
    snapshot c38a4ceb saved
    

    -r /tmp/repo ist der Pfad zum Backup - Zielverzeichnis
    backup - legt ein Backup von Files /Ordner an
    /home/frank/Bilder ist das Quellverzeichnis welches gesichert werden soll.

    Vor Anlegen des Backups, wird das Passwort abgefragt, wenn das richtig ist geht's los. Es kommen einige Ausgaben was passiert und am Ende die Zeile

    snapshot c38a4ceb saved
    

    die uns anzeigt, das das Backup (Snapshot) unter dem Namen c38a4ceb angelegt wurde.

    Backup's auflisten

    Ein Backup kann viele Snapshot's enthalten. Um mit diesen arbeiten zu können, müssen wir wissen wie der Name lautet. Um diese aufzulisten, gibt es einen Befehl

    restic -r /tmp/repo snapshots
    enter password for repository: 
    password is correct
    ID        Date                 Host           Tags        Directory
    ----------------------------------------------------------------------
    c38a4ceb  2018-02-18 16:47:08  frank-XX-XXXX              /home/frank/Bilder
    ----------------------------------------------------------------------
    1 snapshots
    

    Hier wird der nun bekannte Befehl restic -r /tmp/repo um den Befehl snapshots erweitert. Dieser gibt dann, nachdem wir das korrekte Passwort eingegeben haben, alle Snapshots aus. Im Beispiel gibt es nur einen Snapshot.

    Snapshot wieder herstellen

    Um einen Snapshot wieder herzustellen brauchen wir den Namen (ID) des Snapshots und folgenden Befehl.

    restic -r /tmp/repo restore -t /tmp/restore c38a4ceb
    

    -r /tmp/repo ist der Pfad zum Backup - Zielverzeichnis
    restore Befehl zum Auspacken des Snapshots
    -t /tmp/restore Das Zielverzeichnis (Target)
    c38a4ceb Der Name(ID) des Snapshots

    Restic Hilfe

    Man kann sich zu den einzelnen Befehlen auch eine ausführlichere Hilfe anzeigen lassen.

    restic restore --help
    
    The "restore" command extracts the data from a snapshot from the repository to
    a directory.
    
    The special snapshot "latest" can be used to restore the latest snapshot in the
    repository.
    
    Usage:
      restic restore [flags] snapshotID
    
    Flags:
      -e, --exclude pattern   exclude a pattern (can be specified multiple times)
      -h, --help              help for restore
      -H, --host string       only consider snapshots for this host when the snapshot ID is "latest"
      -i, --include pattern   include a pattern, exclude everything else (can be specified multiple times)
          --path path         only consider snapshots which include this (absolute) path for snapshot ID "latest"
          --tag taglist       only consider snapshots which include this taglist for snapshot ID "latest" (default [])
      -t, --target string     directory to extract data to
    
    Global Flags:
          --cacert stringSlice       path to load root certificates from (default: use system certificates)
          --cache-dir string         set the cache directory
          --cleanup-cache            auto remove old cache directories
          --json                     set output mode to JSON for commands that support it
          --limit-download int       limits downloads to a maximum rate in KiB/s. (default: unlimited)
          --limit-upload int         limits uploads to a maximum rate in KiB/s. (default: unlimited)
          --no-cache                 do not use a local cache
          --no-lock                  do not lock the repo, this allows some operations on read-only repos
      -o, --option key=value         set extended option (key=value, can be specified multiple times)
      -p, --password-file string     read the repository password from a file (default: $RESTIC_PASSWORD_FILE)
      -q, --quiet                    do not output comprehensive progress report
      -r, --repo string              repository to backup to or restore from (default: $RESTIC_REPOSITORY)
          --tls-client-cert string   path to a file containing PEM encoded TLS client certificate and private key
    

    Dort findet man auch den Schalter -t

    Snapshot mounten

    Man kann ein Snapshot auch eben mal schnell mounten.

    mkdir /mnt/restic
    restic -r /tmp/backup mount /mnt/restic
    enter password for repository:
    Now serving /tmp/backup at /mnt/restic
    Don't forget to umount after quitting!
    

    Im nächsten Teil werden wir einen bestimmten Ordner automatisch sichern und das Ganze automatisieren, so das wir uns nicht mehr drum kümmern müssen.

    https://forum.frank-mankel.org/topic/27/restic-ein-backupkonzept-automatisieren

  • FrankMF FrankM hat dieses Thema am angepinnt
  • 0 Stimmen
    1 Beiträge
    11 Aufrufe
    Niemand hat geantwortet
  • Update 1.34.1

    Vaultwarden vaultwarden linux
    1
    0 Stimmen
    1 Beiträge
    95 Aufrufe
    Niemand hat geantwortet
  • AI Bots aussperren

    Linux linux block-ai nginx
    2
    0 Stimmen
    2 Beiträge
    225 Aufrufe
    FrankMF
    Wir können das noch für eine sanfte Methode erweitern, das ist die Datei robots.txt, wo man sich in alten Zeiten mal dran hielt. Einige Bots machen das, andere nicht. Praktisch, das o.g. Projekt bietet diese Datei auch an. Dann werden wir das kurz mal mit einbauen. ai-block.sh #!/bin/bash # Script um AI-Bots zu blocken # https://github.com/ai-robots-txt/ai.robots.txt/tree/main mkdir /root/AI-test cd /root/AI-test ## Daten holen curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/nginx-block-ai-bots.conf curl -O https://raw.githubusercontent.com/ai-robots-txt/ai.robots.txt/master/robots.txt ## Daten in nginx einbauen mv nginx-block-ai-bots.conf /etc/nginx/blocklists/ mv robots.txt /var/www/html ## NGINX neustarten systemctl restart nginx.service Damit das in nginx funktioniert. Den Server Block um folgendes erweitern. # Serve robots.txt directly from Nginx location = /robots.txt { root /var/www/html; try_files $uri =404; } Kurzer Test https://<DOMAIN>/robots.txt Ergebnis User-agent: AI2Bot User-agent: Ai2Bot-Dolma User-agent: Amazonbot User-agent: anthropic-ai User-agent: Applebot User-agent: Applebot-Extended User-agent: Brightbot 1.0 User-agent: Bytespider User-agent: CCBot User-agent: ChatGPT-User User-agent: Claude-Web User-agent: ClaudeBot User-agent: cohere-ai User-agent: cohere-training-data-crawler User-agent: Crawlspace User-agent: Diffbot User-agent: DuckAssistBot User-agent: FacebookBot User-agent: FriendlyCrawler User-agent: Google-Extended User-agent: GoogleOther User-agent: GoogleOther-Image User-agent: GoogleOther-Video User-agent: GPTBot User-agent: iaskspider/2.0 User-agent: ICC-Crawler User-agent: ImagesiftBot User-agent: img2dataset User-agent: imgproxy User-agent: ISSCyberRiskCrawler User-agent: Kangaroo Bot User-agent: Meta-ExternalAgent User-agent: Meta-ExternalFetcher User-agent: OAI-SearchBot User-agent: omgili User-agent: omgilibot User-agent: PanguBot User-agent: Perplexity-User User-agent: PerplexityBot User-agent: PetalBot User-agent: Scrapy User-agent: SemrushBot-OCOB User-agent: SemrushBot-SWA User-agent: Sidetrade indexer bot User-agent: Timpibot User-agent: VelenPublicWebCrawler User-agent: Webzio-Extended User-agent: YouBot Disallow: /
  • Update 1.32.4 - Security Fixes!

    Vaultwarden linux vaultwarden
    1
    0 Stimmen
    1 Beiträge
    138 Aufrufe
    Niemand hat geantwortet
  • Raspberry Pi5 - First Boot

    RaspberryPi raspberrypi linux debian
    1
    2
    0 Stimmen
    1 Beiträge
    295 Aufrufe
    Niemand hat geantwortet
  • NAS 2023 - Thema Datensicherung

    Verschoben Linux proxmox linux
    2
    2
    0 Stimmen
    2 Beiträge
    225 Aufrufe
    FrankMF
    Bleibt noch etwas wichtiges. Die ganzen Konfigurationsdateien vom Proxmox Host. Sinnvoll, das man sich das sichert. #!/bin/bash # Script um mit Restic Daten automatisiert zu sichern! # Dient zum Sichern des Ordners /etc/pve! # Was soll gesichert werden? backup_pfad=/etc/pve # Programm Start restic --password-file /root/passwd -r /mnt/pve/Restic_Backups/pve backup $backup_pfad > backup_pve_001.log restic --password-file /root/passwd -r /mnt/pve/Restic_Backups/pve forget --keep-last 3 --keep-monthly 3 --prune >> backup_pve_002.log # Testen restic --password-file /root/passwd -r /mnt/pve/Restic_Backups/pve check --read-data >> backup_pve_003.log Crontab eingerichtet - fertig!
  • Restic UI - Youtube Video Vorstellung

    Restic UI restic-ui restic
    3
    0 Stimmen
    3 Beiträge
    339 Aufrufe
    FrankMF
    Hallo @berthold, du bist mein einziger Star Ok, darum geht es mir ja nicht, wie Du weißt mache ich das hauptsächlich für mich und meine Backups klappen damit sehr gut. Ist also produktiv einsetzbar. Wie Du gemerkt hast, gibt es Zeiten da mache ich ganz viel und dann wieder Zeiten da passiert nix. Das ist bei mir normal, ich muss da "Bock" drauf haben. Habe ich viel Stress auf der Arbeit, passiert Abends eher sehr wenig.. Ich hoffe das ich mittlerweile alle Fehler gefunden habe, die Grundfunktionen sind alle funktional. Mittlerweile kann man die JSON Datei mit den Daten der Backups auf Wunsch auch verschlüsseln Ich habe noch eine ganze Reihe an Notizen, was ich gerne noch machen möchte. Wichtig ist mir aber im Moment, das ich alle Fehler finde und das so wie es jetzt ist, einwandfrei läuft. Darum, wenn es jemand nutzt, bitte gebt Feedback. Egal ob positiv oder negativ. Ich freue mich persönlich natürlich mehr über positives Feedback
  • LUKS verschlüsselte Platte mounten

    Linux linux
    2
    1
    0 Stimmen
    2 Beiträge
    1k Aufrufe
    FrankMF
    So, jetzt das ganze noch einen Ticken komplizierter Ich habe ja heute, für eine Neuinstallation von Ubuntu 20.04 Focal eine zweite NVMe SSD eingebaut. Meinen Bericht zu dem Thema findet ihr hier. Aber, darum soll es jetzt hier nicht gehen. Wir haben jetzt zwei verschlüsselte Ubuntu NVMe SSD Riegel im System. Jetzt klappt die ganze Sache da oben nicht mehr. Es kommt immer einen Fehlermeldung. unbekannter Dateisystemtyp „LVM2_member“. Ok, kurz googlen und dann findet man heraus, das es nicht klappen kann, weil beide LVM Gruppen, den selben Namen benutzen. root@frank-MS-7C37:/mnt/crypthome/root# vgdisplay --- Volume group --- VG Name vgubuntu2 System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 4 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 1 Max PV 0 Cur PV 1 Act PV 1 VG Size <464,53 GiB PE Size 4,00 MiB Total PE 118919 Alloc PE / Size 118919 / <464,53 GiB Free PE / Size 0 / 0 VG UUID lpZxyv-cNOS-ld2L-XgvG-QILa-caHS-AaIC3A --- Volume group --- VG Name vgubuntu System ID Format lvm2 Metadata Areas 1 Metadata Sequence No 3 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 2 Max PV 0 Cur PV 1 Act PV 1 VG Size <475,71 GiB PE Size 4,00 MiB Total PE 121781 Alloc PE / Size 121781 / <475,71 GiB Free PE / Size 0 / 0 VG UUID jRYTXL-zjpY-lYr6-KODT-u0LJ-9fYf-YVDna7 Hier oben sieht man das schon mit geändertem Namen. Der VG Name muss unterschiedlich sein. Auch dafür gibt es ein Tool. root@frank-MS-7C37:/mnt/crypthome/root# vgrename --help vgrename - Rename a volume group Rename a VG. vgrename VG VG_new [ COMMON_OPTIONS ] Rename a VG by specifying the VG UUID. vgrename String VG_new [ COMMON_OPTIONS ] Common options for command: [ -A|--autobackup y|n ] [ -f|--force ] [ --reportformat basic|json ] Common options for lvm: [ -d|--debug ] [ -h|--help ] [ -q|--quiet ] [ -v|--verbose ] [ -y|--yes ] [ -t|--test ] [ --commandprofile String ] [ --config String ] [ --driverloaded y|n ] [ --nolocking ] [ --lockopt String ] [ --longhelp ] [ --profile String ] [ --version ] Use --longhelp to show all options and advanced commands. Das muss dann so aussehen! vgrename lpZxyv-cNOS-ld2L-XgvG-QILa-caHS-AaIC3A vgubuntu2 ACHTUNG Es kann zu Datenverlust kommen, also wie immer, Hirn einschalten! Ich weiß, das die erste eingebaute Platte mit der Nummer /dev/nvme0n1 geführt wird. Die zweite, heute verbaute, hört dann auf den Namen /dev/nvme1n1. Die darf ich nicht anpacken, weil sonst das System nicht mehr startet. /etc/fstab # /etc/fstab: static file system information. # # Use 'blkid' to print the universally unique identifier for a # device; this may be used with UUID= as a more robust way to name devices # that works even if disks are added and removed. See fstab(5). # # <file system> <mount point> <type> <options> <dump> <pass> /dev/mapper/vgubuntu-root / ext4 errors=remount-ro 0 1 # /boot was on /dev/nvme1n1p2 during installation UUID=178c7e51-a1d7-4ead-bbdf-a956eb7b754f /boot ext4 defaults 0 2 # /boot/efi was on /dev/nvme0n1p1 during installation UUID=7416-4553 /boot/efi vfat umask=0077 0 1 /dev/mapper/vgubuntu-swap_1 none swap sw 0 0 Jo, wenn jetzt die Partition /dev/mapper/vgubuntu2-root / anstatt /dev/mapper/vgubuntu-root / heißt läuft nichts mehr. Nur um das zu verdeutlichen, auch das könnte man problemlos reparieren. Aber, ich möchte nur warnen!! Nachdem die Änderung durchgeführt wurde, habe ich den Rechner neugestartet. Puuh, Glück gehabt, richtige NVMe SSD erwischt Festplatte /dev/mapper/vgubuntu2-root: 463,58 GiB, 497754832896 Bytes, 972177408 Sektoren Einheiten: Sektoren von 1 * 512 = 512 Bytes Sektorgröße (logisch/physikalisch): 512 Bytes / 512 Bytes E/A-Größe (minimal/optimal): 512 Bytes / 512 Bytes Nun können wir die Platte ganz normal, wie oben beschrieben, mounten. Nun kann ich noch ein paar Dinge kopieren