Linux-use

Aus Store2 Wiki
Zur Navigation springen Zur Suche springen

NVMe-Backup System

System-Übersicht

Server: STORE2 (Debian 13)

Zweck: Tägliche vollständige OS-Level Disaster Recovery Backups

Backup-Methode: rsync mit Hard Link Deduplication und --one-file-system

Backup-Größe: 130GB pro Generation (apparent), ~37GB real durch Hard Links

Retention: 21 Tage (daily.0 bis daily.20)

Hardware-Konfiguration

Quelle: NVMe System-Laufwerk (/)

Ziel: /mnt/nvme_backup - 1TB HDD (/dev/sdar1, ext4, Label: NVME_BACKUP)

Kapazität: 21 Backup-Generationen bei ~85% HDD-Auslastung (777GB geschätzt)

Funktionsweise der Deduplication

  • Erste Generation (daily.0): Vollständiges Backup (~130GB apparent)
  • Folge-Generationen: Nur geänderte/neue Dateien verbrauchen Speicherplatz
  • Unveränderte Dateien: Hard Links zur vorherigen Generation (0 Byte zusätzlich)
  • Gemessene Effizienz: 98-99% aller Dateien sind Hard-Linked zwischen Generationen

Realistische Speichernutzung (gemessen)

daily.0: 130G apparent / 7.4GB real   (neueste Generation)
daily.1: 126G apparent / 85.5GB real  (1 Tag alt)  
daily.2: 126G apparent / 4.1GB real   (2 Tage alt)
daily.3: 125G apparent / 5.9GB real   (2 Tage alt)

Durchschnitt: ~37GB real pro Generation
4 Generationen: 147GB total (statt 520GB bei Vollbackups)

Das System ist pseudo-inkrementell:

  • Jede Generation erscheint als vollständiges Filesystem (130GB)
  • Tatsächlicher Speicherverbrauch nur für Änderungen
  • Wiederherstellung jeder Generation als komplettes System möglich
  • Keine Abhängigkeiten zwischen Generationen (jede ist vollständig)

Software-Komponenten

SystemD Services

  • Service: nvme-backup.service - OneShot-Service für Backup-Ausführung
  • Timer: nvme-backup.timer - Tägliche Ausführung um 03:08 Uhr
  • Mail-Service: nvme-backup-mail@.service - Statistische Erfolgs-/Fehlermeldungen

Scripts und Konfiguration

  • Backup-Script: /usr/local/sbin/nvme-backup (KEEP=21)
  • Mail-Script: /usr/local/sbin/nvme-backup-mailer (erweiterte Statistiken)
  • Exclude-Liste: Im Script hardcodiert

Backup-Strategie und Exclude-Konfiguration

rsync-Parameter (finale Konfiguration)

bash

rsync -aAXH --delete --numeric-ids --info=progress2 --one-file-system

Kritische Parameter:

  • -H: Preserviert Hard Links zwischen Generationen
  • --one-file-system: Bleibt auf Root-Filesystem, ignoriert RAID-Mounts
  • --link-dest=daily.1: Erstellt Hard Links zu unveränderten Dateien

Exclude-Liste

bash

RSYNC_EXCLUDES=(
  --exclude="$DST/*"           # Backup-Ziel selbst ausschließen
  --exclude="/proc/"           # Kernel-Prozess-Dateisystem  
  --exclude="/sys/"            # Kernel-System-Dateisystem
  --exclude="/dev/"            # Device-Dateien
  --exclude="/run/"            # Runtime-Daten
  --exclude="/tmp/"            # Temporäre Dateien
  --exclude="/data/"           # RAID-Mount md125 (XFS, 52TB)
  --exclude="/data2/"          # RAID-Mount md126 (EXT4, 61TB)
  --exclude="/lost+found"      # Dateisystem-Recovery
)

Backup-Inhalt (vollständig eingeschlossen)

  • System: /usr (21GB), /etc (399MB), /boot (417MB)
  • Services: /var (42GB) - Docker-Container, Emby-Metadaten, Systemlogs
  • Daten: /home (10.5GB), /srv (9.5GB), /opt (1.5GB)
  • Konfiguration: /root (20GB) - Admin-Scripts und Konfigurationen

Mail-Benachrichtigungen (erweiterte Statistiken)

SMTP-Konfiguration

  • Provider: GMX (mail.gmx.net:587, TLS)
  • Absender: dergagi@gmx.de
  • Empfänger: daniel.gareis@gmail.com
  • Authentifizierung: /etc/msmtprc (chmod 600)

