Skip to content

Restic - Migrate

Restic
  • Man kann ein altes Repo mit Version 1 in ein Repo mit Version 2 migrieren. Ein erster Versuch von mir.

    Schauen wir uns die Hilfe an.

    [frank-ms7c92 ~]# restic migrate -h 
    
    The "migrate" command checks which migrations can be applied for a repository
    and prints a list with available migration names. If one or more migration
    names are specified, these migrations are applied.
    
    EXIT STATUS
    ===========
    
    Exit status is 0 if the command was successful, and non-zero if there was any error.
    
    Usage:
      restic migrate [flags] [migration name] [...]
    
    Flags:
      -f, --force   apply a migration a second time
      -h, --help    help for migrate
    
    Global Flags:
          --cacert file                file to load root certificates from (default: use system certificates)
          --cache-dir directory        set the cache directory. (default: use system default cache directory)
          --cleanup-cache              auto remove old cache directories
          --compression mode           compression mode (only available for repository format version 2), one of (auto|off|max) (default auto)
          --insecure-tls               skip TLS certificate verification when connecting to the repository (insecure)
          --json                       set output mode to JSON for commands that support it
          --key-hint key               key ID of key to try decrypting first (default: $RESTIC_KEY_HINT)
          --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 repository, this allows some operations on read-only repositories
      -o, --option key=value           set extended option (key=value, can be specified multiple times)
          --pack-size uint             set target pack size in MiB, created pack files may be larger (default: $RESTIC_PACK_SIZE)
          --password-command command   shell command to obtain the repository password from (default: $RESTIC_PASSWORD_COMMAND)
      -p, --password-file file         file to read the repository password from (default: $RESTIC_PASSWORD_FILE)
      -q, --quiet                      do not output comprehensive progress report
      -r, --repo repository            repository to backup to or restore from (default: $RESTIC_REPOSITORY)
          --repository-file file       file to read the repository location from (default: $RESTIC_REPOSITORY_FILE)
          --tls-client-cert file       path to a file containing PEM encoded TLS client certificate and private key
      -v, --verbose n                  be verbose (specify multiple times or a level using --verbose=n, max level/times is 3)
    

    Dort findet man alles, was man wissen muss 😉

    Als erstes macht Restic einen Test um zu klären, ob man migrieren kann.

    [frank-ms7c92 ~]# restic migrate -r /mnt/Backup/Datensicherung_Home_Restic_UI/
    enter password for repository: 
    repository 50a2a753 opened (repository version 1) successfully, password is correct
    available migrations:
      upgrade_repo_v2       upgrade a repository to version 2
    

    Nun zeigt er uns die Migrationsmöglichkeit an, hier

    upgrade_repo_v2
    

    Der Migrationsvorgang

    [frank-ms7c92 ~]# restic migrate upgrade_repo_v2 -r /mnt/Backup/Datensicherung_Home_Restic_UI/
    enter password for repository: 
    repository 50a2a753 opened (repository version 1) successfully, password is correct
    checking repository integrity...
    using temporary cache in /tmp/restic-check-cache-3584864968
    enter password for repository: 
    repository 50a2a753 opened (repository version 1) successfully, password is correct
    created new cache in /tmp/restic-check-cache-3584864968
    load indexes
    check all packs
    check snapshots, trees and blobs
    [0:05] 100.00%  13 / 13 snapshots
    no errors were found
    applying migration upgrade_repo_v2...
    migration upgrade_repo_v2: success
    

    Der Migrations Prozeß war erfolgreich.

    migration upgrade_repo_v2: success
    

    Danach hatte ich ein Problem, weil ich das alles mal wieder als Root gemacht hatte und nun die Dateiberechtigungen falsch waren. Kurz geändert, dann kann es weiter gehen 🙂

    [frank-ms7c92 ~]# ls -lha /mnt/Backup/Datensicherung_Home_Restic_UI/
    insgesamt 32K
    drwx------   7 frankm frankm 4,0K 25. Aug 22:10 .
    drwxr-xr-x   8 frankm frankm 4,0K 24. Jul 10:37 ..
    -r--------   1 root   root    155 25. Aug 22:10 config
    drwx------ 258 frankm frankm 4,0K 10. Jul 2021  data
    drwx------   2 frankm frankm 4,0K 25. Aug 21:02 index
    drwx------   2 frankm frankm 4,0K 10. Jul 2021  keys
    drwx------   2 frankm frankm 4,0K 25. Aug 22:10 locks
    drwx------   2 frankm frankm 4,0K 25. Aug 21:02 snapshots
    [frank-ms7c92 ~]# chown -R frankm:frankm /mnt/Backup/Datensicherung_Home_Restic_UI/
    [frank-ms7c92 ~]# ls -lha /mnt/Backup/Datensicherung_Home_Restic_UI/
    insgesamt 32K
    drwx------   7 frankm frankm 4,0K 25. Aug 22:10 .
    drwxr-xr-x   8 frankm frankm 4,0K 24. Jul 10:37 ..
    -r--------   1 frankm frankm  155 25. Aug 22:10 config
    drwx------ 258 frankm frankm 4,0K 10. Jul 2021  data
    drwx------   2 frankm frankm 4,0K 25. Aug 21:02 index
    drwx------   2 frankm frankm 4,0K 10. Jul 2021  keys
    drwx------   2 frankm frankm 4,0K 25. Aug 22:10 locks
    drwx------   2 frankm frankm 4,0K 25. Aug 21:02 snapshots
    

    In der Doku hatte ich gelesen, das es jetzt noch einen Schritt benötigt.

    After the migration is complete, run prune to compress the repository metadata.

    ec2510d2-e11f-409e-bcd2-aa75e97d6654-image.png

    Danach benutzt das Repo die Version 2. Es ist aber nocht nicht alles komprimiert.

    File contents stored in the repository will not be rewritten, data from new backups will be compressed. Over time more and more of the repository will be compressed. To speed up this process and compress all not yet compressed data, you can run prune --repack-uncompressed

    Vorher

    e938e73b-35c0-4b55-a45e-127d93cb2825-image.png

    Nachher

    Uuups, jetzt ist mir der Plattenplatz ausgegangen. Ok, machen wir morgen weiter.

    [frank-ms7c92 ~]# restic prune --repack-uncompressed -r /mnt/Backup/Datensicherung_Home_Restic_UI/
    enter password for repository: 
    wrong password or no key found. Try again
    enter password for repository: 
    repository 50a2a753 opened (repository version 2) successfully, password is correct
    loading indexes...
    loading all snapshots...
    finding data that is still in use for 12 snapshots
    [0:06] 100.00%  12 / 12 snapshots
    searching used packs...
    collecting packs for deletion and repacking
    [0:00] 100.00%  48761 / 48761 packs processed
    
    to repack:        639695 blobs / 232.525 GiB
    this removes:      17295 blobs / 2.420 GiB
    to delete:             0 blobs / 0 B
    total prune:       17295 blobs / 2.420 GiB
    remaining:        834691 blobs / 230.262 GiB
    unused size after prune: 0 B (0.00% of remaining size)
    
    repacking packs
    [20:01] 35.12%  17121 / 48748 packs repacked
    Fatal: write /mnt/Backup/Datensicherung_Home_Restic_UI/data/f5/f5aa7d219ded5c271bf36ef67676f9af9d7817cf24d3245807734e6e6ca61e73-tmp-2111188238: no space left on device
    

    Ok, der Vorgang ist jetzt abgeschlossen. Kalkuliert bitte für den Vorgang den Platz der aktuell verbraucht wird obendrauf. Unter Umständen wird das schwierig.

    [frank-ms7c92 Backup]# restic prune --repack-uncompressed -r /mnt/Backup/Datensicherung_Home_Restic_UI/
    enter password for repository: 
    repository 50a2a753 opened (repository version 2) successfully, password is correct
    loading indexes...
    loading all snapshots...
    finding data that is still in use for 12 snapshots
    [0:06] 100.00%  12 / 12 snapshots
    searching used packs...
    collecting packs for deletion and repacking
    [0:00] 100.00%  48761 / 48761 packs processed
    
    to repack:        639695 blobs / 232.525 GiB
    this removes:      17295 blobs / 2.420 GiB
    to delete:             0 blobs / 73.281 GiB
    total prune:       17295 blobs / 75.701 GiB
    remaining:        834691 blobs / 230.262 GiB
    unused size after prune: 0 B (0.00% of remaining size)
    
    deleting unreferenced packs
    [0:01] 100.00%  4447 / 4447 files deleted
    repacking packs
    [1:56:48] 100.00%  48748 / 48748 packs repacked
    rebuilding index
    [0:01] 100.00%  12707 / 12707 packs processed
    deleting obsolete index files
    [0:00] 100.00%  6 / 6 files deleted
    removing 48748 old packs
    [0:02] 100.00%  48748 / 48748 files deleted
    done
    

    Ich kann hier leider nicht aufzeigen, ob ich etwas gespart habe. Dafür hätte ich vorher mal eine Bestandsaufnahme machen müssen. Vergessen 😞

    Die neuen Funktionen arbeiten aber soweit korrekt, soweit ich das aktuell beurteilen kann. Werde mich mit dem Thema aber noch etwas ausführlicher beschäftigen, auch weil ich die neuen Funktionen in mein Resti UI einbauen werde.

  • Restic v0.16.1 released

    Restic
    1
    0 Stimmen
    1 Beiträge
    92 Aufrufe
    Niemand hat geantwortet
  • Restic v0.16.0 released

    Restic
    1
    0 Stimmen
    1 Beiträge
    89 Aufrufe
    Niemand hat geantwortet
  • Restic UI - Repo Version

    Restic UI
    1
    0 Stimmen
    1 Beiträge
    81 Aufrufe
    Niemand hat geantwortet
  • Python3 - pyqtSignal

    Python3
    1
    0 Stimmen
    1 Beiträge
    66 Aufrufe
    Niemand hat geantwortet
  • Restic v0.13.0 released

    Restic
    1
    0 Stimmen
    1 Beiträge
    96 Aufrufe
    Niemand hat geantwortet
  • Restic - Passwortübergabe

    Restic
    1
    0 Stimmen
    1 Beiträge
    132 Aufrufe
    Niemand hat geantwortet
  • Restic v0.10.0 released

    Restic
    2
    0 Stimmen
    2 Beiträge
    193 Aufrufe
    FrankMF

    Gerade erst gelesen, man kann folgendes machen, damit es sich aktualisiert.

    root@debian:~# restic self-update writing restic to /usr/bin/restic find latest release of restic at GitHub latest version is 0.10.0 download SHA256SUMS download SHA256SUMS.asc GPG signature verification succeeded download restic_0.10.0_linux_amd64.bz2 downloaded restic_0.10.0_linux_amd64.bz2 saved 18378752 bytes in /usr/bin/restic successfully updated restic to version 0.10.0 root@debian:~# restic version restic 0.10.0 compiled with go1.15.2 on linux/amd64

    Klasse!

  • Restic - forget --keep-last 3 --prune

    Restic
    2
    0 Stimmen
    2 Beiträge
    576 Aufrufe
    FrankMF

    Ich habe mich damit noch ein wenig beschäftigt, die letzten drei zu behalten, ist nicht so optimal. Da es viele Optionen bei dem Befehl gibt, hier ein Ausschnitt

    Flags: -l, --keep-last n keep the last n snapshots -H, --keep-hourly n keep the last n hourly snapshots -d, --keep-daily n keep the last n daily snapshots -w, --keep-weekly n keep the last n weekly snapshots -m, --keep-monthly n keep the last n monthly snapshots -y, --keep-yearly n keep the last n yearly snapshots

    habe ich das ein wenig so angepasst, das ich denke es passt für mich.

    restic --password-file /root/passwd -r /media/NAS_neu/Restic/Home/ forget --keep-last 3 --keep-monthly 3 --prune

    Damit behalte ich auch die jeweils eines pro Monat. Und die letzten drei. Das sieht dann so aus.

    root@debian:~# ./backup2.sh repository 2f3f6147 opened successfully, password is correct Files: 38 new, 100 changed, 13268 unmodified Dirs: 0 new, 1 changed, 0 unmodified Added to the repo: 10.166 GiB processed 13406 files, 50.324 GiB in 3:24 snapshot 849f614c saved repository 2f3f6147 opened successfully, password is correct Applying Policy: keep the last 3 snapshots, 3 monthly snapshots snapshots for (host [debian], paths [/home/frank]): keep 5 snapshots: ID Time Host Tags Reasons Paths ------------------------------------------------------------------------------------ a7251cfd 2019-11-28 17:00:01 debian monthly snapshot /home/frank 283d4027 2019-12-31 17:00:01 debian monthly snapshot /home/frank ae2b96ec 2020-01-01 21:47:46 debian last snapshot /home/frank 079e00a6 2020-01-02 17:00:01 debian last snapshot /home/frank 849f614c 2020-01-03 21:08:45 debian last snapshot /home/frank monthly snapshot ------------------------------------------------------------------------------------ 5 snapshots remove 26 snapshots: ID Time Host Tags Paths ------------------------------------------------------------------ 896f16c2 2019-11-07 22:23:40 debian /home/frank b21bcf6d 2019-11-11 17:00:01 debian /home/frank f89248fb 2019-11-12 17:00:01 debian /home/frank 123ab546 2019-11-13 17:00:01 debian /home/frank b82d87d0 2019-11-18 17:00:01 debian /home/frank 040b0ab7 2019-11-19 17:00:01 debian /home/frank 7221d8ef 2019-11-20 17:00:01 debian /home/frank 84132a25 2019-11-21 17:00:01 debian /home/frank b558a52c 2019-11-25 17:00:01 debian /home/frank e5cc0c3e 2019-12-02 17:00:01 debian /home/frank 22423fa5 2019-12-03 17:00:01 debian /home/frank 39df1ab9 2019-12-04 17:00:01 debian /home/frank 98843457 2019-12-05 17:00:01 debian /home/frank b0cdd4b6 2019-12-09 17:00:01 debian /home/frank 828414f9 2019-12-10 17:00:01 debian /home/frank e34a27c3 2019-12-11 17:00:01 debian /home/frank 6e488c3b 2019-12-12 17:00:01 debian /home/frank 17898403 2019-12-16 17:00:01 debian /home/frank 1973305a 2019-12-17 17:00:01 debian /home/frank 9553bedd 2019-12-18 17:00:01 debian /home/frank fedf749d 2019-12-19 17:00:01 debian /home/frank 8e7cb876 2019-12-23 17:00:01 debian /home/frank 0bd0d102 2019-12-25 17:00:01 debian /home/frank 13d348b0 2019-12-26 17:00:01 debian /home/frank c7d960aa 2019-12-30 17:00:01 debian /home/frank f6ea9118 2020-01-01 17:00:01 debian /home/frank ------------------------------------------------------------------ 26 snapshots 26 snapshots have been removed, running prune counting files in repo building new index for repo [0:35] 100.00% 7806 / 7806 packs repository contains 7806 packs (46537 blobs) with 41.110 GiB processed 46537 blobs: 0 duplicate blobs, 0 B duplicate load all snapshots find data that is still in use for 5 snapshots [0:01] 100.00% 5 / 5 snapshots found 32654 of 46537 data blobs still in use, removing 13883 blobs will remove 0 invalid files will delete 715 packs and rewrite 752 packs, this frees 5.027 GiB [2:28] 100.00% 752 / 752 packs rewritten counting files in repo [0:01] 100.00% 6571 / 6571 packs finding old index files saved new indexes as [d137b425 f7caee99 a6e9711a] remove 35 old index files [1:13] 100.00% 1467 / 1467 packs deleted done using temporary cache in /tmp/restic-check-cache-916655151 repository 2f3f6147 opened successfully, password is correct created new cache in /tmp/restic-check-cache-916655151 create exclusive lock for repository load indexes check all packs check snapshots, trees and blobs read all data [7:47] 100.00% 6571 / 6571 items duration: 7:47 no errors were found root@debian:~#

    Am Ende seht ihr noch, wie Restic alle Files testet. Mein Script sieht jetzt so aus.

    #!/bin/bash # Script um mit Restic Daten automatisiert zu sichern! # Dient zum Sichern der Homepartition auf dem ROCKPro64 NAS! # Was soll gesichert werden? backup_pfad=/home/frank # Programm Start restic --password-file /root/passwd -r /media/NAS_neu/Restic/Home/ backup $backup_pfad --exclude-file=excludes.txt restic --password-file /root/passwd -r /media/NAS_neu/Restic/Home/ forget --keep-last 3 --keep-monthly 3 --prune # Testen restic --password-file /root/passwd -r /media/NAS_neu/Restic/Home/ check --read-data

    Das dann schön mit einem Cronjob laufen lassen und die Datensicherung ist erledigt 😉