init at home
This commit is contained in:
@@ -0,0 +1,479 @@
|
||||
# Snapper Anleitung für CachyOS - Detaillierte Version
|
||||
|
||||
## Was ist Snapper?
|
||||
|
||||
Snapper ist ein Tool für BTRFS-Dateisysteme, das automatisch Snapshots (Momentaufnahmen) erstellt. Diese Snapshots sind wie "Wiederherstellungspunkte" - sie speichern den Zustand deines Systems zu einem bestimmten Zeitpunkt, ohne zusätzlichen Speicherplatz für unveränderte Dateien zu verbrauchen.
|
||||
|
||||
## Installation mit pacman
|
||||
|
||||
```bash
|
||||
# Hauptpakete installieren
|
||||
sudo pacman -S snapper # Das eigentliche Snapper-Tool
|
||||
sudo pacman -S snap-pac # Automatische Snapshots bei pacman-Operationen
|
||||
sudo pacman -S snapper-gui-git # Grafische Benutzeroberfläche (optional)
|
||||
|
||||
# Optional: Für GRUB-Integration (Boot-Menü mit Snapshots)
|
||||
sudo pacman -S grub-btrfs # Zeigt Snapshots im GRUB-Boot-Menü an
|
||||
```
|
||||
|
||||
## Grundkonfiguration verstehen
|
||||
|
||||
### 1. Snapper-Konfiguration für Root erstellen
|
||||
|
||||
```bash
|
||||
# Falls bereits eine Konfiguration existiert, diese entfernen
|
||||
sudo umount /.snapshots 2>/dev/null || true
|
||||
sudo rm -rf /.snapshots
|
||||
|
||||
# Neue Snapper-Konfiguration für das Root-Dateisystem erstellen
|
||||
# Dies erstellt automatisch eine Konfigurationsdatei unter /etc/snapper/configs/root
|
||||
sudo snapper -c root create-config /
|
||||
|
||||
# Das automatisch erstellte .snapshots Verzeichnis ist ein normaler Ordner
|
||||
# Wir brauchen aber ein BTRFS-Subvolume für bessere Performance
|
||||
sudo btrfs subvolume delete /.snapshots
|
||||
sudo mkdir /.snapshots
|
||||
|
||||
# Subvolume in /etc/fstab eintragen (wird automatisch gemacht)
|
||||
sudo mount -a
|
||||
```
|
||||
|
||||
**Was passiert hier?**
|
||||
- `-c root` = Konfigurationsname "root"
|
||||
- `create-config /` = Erstelle Konfiguration für das Verzeichnis `/`
|
||||
- Ein BTRFS-Subvolume ist effizienter als ein normaler Ordner für Snapshots
|
||||
|
||||
### 2. Konfigurationsdatei im Detail
|
||||
|
||||
```bash
|
||||
sudo nano /etc/snapper/configs/root
|
||||
```
|
||||
|
||||
**Wichtige Parameter erklärt:**
|
||||
|
||||
```ini
|
||||
# SUBVOLUME: Das zu überwachende Verzeichnis
|
||||
SUBVOLUME="/"
|
||||
|
||||
# FSTYPE: Dateisystemtyp (muss btrfs sein)
|
||||
FSTYPE="btrfs"
|
||||
|
||||
# ALLOW_USERS/ALLOW_GROUPS: Welche Benutzer dürfen Snapshots verwalten?
|
||||
ALLOW_USERS="dein-benutzername"
|
||||
ALLOW_GROUPS="wheel"
|
||||
|
||||
# SYNC_ACL: Access Control Lists synchronisieren
|
||||
SYNC_ACL="no"
|
||||
|
||||
# === TIMELINE SNAPSHOTS (zeitbasierte automatische Snapshots) ===
|
||||
|
||||
# TIMELINE_CREATE: Sollen automatische zeitbasierte Snapshots erstellt werden?
|
||||
TIMELINE_CREATE="yes"
|
||||
|
||||
# TIMELINE_CLEANUP: Sollen alte Timeline-Snapshots automatisch gelöscht werden?
|
||||
TIMELINE_CLEANUP="yes"
|
||||
|
||||
# Wie viele Timeline-Snapshots sollen behalten werden?
|
||||
TIMELINE_MIN_AGE="1800" # Mindestens 30 Minuten alt bevor Löschung möglich
|
||||
TIMELINE_LIMIT_HOURLY="10" # Maximal 10 stündliche Snapshots
|
||||
TIMELINE_LIMIT_DAILY="10" # Maximal 10 tägliche Snapshots
|
||||
TIMELINE_LIMIT_WEEKLY="0" # Keine wöchentlichen Snapshots
|
||||
TIMELINE_LIMIT_MONTHLY="10" # Maximal 10 monatliche Snapshots
|
||||
TIMELINE_LIMIT_YEARLY="10" # Maximal 10 jährliche Snapshots
|
||||
|
||||
# === NUMBER CLEANUP (Bereinigung nach Anzahl) ===
|
||||
|
||||
# NUMBER_CLEANUP: Snapshots nach Anzahl begrenzen?
|
||||
NUMBER_CLEANUP="yes"
|
||||
|
||||
# NUMBER_MIN_AGE: Snapshots müssen mindestens so alt sein (Sekunden)
|
||||
NUMBER_MIN_AGE="1800" # 30 Minuten
|
||||
|
||||
# NUMBER_LIMIT: Maximale Gesamtanzahl an Snapshots
|
||||
NUMBER_LIMIT="50"
|
||||
|
||||
# NUMBER_LIMIT_IMPORTANT: Wichtige Snapshots (pre/post) getrennt begrenzen
|
||||
NUMBER_LIMIT_IMPORTANT="10"
|
||||
|
||||
# === EMPTY CLEANUP (leere Snapshots löschen) ===
|
||||
EMPTY_PRE_POST_CLEANUP="yes" # Leere Pre/Post-Snapshot-Paare löschen
|
||||
EMPTY_PRE_POST_MIN_AGE="1800"
|
||||
```
|
||||
|
||||
**Was bedeuten die verschiedenen Snapshot-Typen?**
|
||||
- **Timeline**: Automatisch nach Zeit erstellt (stündlich, täglich, etc.)
|
||||
- **Pre/Post**: Vor und nach Systemänderungen (z.B. Package-Updates)
|
||||
- **Single**: Einzelne manuelle Snapshots
|
||||
|
||||
## Ein- und Ausgeschlossene Verzeichnisse verstehen
|
||||
|
||||
### Automatisch eingeschlossene Verzeichnisse
|
||||
|
||||
Standardmäßig wird **alles unter `/` gesnappt**, außer:
|
||||
|
||||
```bash
|
||||
# Diese Verzeichnisse werden NIEMALS gesnappt (hardcoded in Snapper):
|
||||
/dev/* # Device-Dateien (virtuelle Dateien)
|
||||
/proc/* # Process-Informationen (virtuelle Dateien)
|
||||
/sys/* # System-Informationen (virtuelle Dateien)
|
||||
/tmp/* # Temporäre Dateien
|
||||
/run/* # Runtime-Daten
|
||||
/mnt/* # Mount-Punkte
|
||||
/media/* # Wechseldatenträger
|
||||
```
|
||||
|
||||
### Zusätzliche Ausschlüsse konfigurieren
|
||||
|
||||
**Option 1: Exclude-Patterns in der Hauptkonfiguration**
|
||||
|
||||
```bash
|
||||
sudo nano /etc/snapper/configs/root
|
||||
```
|
||||
|
||||
Füge hinzu:
|
||||
```ini
|
||||
# EXCLUDE_PATTERNS: Glob-Patterns für auszuschließende Dateien/Ordner
|
||||
EXCLUDE_PATTERNS="/var/cache/* /var/tmp/* /var/log/* /home/*/.cache/* /root/.cache/*"
|
||||
```
|
||||
|
||||
**Option 2: Separate Filter-Datei (empfohlen)**
|
||||
|
||||
```bash
|
||||
# Filter-Datei erstellen
|
||||
sudo mkdir -p /etc/snapper/filters
|
||||
sudo nano /etc/snapper/filters/root.txt
|
||||
```
|
||||
|
||||
Inhalt mit Erklärungen:
|
||||
```bash
|
||||
# Cache-Verzeichnisse (können jederzeit neu erstellt werden)
|
||||
/var/cache/*
|
||||
/home/*/.cache/*
|
||||
/root/.cache/*
|
||||
|
||||
# Temporäre Dateien
|
||||
/var/tmp/*
|
||||
/tmp/*
|
||||
|
||||
# Log-Dateien (werden laufend überschrieben, Snapshots wenig sinnvoll)
|
||||
/var/log/*
|
||||
|
||||
# Browser-Profile (sehr große, häufig ändernde Dateien)
|
||||
/home/*/.mozilla/firefox/*/Cache/*
|
||||
/home/*/.config/google-chrome/Default/Cache/*
|
||||
|
||||
# Papierkorb
|
||||
/home/*/.local/share/Trash/*
|
||||
|
||||
# Downloads (optional - je nach Bedarf)
|
||||
# /home/*/Downloads/*
|
||||
|
||||
# Virtuelle Maschinen (sehr groß)
|
||||
/home/*/.local/share/libvirt/*
|
||||
/var/lib/libvirt/*
|
||||
|
||||
# Docker-Daten (sehr groß und dynamisch)
|
||||
/var/lib/docker/*
|
||||
```
|
||||
|
||||
Dann in der Hauptkonfiguration referenzieren:
|
||||
```ini
|
||||
# In /etc/snapper/configs/root hinzufügen:
|
||||
EXCLUDE_FILE="/etc/snapper/filters/root.txt"
|
||||
```
|
||||
|
||||
### Warum diese Ausschlüsse?
|
||||
|
||||
- **Cache-Verzeichnisse**: Werden automatisch neu erstellt, verschwenden nur Platz
|
||||
- **Log-Dateien**: Ändern sich ständig, Snapshots helfen nicht bei der Fehlersuche
|
||||
- **Temporäre Dateien**: Per Definition temporär
|
||||
- **Browser-Caches**: Riesig und unwichtig für System-Recovery
|
||||
- **VM/Docker-Daten**: Sehr groß, haben eigene Backup-Strategien
|
||||
|
||||
## Manuelle Snapshots erstellen
|
||||
|
||||
### Einfache Snapshots
|
||||
|
||||
```bash
|
||||
# Einfacher Snapshot mit Beschreibung
|
||||
sudo snapper -c root create -d "Vor Firefox-Installation"
|
||||
|
||||
# Snapshot mit benutzerdefinierten Attributen
|
||||
sudo snapper -c root create -d "Backup vor Kernel-Update" -u "important=yes"
|
||||
```
|
||||
|
||||
### Pre/Post-Snapshot-Paare (empfohlen für größere Änderungen)
|
||||
|
||||
```bash
|
||||
# 1. PRE-Snapshot erstellen (vor der Änderung)
|
||||
sudo snapper -c root create -t pre -p -d "Vor großem System-Update"
|
||||
# Merke dir die Nummer! Z.B. "42"
|
||||
|
||||
# 2. Deine Systemänderungen durchführen
|
||||
sudo pacman -Syu
|
||||
|
||||
# 3. POST-Snapshot erstellen (nach der Änderung)
|
||||
sudo snapper -c root create -t post --pre-number 42 -d "Nach großem System-Update"
|
||||
```
|
||||
|
||||
**Warum Pre/Post-Paare?**
|
||||
- Snapper kann exakt die Unterschiede zwischen vorher/nachher zeigen
|
||||
- Einfacheres Rollback nur der Änderungen
|
||||
- Bessere Übersicht was sich geändert hat
|
||||
|
||||
### Snapshots verwalten
|
||||
|
||||
```bash
|
||||
# Alle Snapshots auflisten
|
||||
sudo snapper -c root list
|
||||
|
||||
# Detaillierte Ansicht mit Größe
|
||||
sudo snapper -c root list -t all
|
||||
|
||||
# Informationen zu einem bestimmten Snapshot
|
||||
sudo snapper -c root info 42
|
||||
|
||||
# Unterschiede zwischen zwei Snapshots anzeigen
|
||||
sudo snapper -c root status 40..45
|
||||
|
||||
# Geänderte Dateien zwischen Snapshots zeigen
|
||||
sudo snapper -c root diff 40..45
|
||||
```
|
||||
|
||||
## Automatisierung der Snapshot-Erstellung
|
||||
|
||||
### 1. Timeline-Snapshots (zeitbasiert)
|
||||
|
||||
```bash
|
||||
# Systemd-Timer für stündliche Timeline-Snapshots aktivieren
|
||||
sudo systemctl enable --now snapper-timeline.timer
|
||||
|
||||
# Timer für automatische Bereinigung alter Snapshots aktivieren
|
||||
sudo systemctl enable --now snapper-cleanup.timer
|
||||
|
||||
# Status der Timer prüfen
|
||||
systemctl status snapper-timeline.timer
|
||||
systemctl status snapper-cleanup.timer
|
||||
|
||||
# Nächste geplante Ausführung anzeigen
|
||||
systemctl list-timers | grep snapper
|
||||
```
|
||||
|
||||
**Was macht snapper-timeline.timer?**
|
||||
- Läuft stündlich
|
||||
- Erstellt automatisch Timeline-Snapshots basierend auf der Konfiguration
|
||||
- Berücksichtigt die TIMELINE_LIMIT-Einstellungen
|
||||
|
||||
**Was macht snapper-cleanup.timer?**
|
||||
- Läuft täglich
|
||||
- Löscht alte Snapshots basierend auf den Cleanup-Regeln
|
||||
- Verhindert, dass das System mit Snapshots volläuft
|
||||
|
||||
### 2. Automatische Snapshots bei Package-Updates
|
||||
|
||||
Das Paket `snap-pac` erstellt automatisch Pre/Post-Snapshots bei jeder pacman-Operation.
|
||||
|
||||
```bash
|
||||
# Konfiguration von snap-pac anpassen
|
||||
sudo nano /etc/snap-pac.ini
|
||||
```
|
||||
|
||||
```ini
|
||||
[DEFAULT]
|
||||
# Maximale Länge der Snapshot-Beschreibung
|
||||
desc_limit = 72
|
||||
|
||||
# Standard-Beschreibungen für automatische Snapshots
|
||||
pre_description = pacman pre snapshot
|
||||
post_description = pacman post snapshot
|
||||
|
||||
# Soll snap-pac auch bei AUR-Helper-Updates Snapshots erstellen?
|
||||
aur_helper = yay,paru,pikaur
|
||||
|
||||
[root]
|
||||
# Snapshots für das root-Subvolume aktivieren
|
||||
snapshot = yes
|
||||
|
||||
# Welche Cleanup-Strategie verwenden?
|
||||
cleanup = number
|
||||
|
||||
# Soll snap-pac auch bei normalen pacman-Operationen (nicht nur -S) Snapshots erstellen?
|
||||
important = yes
|
||||
```
|
||||
|
||||
**Was passiert jetzt?**
|
||||
- Bei jedem `sudo pacman -S paket` → automatisches Pre/Post-Snapshot-Paar
|
||||
- Bei `yay -S aur-paket` → ebenfalls Snapshots (wenn konfiguriert)
|
||||
- Bei `sudo pacman -R paket` → ebenfalls Snapshots
|
||||
|
||||
### 3. GRUB-Integration für Boot-Menü
|
||||
|
||||
```bash
|
||||
# GRUB-Btrfs-Daemon aktivieren (überwacht Snapshot-Änderungen)
|
||||
sudo systemctl enable --now grub-btrfsd
|
||||
|
||||
# Initramfs-Hook für Snapshot-Booting hinzufügen
|
||||
sudo nano /etc/mkinitcpio.conf
|
||||
```
|
||||
|
||||
In der HOOKS-Zeile hinzufügen:
|
||||
```bash
|
||||
HOOKS=(base udev autodetect modconf kms keyboard keymap consolefont block filesystems grub-btrfs-overlayfs fsck)
|
||||
```
|
||||
|
||||
```bash
|
||||
# Initramfs neu generieren
|
||||
sudo mkinitcpio -P
|
||||
|
||||
# GRUB-Konfiguration aktualisieren
|
||||
sudo grub-mkconfig -o /boot/grub/grub.cfg
|
||||
```
|
||||
|
||||
**Was bringt das?**
|
||||
- Im GRUB-Boot-Menü erscheint ein neuer Eintrag "Snapshots for GNU/Linux"
|
||||
- Du kannst direkt von einem Snapshot booten ohne das System zu ändern
|
||||
- Perfekt um zu testen, ob ein älterer Zustand das Problem löst
|
||||
|
||||
## Snapshots wiederherstellen
|
||||
|
||||
### 1. Einzelne Dateien wiederherstellen
|
||||
|
||||
```bash
|
||||
# Snapshot mounten (macht ihn als Verzeichnis verfügbar)
|
||||
sudo snapper -c root mount 42
|
||||
|
||||
# Jetzt ist der Snapshot verfügbar unter:
|
||||
# /.snapshots/42/snapshot/
|
||||
|
||||
# Beispiel: Konfigurationsdatei wiederherstellen
|
||||
sudo cp /.snapshots/42/snapshot/etc/fstab /etc/fstab
|
||||
|
||||
# Beispiel: Ganzes Verzeichnis wiederherstellen
|
||||
sudo cp -r /.snapshots/42/snapshot/etc/NetworkManager/ /etc/
|
||||
|
||||
# Snapshot wieder unmounten (Speicher freigeben)
|
||||
sudo snapper -c root umount 42
|
||||
```
|
||||
|
||||
### 2. Änderungen zwischen Snapshots rückgängig machen
|
||||
|
||||
```bash
|
||||
# Zeige was sich zwischen zwei Snapshots geändert hat
|
||||
sudo snapper -c root status 40..45
|
||||
|
||||
# Mache alle Änderungen zwischen den Snapshots rückgängig
|
||||
sudo snapper -c root undochange 40..45
|
||||
|
||||
# Alternativ: Rollback zu einem bestimmten Snapshot
|
||||
sudo snapper -c root rollback 42
|
||||
```
|
||||
|
||||
**Vorsicht bei undochange:**
|
||||
- Überschreibt aktuelle Dateien!
|
||||
- Erstelle vorher einen aktuellen Snapshot als Backup
|
||||
- Teste erst in einer nicht-kritischen Umgebung
|
||||
|
||||
### 3. Komplettes System-Rollback (für Experten)
|
||||
|
||||
```bash
|
||||
# ACHTUNG: Dies überschreibt dein aktuelles System!
|
||||
# Erstelle erst einen Snapshot des aktuellen Zustands
|
||||
sudo snapper -c root create -d "Vor Rollback - Notfall-Backup"
|
||||
|
||||
# Zeige verfügbare Snapshots
|
||||
sudo snapper -c root list
|
||||
|
||||
# Rollback zu Snapshot (z.B. Nummer 42)
|
||||
sudo btrfs subvolume snapshot /.snapshots/42/snapshot /
|
||||
```
|
||||
|
||||
### 4. Boot von Snapshot über GRUB
|
||||
|
||||
Wenn grub-btrfs installiert ist:
|
||||
|
||||
1. **Computer neu starten**
|
||||
2. **Im GRUB-Menü**: "Snapshots for GNU/Linux" wählen
|
||||
3. **Snapshot auswählen**: Den gewünschten Snapshot aus der Liste wählen
|
||||
4. **System startet** vom gewählten Snapshot (read-only)
|
||||
5. **Wenn alles funktioniert**: `sudo snapper rollback` um permanent zu wechseln
|
||||
|
||||
## Überwachung und Wartung
|
||||
|
||||
### Speicherplatz überwachen
|
||||
|
||||
```bash
|
||||
# BTRFS-Dateisystem-Nutzung anzeigen
|
||||
sudo btrfs filesystem usage /
|
||||
|
||||
# Größe aller Snapshots anzeigen
|
||||
sudo btrfs subvolume list / | grep snapshots
|
||||
|
||||
# Detaillierte Snapshot-Größen
|
||||
for snap in $(sudo snapper -c root list | tail -n +3 | awk '{print $1}'); do
|
||||
if [ "$snap" != "0" ]; then
|
||||
size=$(sudo btrfs subvolume show "/.snapshots/$snap/snapshot" 2>/dev/null | grep -E "^\s*Gen:" | wc -l)
|
||||
echo "Snapshot $snap: Exists"
|
||||
fi
|
||||
done
|
||||
```
|
||||
|
||||
### Automatische Bereinigung konfigurieren
|
||||
|
||||
```bash
|
||||
# Manuelle Bereinigung ausführen
|
||||
sudo snapper -c root cleanup number # Nach Anzahl-Regeln
|
||||
sudo snapper -c root cleanup timeline # Nach Zeit-Regeln
|
||||
|
||||
# Bereinigung-Logs anzeigen
|
||||
journalctl -u snapper-cleanup.service
|
||||
```
|
||||
|
||||
## Fehlerbehandlung und Tipps
|
||||
|
||||
### Häufige Probleme
|
||||
|
||||
**Problem**: `/.snapshots` ist ein normaler Ordner, kein Subvolume
|
||||
```bash
|
||||
# Lösung:
|
||||
sudo umount /.snapshots
|
||||
sudo rm -rf /.snapshots
|
||||
sudo btrfs subvolume create /.snapshots
|
||||
sudo systemctl restart snapper-timeline.timer
|
||||
```
|
||||
|
||||
**Problem**: Snapshots verbrauchen zu viel Speicher
|
||||
```bash
|
||||
# Lösung: Bereinigungsregeln anpassen
|
||||
sudo nano /etc/snapper/configs/root
|
||||
# NUMBER_LIMIT reduzieren (z.B. auf 20)
|
||||
# Mehr Ausschlüsse hinzufügen
|
||||
```
|
||||
|
||||
**Problem**: Automatische Snapshots funktionieren nicht
|
||||
```bash
|
||||
# Debugging:
|
||||
systemctl status snapper-timeline.timer
|
||||
journalctl -u snapper-timeline.service
|
||||
sudo snapper -c root create -d "Test" # Manuell testen
|
||||
```
|
||||
|
||||
### Best Practices
|
||||
|
||||
1. **Vor großen Änderungen**: Immer manuelles Pre/Post-Snapshot-Paar
|
||||
2. **Regelmäßige Kontrolle**: `sudo snapper list` alle paar Tage prüfen
|
||||
3. **Speicherplatz überwachen**: Bei >80% Festplattenbelegung Snapshots reduzieren
|
||||
4. **Test-Rollbacks**: Erst in VM oder Testsystem ausprobieren
|
||||
5. **Backup-Strategie**: Snapper ersetzt keine externe Datensicherung!
|
||||
6. **Wichtige Daten**: Separat in `/home` mit eigenem Snapshot-Schema verwalten
|
||||
|
||||
### Erweiterte Konfiguration für /home
|
||||
|
||||
```bash
|
||||
# Separate Snapshot-Konfiguration für Home-Verzeichnis
|
||||
sudo snapper -c home create-config /home
|
||||
|
||||
# Andere Bereinigungsregeln für /home (mehr Snapshots, da wichtiger)
|
||||
sudo nano /etc/snapper/configs/home
|
||||
```
|
||||
|
||||
Diese detaillierte Anleitung sollte dir ein vollständiges Verständnis von Snapper und dessen Konfiguration geben!
|
||||
Reference in New Issue
Block a user