Mail-Inhalt (Erfolgs-Mails)

  • Backup-Statistiken: Größe (apparent/real), übertragene Datenmenge
  • Speicherplatz-Metriken: Belegt/verfügbar/Prozent der 1TB HDD
  • Retention-Info: Anzahl vorhandener Generationen, geschätzte weitere Kapazität
  • System-Status: Nächster Backup-Termin, RAID-Array-Status
  • Performance-Daten: Log-Größe, Backup-Dauer-Schätzung

Wartung und Troubleshooting

Service-Kontrolle

bash

systemctl status nvme-backup.service
systemctl list-timers nvme-backup.timer
journalctl -u nvme-backup.service --no-pager

bash

# Apparent vs Real Size Vergleich
du -sh /mnt/nvme_backup/daily.*
du -sh --apparent-size /mnt/nvme_backup/daily.*

# Hard Link Statistiken
find /mnt/nvme_backup/daily.0 -type f -links +1 | wc -l

Manueller Backup-Test

bash

systemctl start nvme-backup.service
tail -f /mnt/nvme_backup/_logs/run-$(date +%Y-%m-%d)_*.log

Kritische Konfigurationsdetails

--one-file-system Parameter

Essentiell für korrekten Betrieb. Verhindert rsync-Traversierung der gemounteten RAID-Arrays (/data auf md125, /data2 auf md126). Ohne diesen Parameter würden die 113TB RAID-Daten trotz Exclude-Liste vollständig gebackupt werden.

  • daily.0: Neuestes Vollbackup
  • daily.1-20: Hard Link Generationen (nur Änderungen verbrauchen Speicher)
  • Rotation: Automatisch durch Script, daily.20 wird zu daily.21, dann gelöscht
  • Erste Löschung: Erfolgt erst nach 21 vollständigen Backup-Zyklen

Performance-Charakteristika

  • Erstes Backup: ~130GB in 1,5 Stunden (Vollübertragung)
  • Folge-Backups: ~5-40GB in 15-60 Minuten (nur Änderungen)
  • CPU-Verbrauch: ~12 Minuten CPU-Zeit pro Backup
  • Memory Peak: ~5GB während Backup
  • Hard Link Effizienz: 98-99% Dateien verlinkt zwischen Generationen
  • Durchschnittlicher Speicherverbrauch: 37GB real pro Generation

Kapazitäts-Management

Speicherplatz-Überwachung

  • Aktuelle Nutzung: 147GB für 4 Generationen
  • Projektion 21 Tage: ~777GB (85% der 916GB HDD)
  • Sicherheitspuffer: ~140GB für Variabilität der täglichen Änderungen
  • Überwachung: Automatisch via Mail-Statistiken nach jedem Backup

Notfall-Maßnahmen bei Speicherknappheit

bash

# Retention temporär reduzieren
sed -i 's/KEEP=21/KEEP=18/' /usr/local/sbin/nvme-backup

# Oder auf Original zurücksetzen
cp /usr/local/sbin/nvme-backup.backup-7days /usr/local/sbin/nvme-backup

Integration in Gesamtsystem

Drei-Schicht-Backup-Architektur

  1. RAID6-Arrays: Live-Redundanz für Nutzdaten (/data, /data2)
  2. NVMe-Backup: OS-Recovery mit vollständiger Service-Konfiguration (21 Tage Historie)
  3. Mail-Monitoring: Automatische Überwachung mit detaillierten Statistiken

Optimierte Ressourcen-Aufteilung

  • RAID-Schutz: 113TB Nutzdaten mit Hardware-Redundanz
  • NVMe-Backup: 130GB System-Recovery mit 3-Wochen-Historie
  • Hard Link Effizienz: 777GB für 21 Vollbackups (statt 2.7TB ohne Deduplication)

Das System bietet maximale Wiederherstellbarkeit aller Services mit optimaler Speichernutzung durch Hard Link Technologie, intelligente Filesystem-Trennung und erweiterte 21-Tage-Retention für umfassende Disaster Recovery-Szenarien.

HDD als NTFS unter Linux richtig formatieren

Szenario: Raid-Platte geht noch, liefert aber sporadische Fehler in dmesg z.B. -> wird im Raid ersetzt -> ist dann "über" -> kann als Serien-Sammelplatte noch verwendet werden

Damit die Platte auch unter Windows richtig erkannt wird ist folgendes zu beachten:

Partitionstyp muss auf 0x07 (HPFS/NTFS/exFAT) stehen!

Partitionieren mit gdisk

