BorgBackup
Dieser Artikel wurde für die folgenden Ubuntu-Versionen getestet:
Ubuntu 20.04 Focal Fossa
Du möchtest den Artikel für eine weitere Ubuntu-Version testen? Mitarbeit im Wiki ist immer willkommen! Dazu sind die Hinweise zum Testen von Artikeln zu beachten.
Zum Verständnis dieses Artikels sind folgende Seiten hilfreich:
BorgBackup 🇬🇧 (Borg) ist eine Datensicherungssoftware, die eine sehr platzsparende und schnelle inkrementelle Archivierung ermöglicht. Alle Archive werden dabei an einem gemeinsamen Speicherort (Repository) abgelegt. Dieser kann sich sowohl auf dem lokalen System, als auch auf einem entfernten Rechner oder Laufwerk befinden. Borg hat weder eine grafische Oberfläche noch eine Konfigurationsdatei und wird allein über die Kommandozeile gesteuert. Mit Hilfe von Skripten kann das Backup aber sehr einfach automatisiert werden. Borg ist eine Weiterentwicklung (Fork) des Programms Attic 🇬🇧.
Besondere Eigenschaften:
Authentifizierte Verschlüsselung möglich (AES)
Auswahl zwischen mehreren Kompressionsmethoden (lz4, zlib, lzma)
Unterstützung des SSH-Protokolls für die Sicherung auf entfernten Rechnern
Unabhängig vom Dateisystem des Speicherorts
Borg unterscheidet sich von anderen Backupprogrammen vor allem durch die für die Deduplikation eingesetzte Technik. Hierbei werden alle Dateien in kleine Stücke (Chunks) zerlegt und mit den bereits vorhanden Chunks im Repository verglichen. Daher werden immer nur solche Daten gespeichert, die bisher noch nicht im Repository vorhanden sind. Die Deduplizierung ist bei Borg nicht auf die Dateiebene beschränkt, wie das z.B. bei Back In Time der Fall ist. Dadurch entsteht ein entscheidender Vorteil bei kleinen Änderungen an sehr großen Dateien (z.B. Abbilder von virtuellen Maschinen oder Laufwerken). Diese müssen nicht insgesamt neu gespeichert werden, sondern es werden immer nur die veränderten Chunks neu abgelegt. Auch beim Verschieben von Dateien im Dateisystem oder bei mehrfachem Vorhandensein sehr ähnlicher Daten (z.B. mehrerer virtueller Maschinen) wirkt sich diese Form der Deduplikation positiv auf den benötigten Speicherplatz aus.
Installation¶
Borg ist Bestandteil der offiziellen Paketquellen. Die Installation erfolgt über das Paket [1]:
borgbackup (universe)
Befehl zum Installieren der Pakete:
sudo apt-get install borgbackup
Oder mit apturl installieren, Link: apt://borgbackup
Standalone Binary¶
Alternativ zu offiziellen Paketquellen können auch Standalone Binarys 🇬🇧 genutzt werden. Dazu lädt man das gewünschte Binary mit dem Namen borg-linux32 oder borg-linux64 (je nach Systemarchitektur) von der Release-Seite 🇬🇧 herunter und installiert sie wie folgt [2]:
32-Bit:
sudo cp borg-linux32 /usr/local/bin/borg sudo chown root:root /usr/local/bin/borg sudo chmod 755 /usr/local/bin/borg
64-Bit:
sudo cp borg-linux64 /usr/local/bin/borg sudo chown root:root /usr/local/bin/borg sudo chmod 755 /usr/local/bin/borg
Vorteil: hierüber erhält man auch neuere Versionen als in den offiziellen Paketquellen verfügbar. Nachteil: um Updates muss man sich selbst kümmern.
Benutzung¶
Hinweis:
Borg muss nicht unbedingt mit Administrator- bzw. Root-Rechten ausgeführt werden. Hat der Nutzer jedoch kein Schreibrecht auf den Speicherort oder kein Leserecht für alle zu sichernden Dateien, muss den folgenden Befehlen ggf. ein sudo
[3] vorangestellt werden.
Initialisierung¶
Bevor Backups in Archiven gespeichert werden können, muss mit Hilfe des Terminals ein Repository angelegt werden:
mkdir REPO_VERZEICHNISPFAD borg init [OPTIONEN] REPO_VERZEICHNISPFAD
REPO_VERZEICHNISPFAD
gibt dabei den Pfad [4] zu einem leeren Verzeichnis an, in dem das Repository angelegt werden soll. Zu möglichen Optionen siehe nachfolgende Tabelle:
Wichtige Optionen für den init-Befehl | |
Option | Beschreibung |
-e oder --encryption {none,keyfile,repokey} | Wählt die Art der Verschlüsselung {keine, lokale Schlüsseldatei, Schlüsseldatei im Repository} (Option erforderlich) |
-v oder --verbose | Ausführlichere Ausgabe von Meldungen |
-h oder --help | Ausgabe eines Hilfetextes |
Standard ist eine Verschlüsselung mit Ablage der Schlüsseldatei im Repository (repokey). Diese Datei wird dann über eine Passphrase gesichert. Befindet sich das Repository auf einem entfernten Rechner und will man die Sicherheit erhöhen, kann man die Schlüsseldatei auch im Verzeichnis ~.config/borg/keys' auf dem lokalen Rechner speichern (keyfile). Dann sollte man die Schlüsseldatei aber unbedingt zusätzlich sichern. Sonst kann bei einem Datenverlust des lokalen Rechners das Archiv nicht wieder entschlüsselt werden!
Beispiel: Der Benutzer "peter" möchte auf seiner externen Festplatte "HD_Backup" ein Repository "borgbackups" anlegen. In diesem Fall sieht die Befehlszeile so aus:
mkdir /media/peter/HD_Backup/borgbackups borg init -e repokey /media/peter/HD_Backup/borgbackups
Nach Eingabe der Befehlszeile wird die Passphrase abgefragt, die zur Verschlüsselung verwendet werden soll.
Anlegen von Archiven¶
Achtung!
Bevor Backup-Archive erstellt werden, muss sichergestellt werden, dass genügend freier Speicherplatz im Repository-Verzeichnis vorhanden ist. Auch im Homeverzeichnis unter ~/.cache sollten nach Angaben der Borg-Entwickler mehrere Gigabyte für die Indexierung frei sein.
Archive werden mittels create
angelegt. Die Liste der Verzeichnisse, die gesichert werden sollen, wird am Ende der Befehlszeile durch Leerzeichen getrennt angegeben.
borg create [OPTIONEN] REPO_VERZEICHNISPFAD::ARCHIVNAME VERZEICHNISPFAD_1 [VERZEICHNISPFAD_2 ...]
Zu möglichen Optionen für das Anlegen von Archiven siehe nachfolgende Tabelle:
Wichtige Optionen für den create-Befehl | |
Option | Beschreibung |
-h oder --help | Ausgabe eines Hilfetextes |
-v oder --verbose | Ausführlichere Ausgabe von Meldungen |
-s oder --stats | Ausgabe von Statistiken zum erzeugten Archiv |
-p oder --progress | Ausgabe einer Fortschrittsanzeige |
-e oder --exclude MUSTER | Ein bestimmtes Muster MUSTER bei der Sicherung ausschließen, z.B. *.tmp |
--exclude-caches | Cache-Verzeichnisse (mit dem CACHEDIR.TAG) ausschließen |
-x oder --one-file-system | Im gleichen Dateisystem bleiben und Einhängepunkte ignorieren |
-C oder --compression KOMPRESSION | Kompressionsalgorithmus und Stufe wählen (siehe nachfolgende Tabelle) |
Die in Borg implementierten Kompressionsalgorithmen unterscheiden sich in Bezug auf Geschwindigkeit und Kompressionsgrad: lz4 ist sehr schnell, erreicht aber nur eine mittlere Kompression. zlib erreicht eine mittlere Geschwindigkeit und Kompression, während lzma am langsamsten ist, aber den höchsten Kompressionsgrad ermöglicht. Ein Vergleichstest der Kompressionsalgorithmen findet sich hier.
Mögliche Werte für die Kompression | |
Kompression | Beschreibung |
none | Keine Kompression (Standard) |
lz4 | lz4 |
zlib | zlib Stufe 6 |
zlib,N | zlib Stufe N. N von 0 bis 9, z.B. zlib,8 |
lzma | lzma Stufe 6 |
lzma,N | lzma Stufe N. N von 0 bis 9, z.B. lzma,4 |
Beispiel: Der Benutzer "peter" hat auf einer externen Festplatte ein Repository "borgbackups" erstellt und will den Bilder- und den Video-Ordner seines Homeverzeichnisses in ein Archiv "MeineMedien" sichern. Die Kompression soll mit lzma der Stufe 4 erfolgen. In diesem Fall sieht die Befehlszeile so aus:
borg create -C lzma,4 /media/peter/HD_Backup/borgbackups::MeineMedien ~/Bilder ~/Videos
Im produktiven Einsatz hängt man an den Archivnamen am Besten noch das jeweilige Datum an. Zur Automatisierung siehe auch die Skriptvorlage weiter unten.
Wiederherstellen von Daten¶
Die Wiederherstellung von Daten kann auf zwei unterschiedlichen Wegen erfolgen. Entweder werden die gesicherten Dateien und Verzeichnisse direkt ins Dateisystem zurück kopiert oder das gesamte Repository bzw. ein einzelnes Archiv wird mittels FUSE lesend ins Dateisystem eingebunden. In diesen Fall kann das Backup zunächst mit einem Dateimanager durchsucht und einzelne Dateien oder Verzeichnisse können anschließend an andere Orte kopiert werden.
Zurückspielen von Dateien und Ordnern¶
Das Zurückspielen von Archiven wird mittels extract
vorgenommen. Dabei wird immer das aktuelle Verzeichnis als Ziel verwendet.
cd ZIEL_VERZEICHNISPFAD borg extract [OPTIONEN] REPO_VERZEICHNISPFAD::ARCHIVNAME [VERZEICHNISPFAD_1 VERZEICHNISPFAD_2 ...]
Werden am Ende der Befehlszeile keine Verzeichnisse angegeben, wird das gesamte Archiv extrahiert. Zu möglichen Optionen für das Extrahieren von Archiven siehe nachfolgende Tabelle:
Wichtige Optionen für den extract-Befehl | |
Option | Beschreibung |
-h oder --help | Ausgabe eines Hilfetextes |
-v oder --verbose | Ausführlichere Ausgabe von Meldungen |
-e oder --exclude MUSTER | Ein bestimmtes Muster MUSTER beim zurück spielen ausschließen, z.B. *.vdi |
-n oder --dry-run | Testlauf ohne Dateien zu schreiben |
Beispiel: Das Repository "borgbackups" des Benutzers "peter" liegt auf einer externen Festplatte. Das darin befindliche Verzeichnis "home/peter/Videos" im Archiv "MeineMedien" soll in das Verzeichnis "Wiederhergestellt" im Homeverzeichnis des Benutzers kopiert werden. Dieses Verzeichnis ist noch nicht vorhanden und muss zuvor erstellt werden. In diesem Fall sehen die Befehlszeilen so aus:
mkdir ~/Wiederhergestellt cd ~/Wiederhergestellt borg extract /media/peter/HD_Backup/borgbackups::MeineMedien home/peter/Videos
Einhängen der Sicherung mit Fuse¶
Das Einhängen von Archiven erfolgt mit dem Borg-Befehl mount
.
borg mount [OPTIONEN] REPO_VERZEICHNISPFAD[::ARCHIVNAME] ZIEL_VERZEICHNISPFAD
Wird kein Archivname angegeben, wird das gesamte Repository eingehängt. Nach dem Einhängen kann auf das Backup lesend zugegriffen werden. Zu möglichen Optionen für das Einhängen von Archiven siehe nachfolgende Tabelle:
Wichtige Optionen für den mount-Befehl | |
Option | Beschreibung |
-h oder --help | Ausgabe eines Hilfetextes |
-v oder --verbose | Ausführlichere Ausgabe von Meldungen |
-f oder --foreground | Prozess bleibt im Vordergrund. Das Backup wird ausgehängt, sobald der Prozess beendet wird. |
Wird mount
ohne die Option --foreground
aufgerufen, muss das Dateisystem wieder manuell ausgehängt werden:
fusermount -u ZIEL_VERZEICHNISPFAD
Ab borg 1.0.9 ist das Aushängen auch mittels borg umount <mountpoint>
möglich.
Beispiel: Das Repository "borgbackups" des Benutzers "peter" liegt auf einer externen Festplatte. Das darin befindliche Archiv "MeineMedien" soll in das Verzeichnis "Sicherung" im Homeverzeichnis eingehängt werden. Dieses Verzeichnis ist noch nicht vorhanden und muss zuvor angelegt werden. In diesem Fall sehen die Befehlszeilen so aus:
mkdir ~/Sicherung borg mount /media/peter/HD_Backup/borgbackups::MeineMedien ~/Sicherung fusermount -u ~/Sicherung # Nach Beendigung des Zugriffs
Automatisches Löschen von Archiven¶
Eine vom Alter der Archive abhängige automatische Löschung kann mittels prune
vorgenommen werden.
borg prune [OPTIONEN] REPO_VERZEICHNISPFAD
Welche Archive nicht gelöscht werden sollen, wird mit Hilfe der Optionen festgelegt. Um nicht unbeabsichtigt Archive zu löschen, empfiehlt sich zunächst einen Testlauf mit den Optionen --dry-run -v --list
vorzunehmen. Zu möglichen Optionen für das automatische Löschen von Archiven siehe nachfolgende Tabelle:
Wichtige Optionen für den prune-Befehl | |
Option | Beschreibung |
-h oder --help | Ausgabe eines Hilfetextes |
-v oder --verbose | Ausführlichere Ausgabe von Meldungen |
-n oder --dry-run | Testlauf ohne Archive zu löschen |
--list | Ausgabe einer Liste welche Archive gelöscht/behalten werden |
--keep-within=NZ | Behalte alle Archive im Zeitintervall NZ. N ist dabei eine positive Ganzzahl und Z eine Abkürzung für die Zeiteinheit: "H" Stunden, "d" Tage, "w" Wochen, "m" Monate und "y" Jahre. Also z.B. "7m" für sieben Monate. |
-H=N oder --keep-hourly=N | Behalte zusätzlich je ein Archiv der letzten N Stunden |
-d=N oder --keep-daily=N | Behalte zusätzlich je ein Archiv der letzten N Tage |
-w=N oder --keep-weekly=N | Behalte zusätzlich je ein Archiv der letzten N Wochen |
-m=N oder --keep-monthly=N | Behalte zusätzlich je ein Archiv der letzten N Monate |
-y=N oder --keep-yearly=N | Behalte zusätzlich je ein Archiv der letzten N Jahre |
Beispiel: Das Repository "borgbackups" des Benutzers "peter" liegt auf einer externen Festplatte. Alle Archive, die innerhalb des letzten Tages erstellt wurden, sollen behalten werden. Außerdem sollen zusätzlich die aktuellsten Sicherungen der letzten sieben Sicherungstage, der letzten vier Wochen und der letzten zwölf Monate behalten werden. Es wird zunächst ein Testlauf durchgeführt:
borg prune --dry-run -v --list --keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12 /media/peter/HD_Backup/borgbackups
Um die Löschung tatsächlich vorzunehmen, muss der o.g. Befehl ohne die Option --dry-run
ausgeführt werden.
Anlegen von Sicherungen mittels SSH¶
Soll das Repository auf einem entfernten Rechner mittels SSH angelegt werden, muss Borg vorher auch auf dem Zielrechner installiert werden. Danach muss bei allen den Borg-Befehlen der Ausdruck REPO_VERZEICHNISPFAD
durch ssh://BENUTZER@RECHNERNAME:PORT//REPO_VERZEICHNISPFAD
ersetzt werden. Dabei ist RECHNERNAME
der Name oder die IP-Adresse unter der der entfernte Rechner im Netzwerk zu erreichen ist. BENUTZER
ist der Benutzername zum Anmelden auf dem entfernten Rechner. Dieser Benutzer muss Schreibrechte für des Zielverzeichnis besitzen. PORT
ist der SSH-Port, im Allgemeinen wird der Standardport 22
benutzt. Wenn ssh mit bestimmten Optionen aufgerufen werden soll, kann der SSH-Befehl vorher an die Umgebungsvariable BORG_RSH
übergeben werden. Die Angabe des Pfads zu einer Schlüsseldatei erfolgt z.B. so:
export BORG_RSH='ssh -i /PFAD/SCHLÜSSELDATEI'
Borg verwendet dann diesen erweiterten Befehl statt eines einfachen "ssh".
Hinweis:
Sollte eine Installation von Borg auf dem Zielrechner nicht möglich sein, kann das Zielverzeichnis alternativ zuvor auch mittels sshfs eingebunden werden. Dann kann Borg auf dieses Verzeichnis wie auf ein lokales Verzeichnis zugreifen.
Weitere Borg-Befehle¶
Befehlsübersicht Borg | |
Befehl | Beschreibung |
borg break-lock [OPTIONEN] REPO_VERZEICHNISPFAD | Hebt den Lockmechanismus auf. Nur benutzen, wenn kein Prozess auf das Repository zugreift! |
borg change-passphrase [OPTIONEN] REPO_VERZEICHNISPFAD | Ändert die Passphrase |
borg check [OPTIONEN] REPO_VERZEICHNISPFAD[::ARCHIVNAME] | Überprüfe die Konsistenz des gesamten Repositorys oder von einzelnen Archiven |
borg delete [OPTIONEN] REPO_VERZEICHNISPFAD[::ARCHIVNAME] | Löscht einzelne Archive oder das gesamte Repository |
borg info [OPTIONEN] REPO_VERZEICHNISPFAD::ARCHIVNAME | Ausgabe von Informationen über ein Archiv |
borg list [OPTIONEN] REPO_VERZEICHNISPFAD[::ARCHIVNAME] | Gibt den Inhalt eines Repositorys oder eines Archivs aus |
borg rename [OPTIONEN] REPO_VERZEICHNISPFAD::ARCHIVNAME NEUER_ARCHIVNAME | Umbenennung eines Archivs |
Eine vollständige Dokumentation aller Befehle findet man auf der Projektseite 🇬🇧.
Skriptvorlage BorgBackup¶
Da Borg keine Konfigurationsdatei besitzt und zudem sehr viele Optionen kennt, werden die Befehlszeilen schnell unübersichtlich. Daher erledigt man die Archivierung am besten mit Hilfe eines Skripts. Eine Vorlage ist unten aufgeführt. Mit einem Editor[5] kann das Skript an die eigenen Bedürfnisse angepasst werden. Zunächst gibt man den Zielpfad, den Namen des Repositorys und die zu sichernden Verzeichnisse an. Die weiteren Optionen kann man bei Bedarf ebenfalls abändern. Das Skript muss dann z.B. im Homeverzeichnis unter ~/bin/borgbackup.sh gespeichert und anschließend ausführbar gemacht werden. Falls das Verzeichnis ~/bin hierfür neu angelegt wurde, muss die Variable PATH
vorher noch aktualisiert werden, damit das Skript gefunden wird.
source ~/.profile # nur bei neu angelegtem ~/bin chmod +x ~/bin/borgbackup.sh
Das Skript kann anschießend im Terminal gestartet werden.
borgbackup.sh
Skript¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | #!/bin/bash # Skriptvorlage BorgBackup # https://wiki.ubuntuusers.de/BorgBackup/ # https://borgbackup.readthedocs.io/en/stable/ # Hier Pfad zum Sicherungsmedium angeben. # z.B. zielpfad="/media/peter/HD_Backup" zielpfad="" # Hier Namen des Repositorys angeben. # z.B. repository="borgbackups" repository="" # Hier eine Liste mit den zu sichernden Verzeichnissen angeben # z.B. sicherung="/home/peter/Bilder /home/peter/Videos --exclude *.tmp" sicherung="" # Hier die Art der Verschlüsselung angeben # z.B. verschluesselung="none" verschluesselung="repokey" # Hier die Art der Kompression angeben # z.B. kompression="none" kompression="lz4" # Hier angeben, ob vor der Ausführung von BorgBackup auf vorhandene Root-Rechte geprüft werden soll # z.B. rootuser="ja" rootuser="nein" # Hier angeben nach welchem Schema alte Archive gelöscht werden sollen. # Die Vorgabe behält alle Sicherungen des aktuellen Tages. Zusätzlich das aktuellste Archiv der # letzten 7 Sicherungstage, der letzten 4 Wochen sowie der letzten 12 Monate. pruning="--keep-within=1d --keep-daily=7 --keep-weekly=4 --keep-monthly=12" ################################################################################################### repopfad="$zielpfad"/"$repository" # check for root if [ $(id -u) -ne 0 ] && [ "$rootuser" == "ja" ]; then echo "Sicherung muss als Root-User ausgeführt werden." exit 1 fi # Init borg-repo if absent if [ ! -d $repopfad ]; then borg init --encryption=$verschluesselung $repopfad echo "Borg-Repository erzeugt unter $repopfad" fi # backup data SECONDS=0 echo "Start der Sicherung $(date)." borg create --compression $kompression --exclude-caches --one-file-system -v --stats --progress \ $repopfad::'{hostname}-{now:%Y-%m-%d-%H%M%S}' $sicherung echo "Ende der Sicherung $(date). Dauer: $SECONDS Sekunden" # prune archives borg prune -v --list $repopfad --prefix '{hostname}-' $pruning |
Hilfe zum Umgang mit Bash-Skripten findet man auch im Bash-Skripting-Guide für Anfänger.
Skript automatisiert ausführen¶
Soll das Skript bzw. borg automatisiert ausgeführt werden, so muss entweder die Verschlüsselung deaktivert werden (verschluesselung="none"
) oder das Passwort von borg auslesbar gehalten werden. Alle für borg empfohlenen Methoden sind hier beschrieben.
Dort wird eine besondere Methode empfohlen, eine Datei mit dem Passwort im Heimatverzeichnis mit restriktiven Permissions zu erzeugen
# Beispiel für ein zufällig generiertes Passwort; könnte auch ein eigenes sein: head -c 32 /dev/urandom | base64 -w 0 > ~/.borg-passphrase # restriktive Permissions setzen: chmod 400 ~/.borg-passphrase
und diese dann per borg-Befehl nur im Bedarfsfall lesen zu lassen:
export BORG_PASSCOMMAND="cat $HOME/.borg-passphrase"
Ein andere Methode benutzt die Umgebungsvariable BORG_PASSPHRASE, in der dann das Passwort aber direkt gespeichert ist. Am einfachsten ergänzt man das Skript am Anfang um die Zeile:
export BORG_PASSPHRASE="mySecretPassword"
Achtung!
Bei dieser Variante steht das Passwort als Klartext im Skript. Man sollte also sicherstellen, dass niemand unbefugtes diese Datei lesen kann.
Hilfe zum Umgang mit Umgebungsvariablen findet man auch im Artikel zu Umgebungsvariablen.
Hinweis:
Wird die Umgebungsvariable nicht innerhalb des Skriptes gesetzt und das Skript soll mit Root-Rechten ausgeführt werden, so ist dieses mittels
sudo -E borgbackup.sh
aufzurufen. Damit wird die Benutzerumgebung beim Starten des Befehls beibehalten.
Damit das Skript auch regelmäßig ausgeführt wird, muss noch ein entsprechender Timer erstellt werden. Z.B. mittels anacron.
sudo apt-get update sudo apt-get install anacron sudo ln -s /home/user/bin/borgbackup.sh /etc/cron.hourly/borgbackup #für anacron darf kein Punkt im Namen vorhanden sein
Bedienung über eine grafische Oberfläche¶
Neben der Bedienung auf der Kommandozeile kann Borg auch über eine grafische Oberfläche gesteuert werden. Hierzu muss aber zusätzliche Software installiert werden. Der Desktop-Client Vorta kann aus den Quellen selbst kompiliert oder als Flatpak installiert werden. Ab Ubuntu 21.04 Hirsute Hippo ist Vorta auch in den Paketquellen (universe) enthalten. Pika Backup ist ein weiterer grafischer Client, der zur Zeit aber noch nicht alle Kernfunktionen von Borg unterstützt. So sind z.B. zeitgesteuerte Backups nicht möglich. Pika Backup kann ebenfalls als Flatpak installiert werden.
Links¶
Projektseite 🇬🇧
Quellcode 🇬🇧
Vortrag vom Entwickler Thomas Waldmann 🇩🇪 - GPN 2017 (die ersten 35 min geben einen guten Überblick über das Projekt)
Datensicherung Übersichtsartikel