Duplicati-Backup auf dem Raspi mit SFTP speichern

🧰 Voraussetzungen

  • Raspberry Pi läuft mit SSH-Server (`openssh-server`)
  • SSD ist bereits gemountet unter `/media/san2tb`
  • Dein Client (der Duplicati ausführt) ist Linux

🔐 1. SSH-Schlüsselpaar auf dem Client erstellen

Auf dem Rechner, auf dem Duplicati läuft, wird ein Schlüsselpaar erstellt

ssh-keygen -t ed25519 -f ~/.ssh/sftpusr_key -N ""

Ergebnis:
Private Key: `~/.ssh/sftpusr_key`
Öffentlicher Key: `~/.ssh/sftpusr_key.pub`

Der Parameter `-N „“` sorgt für kein Passwort.

👤 2. Neuen Benutzer auf dem Raspberry Pi erstellen

Optional: Verhindere SSH-Login mit Passwort:

sudo adduser --disabled-password --gecos "" sftpusr
sudo passwd -l sftpusr 
# sudo usermod -d /home/sftpusr sftpusr 
sudo usermod -s /usr/sbin/nologin sftpusr

🔑 3. SSH-Zugang mit Schlüssel einrichten

1. Verzeichnisse erstellen:

sudo mkdir -p /home/sftpusr/.ssh
sudo chown sftpusr:sftpusr /home/sftpusr/.ssh
sudo chmod 700 /home/sftpusr/.ssh

2. Öffentlichen Schlüssel auf Pi übertragen:

ssh-copy-id -i ~/.ssh/sftp_user_key.pub sftp-user@raspi

Oder manuell:

cat ~/.ssh/sftpusr_key.pub | ssh pi@ "sudo tee /home/sftpusr/.ssh/authorized_keys"
sudo chown sftpusr:sftpusr /home/sftpusr/.ssh/authorized_keys
sudo chmod 600 /home/sftpusr/.ssh/authorized_keys

📁 4. Schreibrechte auf externe SSD einrichten

Angenommen, das Backup-Ziel ist: `/media/san2tb/backup_x13g3`

Ordner erstellen und Besitzerrechte auf `sftpusr` ändern:

sudo mkdir -p /media/san2tb/backup_x13g3
sudo chown -R sftpusr:sftpusr /media/san2tb/backup_x13g3

`sftpusr` braucht Schreibrechte in diesem Ordner – ohne Zugriff auf andere SSD-Bereiche.

🔐 5. Optional: Nur SFTP (kein SSH-Terminal)

Den User auf reines SFTP einschränken. Das ist empfohlen für Backup-Ziele. SSH-Konfiguration auf dem Pi anpassen:

sudo nano /etc/ssh/sshd_config

Am Ende einfügen:

Match User sftpusr
    ForceCommand internal-sftp
    ChrootDirectory /home/sftpusr
    PermitTTY no
    AllowTcpForwarding no
    X11Forwarding no

Das sperrt `sftpusr` in `/home/sftpusr`. Dann muss das Backup-Verzeichnis darin sein.

⚠️ WICHTIG:
`ChrootDirectory` muss root gehören, sonst funktioniert SFTP nicht.

sudo chown root:root /home/sftpusr
sudo chmod 755 /home/sftpusr

sudo mkdir -p /home/sftpusr/backup
sudo chown sftpusr:sftpusr /home/sftpusr/backup

Temporär zum testen:

sudo mount --bind /media/san2tb/backup_x13g3 /home/sftpusr/backup

sudo systemctl restart ssh

Mount dauerhaft via /etc/fstab einbinden.
Am Ende der Datei einfügen:

/media/san2tb/backup_x13g3 /home/sftpusr/backup none bind 0 0

🔄 6. In Duplicati einrichten

Neues Backup erstellen

  1. Zieltyp: `SFTP (SSH)`
  2. Server und Pfad:
    Server: IP des Raspberry Pi
    Pfad:
    Wenn `ChrootDirectory` gesetzt: /backup
    Sonst (z. B. ohne Chroot): /home/sftpusr/backup
  3. Authentifizierung:
    Benutzername: sftpusr
    Passwort: bleibt leer
    SSH Private Key (ohne Passphrase):
    Lade `/source/.ssh/sftpusr_key` hoch oder kopiere den Inhalt rein.
  4. Testverbindung klicken

✅ Fertig!

Neuer Massespeicher im Laptop

So langsam aber sicher wird der Speicherplatz für den Massespeicher auf dem Laptop zu klein, das ganze KI-Zeug braucht relativ viel Speicherplatz.
Da wir mit LVM / LUKS arbeiten, sind ein paar Schritte mehr notwendig…

  • Booten mit CloneZilla und Festplatte auf externe HDD klonen
  • neue SSD einbauen
  • Booten mit CloneZilla und Image zurück auf Festplatte spielen, Partitionen wie im Original belassen und nicht prozentual anpassen.
  • Live-USB stick booten und mit gparted die LVM-Partition entsperren und vergrößern. Gparted sieht nur die LVM-Partition und nicht die darin enthaltenen ‚logischen Volumen‘
  • Live-System beenden und ins normale System booten

Einen Überblick über die einzelnen Volume erhalten wir mit lvdisplay

Zunächst entfernen wir die Swap-Partition:

# Swap deaktivieren
swapoff -a
# mit lvremove die die logische Partionion 
lvremove /dev/vgmint/swap_1

Ermittel nun den freien Platz in der Partition: vgdisplay. Wenn die Einheit nicht ganz passt, kann sie mit vgdisplay --unit G angepasst werden.

Nachdem der Versuch das ganze mit GB anzugeben wegen Umrechnungsungenauigkeiten nicht geklappt hat, rechnen wir das ganze in Extends aus:

1 Extent = 4 MiB = 0,00390625 GB
32 GB / 0.00390625 ≈ 8192 Extents

715128 (verfügbar) - 8192 (für Reserve) = 706936 Extents

# Befehl zur Vergrößerung des Volumens
lvextend -l +706936 /dev/vgmint/root

Anschließend muss noch das Dateisystem vergrößert werden:

resize2fs /dev/vgmint/root

Und die Swap-Partion wieder hergestellt (es wird der komplette leere Platz verwendet) werden:

lvcreate -l 100%FREE -n swap_1 vgmint
mkswap /dev/vgmint/swap_1
swapon /dev/vgmint/swap_1

# Zum Überprüfen ob alles läuft:
swapon --show
free -h

BIOS-Update

Um die aktuelle Version anzuzeigen:
sudo dmidecode -s bios-version

Update der Firmware-Infos:
sudo fwupdmgr refresh --force

Geräte anzeigen lassen:
sudo fwupdmgr get-devices

Alle verfügbaren Updates herunterladen:
fwupdmgr get-updates

Firmeware-Update durchführen, sofern notwenig:
sudo fwupdmgr update