sudo gdisk /dev/sdX
  • erst alte Linux Raid Partiton löschen: d -> 1 -> w
  • n → Neue Partition anlegen (Eingaben bestätigen oder (falls gewünscht) Start- und Endsektor anpassen)
  • 0700 als Typ für NTFS setzen (wird ggf. vorgeschlagen, sonst nachfragen)
  • w → Schreiben und gdisk verlassen

Formatieren mit mkfs.ntfs

sudo mkfs.ntfs -f /dev/sdX1

Mounten mit

sudo mkdir -p /mnt/ntfs
sudo mount -t ntfs-3g /dev/sdX1 /mnt/ntfs

Booten überhaupt !!!

Bios 12 ist OK. Kerne laufen beide auf 2.5Ghz.

Beide Karten sind OK und müssen auch beim Booten drin sein

Wenn die Laufwerke vom 4-Ch Sata-Controller ab sind, wir auch gebootet.

Dann können sie Hot-Geplugged werden -> geht :-)

Jetzt testen dass auch alle 27 (!) Laufwerke da sind.

/root/bin/diskserial_sort.sh 

Dann weiter wie im Raidabschnitt beschrieben

mdadm --assemble --scan

Raid-Karten Kernel-Treiber nach Kernelupdate

cd /Nach_Kernelupdate/rr2340-linux-src-v1.7/product/rr2340/linux/ 
make clean
make
make install

Manuelles starten (nach Reboot automatisch)

modprobe rr2340

Grub und Root-Festplatte

in /boot/grub/menu.lst z.B.

kernel /boot/vmlinuz-2.6.31.14-0.6-desktop root=UUID=d06e4d6a-44d7-4f09-9ea3-a4cb8f120770 ...

UUID einer Festplatte herausfinden

blkid /dev/sdq8

Screen-Umgebung

http://linuxwiki.de/screen

Liste aller Screens

screen -ls

Starten

screen -S NAME

Detach

Strg-a d = detach

Reatach

screen -r NAME

ODER Wieder reingehen

screen -x NAME 

Screens beenden

im Screen Strg-a k (wie kill)

Arch Linux AUR Pakete

- tarball herunterladen
- nach /builds entpacken (tar -xzf xxxx.tar.gz)
- dort makepkg
- pacman -U xxxx.pkg.tar.xz

RAR unter Linux

RAR-Archiv testen

rar t xxxxx.rar 

Wake-On-Lan

Netzwerkkarte in System->Gerätemanager erlauben und Magic Paket einstellen im Bios PCI aufwecken erlauben Mac-Adresse und Netzwerk-IP wissen

Uni

Linux-Konsolen-Befehl zum Aufwecken auf Uni-Rechner Big-Blue2 aus "Hibernate":

wol -i 132.187.33.255 90:e6:ba:43:c2:dc 

Busfahrer an Uni:

wol -i 132.187.33.255 b8:ac:6f:67:e6:43 

Brücknerstrasse

Aufwecken aus "Standby"

(Bachus)

wol -i 255.255.255.255 00:1e:8c:46:10:8c 

(Myth intern)

wol -i 255.255.255.255 00:14:85:e8:10:4c

Myth PCIe

wol -i 255.255.255.255 00:e0:45:49:00:09

Tool um Windows um Remote-Verbindung schlafen zu legen PowerOff z.B. bei

http://www.chip.de/downloads/Poweroff_21571048.html

Linuxbefehl für OpenSuse um per Konsole zu suspenden:

pm-suspend 

-> Vorsicht: Festplatten verhalten sich komisch

"HDIO_DRIVE_CMD(identify) failed: Invalid exchange" 

bei

 /root/bin/diskserial_sort.sh 

Aufwecken über Fritzbox direkt problemlos möglich.

Remote-Desktop

Big-Blue: SSH auf wolf.physik.uni-wuerzburg.de mit Tunnel: 33889 auf Ziel 132.187.33.133:3389 Dann localhost:33889

Myth: dergagi.dyndns.org normal (ohne Angabe gilt Port 3389)

Bachus: dergagi.dyndns.org:33890

Ordnergröße in Konsole anzeigen

du -sh /home

Für Platzstatus auf Partitionen

df -h

DU-Meter für SuSE/Linux

KTrafficAnalyzer, z.B. über 1-Klick Installation bei http://software.opensuse.org/search

NTM http://netramon.sourceforge.net/eng/index.html

Bandwidth-Monitor für Console, z.B. auch Ubuntu

bwm-ng
bmon

Netzwerk-Geschwindkeit testen

