- README.md: Clone-URL und One-Liner auf git.leuschner.dev/Tobias/PiCopy - install.sh: REPO_RAW und Kommentar-Header angepasst Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
7.9 KiB
PiCopy
Automatische USB-Backup-Station für den Raspberry Pi mit Web-Interface
PiCopy verwandelt deinen Raspberry Pi in ein eigenständiges Backup-Gerät. Stecke eine Quell-USB (Speicherkarte, USB-Stick) und ein Ziel-Laufwerk ein – PiCopy kopiert die Daten automatisch, organisiert sie in Datumsordnern, prüft die Integrität und kann danach auf ein NAS hochladen.
Features
| Feature | Beschreibung | |
|---|---|---|
| 📋 | Automatisches Kopieren | Startet sofort wenn Quelle und Ziel eingesteckt werden |
| 🌐 | Web-Interface | Konfiguration und Status von jedem Gerät im Netzwerk |
| 📂 | Datei-Explorer | Inhalt verbundener Laufwerke direkt im Browser durchsuchen |
| 🗂️ | Smarte Organisation | Erstellt automatisch Datumsordner (2024-01-15_143022/) |
| 🔍 | Dateifilter | Nur Fotos, nur Videos oder beliebige Dateitypen kopieren |
| 🔄 | Duplikat-Behandlung | Überspringen / Überschreiben / Umbenennen |
| ✅ | MD5-Verifizierung | Jede Datei nach dem Kopieren auf Integrität prüfen |
| 🗑️ | Quelle leeren | Quelldateien nach erfolgreichem Kopieren löschen (Move-Modus) |
| 🖧 | NAS / SMB Upload | Nach dem lokalen Backup auf ein Netzlaufwerk hochladen |
| 📡 | WiFi-Fallback | Erstellt einen eigenen Hotspot wenn kein WLAN verfügbar ist |
| ⚡ | Headless-Betrieb | Kein Monitor, keine Tastatur nötig |
| 🔁 | Autostart | Startet automatisch beim Pi-Boot via systemd |
Voraussetzungen
- Raspberry Pi (2, 3, 4, 5 oder Zero 2W)
- Raspberry Pi OS Bookworm (Debian 12) oder neuer
- Mindestens 2 USB-Ports (Quelle + Ziel)
- WLAN oder LAN für das Web-Interface
Installation
Option A – Direkt vom Git-Repo (empfohlen)
git clone https://git.leuschner.dev/Tobias/PiCopy
cd PiCopy
sudo bash install.sh
Option B – One-Liner
curl -sSL https://git.leuschner.dev/Tobias/PiCopy/raw/branch/main/install.sh | sudo bash
Nach der Installation ist das Web-Interface unter folgender Adresse erreichbar:
http://<raspberry-pi-ip>:8080
Die IP-Adresse wird am Ende der Installation angezeigt.
Schnellstart
- Web-Interface öffnen →
http://<pi-ip>:8080 - USB-Gerät einstecken das als Quelle dienen soll
- Port konfigurieren → Unter USB Port Konfiguration das Gerät in der Dropdown-Liste wählen → Als feste Quelle speichern
- Ziel konfigurieren → Ziel-Laufwerk einstecken, Port wählen → Als festes Ziel speichern
- Auto-Kopie aktivieren → Haken bei Automatisch kopieren wenn Quelle & Ziel verbunden
- Fertig → Jetzt beide Laufwerke einstecken → Kopie startet automatisch
Wichtig: PiCopy merkt sich den physischen Port (Anschluss), nicht das spezifische Gerät. Ein anderer USB-Stick im gleichen Anschluss wird automatisch als Quelle/Ziel erkannt.
Web-Interface
Kopierstatus
Zeigt den Live-Fortschritt mit:
- Prozentualer Fortschritt + Fortschrittsbalken
- Dateizähler (
23 / 147 Dateien) - Übertragene Datenmenge (
1.2 GB / 3.5 GB) - Geschwindigkeit (
12.4 MB/s) - Verbleibende Zeit (
⏱ noch ca. 4 Min.) - Aktuelle Datei
- Phasen-Anzeige: Kopieren → Verifizieren → Quelle leeren
Nach dem Abschluss: Zusammenfassung mit ✕-Button (verschwindet nach 5 Minuten automatisch).
USB Port Konfiguration & Datei-Explorer
┌─────────────────┬─────────────────┬──────────────────────┐
│ ▲ QUELLE │ ▼ ZIEL │ ⬆ Quelle ⬇ Ziel ↻ │
│ ● Port 2-2 │ ○ Port 1-1 │ ──────────────────── │
│ Samsung USB │ Nicht verbunden│ 📁 DCIM │
│ │ │ 📁 MISC │
│ [Als Quelle ▾] │ [Als Ziel ▾] │ 🖼 IMG_001.jpg 4 MB │
└─────────────────┴─────────────────┴──────────────────────┘
- Grüner Punkt = Gerät verbunden und bereit
- Grauer Punkt = Port konfiguriert, kein Gerät eingesteckt
- Datei-Explorer zum Durchsuchen der verbundenen Laufwerke
Kopier-Einstellungen
| Einstellung | Standard | Beschreibung |
|---|---|---|
| Datumsformat | JJJJ-MM-TT |
Format des Zielordners |
| Uhrzeit | ✓ | Uhrzeit im Ordnernamen (_143022) |
| Unterordner | ✓ | Unterordner nach Gerätebezeichnung |
| Auto-Kopie | ✓ | Automatisch starten wenn beide verbunden |
| Dateifilter | leer | Nur bestimmte Dateitypen kopieren |
| Systemdateien | ✓ | .DS_Store, Thumbs.db, RECYCLER usw. ausschließen |
| Duplikate | Überspringen | Skip / Überschreiben / Umbenennen |
| MD5-Verify | ✗ | Jede Datei nach dem Kopieren prüfen |
| Quelle leeren | ✗ | Quelldateien nach Kopieren löschen |
Dateifilter – Schnell-Presets
| Preset | Dateitypen |
|---|---|
| 📷 Fotos | jpg, jpeg, heic, raw, cr2, nef, arw, dng, png |
| 🎬 Videos | mp4, mov, avi, mkv, mts, m2ts, wmv |
| 📷+🎬 Beides | Fotos + Videos kombiniert |
| ✕ Alle | Kein Filter – alle Dateien kopieren |
Fernkopie – NAS / SMB
Nach dem lokalen Kopieren lädt PiCopy auf konfigurierte NAS-Freigaben hoch:
- + NAS-Ziel hinzufügen klicken
- Name, Server-IP, Freigabename, Benutzer und Passwort eingeben
- Speichern & Verbindung testen – PiCopy testet die Verbindung sofort
- Mehrere NAS-Ziele möglich, jedes einzeln aktivierbar
WiFi-Einstellungen
| Modus | Beschreibung |
|---|---|
| Heimnetz | WLAN-Name und Passwort für die Router-Verbindung |
| Hotspot (AP) | Eigenes WLAN wenn kein Heimnetz erreichbar |
Hotspot-Standardwerte:
- SSID:
PiCopy - Passwort:
PiCopy, - IP im Hotspot-Modus:
http://10.42.0.1:8080
Der Hotspot startet automatisch beim Boot wenn das konfigurierte WLAN nicht verfügbar ist.
Ordnerstruktur auf dem Ziel
/ziel-laufwerk/
└── 2024-01-15_143022/ ← Datum + Uhrzeit (konfigurierbar)
└── Samsung_USB/ ← Gerätebezeichnung (wenn Unterordner aktiv)
├── DCIM/
│ └── 100CANON/
│ ├── IMG_0001.JPG
│ ├── IMG_0001.CR2
│ └── IMG_0002.MP4
└── MISC/
└── notes.txt
Update
cd PiCopy
git pull
sudo cp app.py /opt/picopy/app.py
sudo systemctl restart picopy
Deinstallation
sudo systemctl stop picopy
sudo systemctl disable picopy
sudo rm /etc/systemd/system/picopy.service
sudo rm -rf /opt/picopy
sudo systemctl daemon-reload
Service-Verwaltung
# Status prüfen
sudo systemctl status picopy
# Live-Logs
journalctl -u picopy -f
# Neustart
sudo systemctl restart picopy
# Stoppen
sudo systemctl stop picopy
Technische Details
| Komponente | Technologie |
|---|---|
| Backend | Python 3 + Flask |
| USB-Erkennung | lsblk + udevadm |
| USB-Monitoring | pyudev (udev-Events) |
| WiFi-Verwaltung | NetworkManager (nmcli) |
| NAS-Sync | rclone (SMB) |
| Service | systemd (Autostart, Auto-Restart) |
Dateipfade auf dem Pi:
| Pfad | Inhalt |
|---|---|
/opt/picopy/app.py |
Hauptanwendung |
/opt/picopy/config.json |
Konfiguration (Ports, WiFi, Einstellungen) |
/opt/picopy/state.json |
Letzter Kopierstatus (persisted) |
/opt/picopy/rclone.conf |
NAS-Zugangsdaten (rclone) |
/opt/picopy/logs/picopy.log |
Log-Datei |
/etc/systemd/system/picopy.service |
Systemd-Service |
Getestete Hardware
| Gerät | Status |
|---|---|
| Raspberry Pi 4 Model B | ✅ Vollständig getestet |
| Raspberry Pi 5 | ✅ Kompatibel |
| Raspberry Pi 3 Model B+ | ✅ Kompatibel |
| Raspberry Pi Zero 2W | ⚠️ Langsamer, nur 1 USB-Port (Hub benötigt) |
Lizenz
MIT License – siehe LICENSE
Autor
Tobias Leuschner – info@leuschner.dev