Tool: iperf gibts für Linux, Windows, Mac Server (empfängt Testdaten)

iperf -s

Client (sendet Daten)

iperf -c 192.168.1.60  (Myth)
ipfer -c 192.168.1.66  (Store)

Manuel RPM Pakete installieren

rpm -ihv nedit-5.5-31.8.x86_64.rpm

Locate auf Data/Data2

locate -i -d /data/locatedb "mein suchbegriff"

USB-Device mounten

mount -t ntfs-3g /dev/sdj5 /usb -o force

NTFS Linux

mount -t ntfs-3g /dev/sds1 /mo1

Opensuse: IP über DHCP erneuern

  1.  Open a terminal and su - to root.
  2. Type ifconfig to show the current IP address that you received from DHCP.
  3. Type dhcpcd -k to send the appropriate signals to dhcpcd.
  4. Now bring the interface back up by typing ifup eth0.
  5. Type ifconfig to show the new IP address.

System-Backup-Image von USB-Platte mounten

mount -o loop /media/Data5/store_root.img /mnt/loop/

Verzeichnisse synchronisieren

mit grsync

Devices neu einlesen im laufenden Betrieb ohne Reboot

blockdev --rereadpt /dev/sdx

Laufwerke am RocketRaid neu einlesen im laufenden Betrieb ohne Reboot

Kernelmodul da?

lsmod rr2340

Kernelmodul entfernen/löschen

rmmod rr2340

Kernelmodul wieder laden/starten

modprobe rr2340

KDE Remote Desktop

krdc -> Client

TightVNC -> Client

krfb -> Server (über Konsole z.B. mit Xming starten, wegen Grafik)

Port Forwarding im Router: Kontrolle unter: vi home/root/kde4/share/config/krfbrc

JDownloader

Installieren über Script von Homepage

  1. wget must be installed on system!
  2. Download jd.sh
  http://212.117.163.148/jd.sh
  3. chmod +x jd.sh
  4. start jd.sh -> ./jd.sh

Note: Open jd.sh to read Manual or change Settings!

Starten nach Installation:

java -jar /home/gagi/.jd/JDownloader.jar

One-Click Install auf Konsole

OCICLI <YMP URL>

Cronjobs

Liste

crontab -l

Einträge ändern

crontab -e

dort dann im vi editieren

Data Scrubbing, automatische Suche einmal im Monat nach BadBlocks

In short: Especially if you run a RAID5 array, trigger an active bad block check on a regular basis, or there is a high chance of hidden bad blocks making your RAID unusable during reconstruction.

Normally, RAID passively detects bad blocks. If a read error occurs, the data is reconstructed from the rest of the array, and the bad block is rewritten. If the block can not be rewritten, the defective disk is kicked out of the active array.

Once the defective drive is replaced, reconstruction will cause all blocks of the remaining drives to be read. If this process runs across a previously undetected bad block on the remaining drives, another drive will be marked as failed, making RAID5 unusable. The larger the disks, the higher the odds that passive bad block detection will be inadaquate. Therefore, with today's large disks it is important to actively perform data scrubbing on your array.

With a modern (>=2.6.16) kernel, this command will initiate a data consistency and bad block check, reading all blocks, checking them for consistency, and attempting to rewrite inconsistent blocks and bad blocks.

echo check >> /sys/block/md127/md/sync_action
echo check >> /sys/block/md125/md/sync_action

You can monitor the progress of the check with:

watch -n .1 cat /proc/mdstat

You should have your array checked daily or weekly by adding the appropriate command to /etc/crontab.

Steht für jeden 8. des Monats in Crontab.

If you find yourself needlessly checking your array (like I was) and want to stop it safely, you can either stop the entire array, or:

echo idle >> /sys/block/md127/md/sync_action
echo idle >> /sys/block/md125/md/sync_action

TigerVNC

Start Server

vncserver :1 
vncserver :2 

Kill Server

vncserver -kill :1 

Port 5901

dergagi.selfhost.bz:5901 
dergagi.selfhost.bz:5902 

Auflösung ändern:

im VNC-Fenster (also schon remote)

xrandr -s 1920x1200

XTerm Benutzer wechseln:

su gagi

Autostart

in /etc/rc.local

su gagi -c "vncserver -geometry 1920x1080 -alwaysshared -localhost -dpi 96 :1"

RSYNC volles Systembackup

rsync -aAXv --exclude={"/dev/*","/proc/*","/sys/*","/tmp/*","/run/*","/mnt/*","/media/*","/lost+found","/data","/data2","/suse","/rsync-backup"} / /rsync-backup/