Backup-SW die auf mehrere HDDs aufteilen kann

Snooty

Commodore
Registriert
Dez. 2012
Beiträge
4.630
Hio,

Ich suche eine Backup-Software, die ein Backup auf mehrere HDDs verteilt, falls der Platz zu klein wird.

Bisher habe ich es so gemacht, dass ich manuell alle Ordner A-G auf HDD1 kopiere, Ordner H-N auf HDD2 und den Rest O-Z auf HDD3.

Das Problem dabei ist, dass ich selbst immer gucken muss, in welchen Ordnern etwas Neues hinzugekommen ist und dann dafür sorgen muss, dass beim Synchronisieren nur die Ordner A-G kopiert werden.

Mir ist die Aufteilung auf diese Ordnergruppen nicht wichtig - so hab ich halt in etwa gleich große Datenmengen geschaffen und hatte mehr oder weniger immer genug Platz für neue Daten auf jeder Platte.

Ich hätte einfach gerne eine Software, die eine Platte erstmal vollschreibt, und dann die weiteren Daten auf eine neue Platte schreibt. Wenn irgendwann dann mal ein neuer A-Ordner hinzukommt, soll der einfach auf die zweite HDD kopiert werden. Die Backup-SW müsste also auch speichern, welche Daten schon gesichert sind, und welche die aktuelle Backup-HDD ist.

Gibt's da was? Kann auch was kosten.
 
Klingt ein wenig nach inkrementellem Backup. Aber du machst mir da zu viel manuell. Eventuell mal den Vorgang überdenken und auf einen größeren Datenträger umsteigen. Von welcher Datenmenge reden wir hier?
 
  • Gefällt mir
Reaktionen: Wilhelm14
Bei Mediendateien könnte man das doch ganz einfach eine Batchdatei mit robocopy machen:

robocopy c:\OrdnerA HDD1:\OrdnerA /MIR
...
robocopy c:\OrdnerH HDD2:\OrdnerH /MIR
...

Da musste jedenfalls nichts selber schauen.

Inkrementelle Backup Tools gehen sicher auch sind aber nicht so schön simpel.
 
  • Gefällt mir
Reaktionen: Geier01de
mit restic kann man das sicher bauen
mehrere listen mit Objekten die ins backup sollen anlegen und dann je nachdem welche platte angeschlossen ist, das was in der liste steht dorthin schreiben lassen.

Sonst kann bacula das ziemlich sicher, dass habe ich jedoch nur vor einiger Zeit fuer Tapedrives genutzt
 
Ich habe mir mal mit Hilfe von ChatGPT für ein solches Szenario Scripte geschrieben.
Situation:
  • Ein Ordner wird auf verschiedene Festplatten verteilt gesichert, die Backups also verteilt
  • Der Ordner selbst enthält nur Unterordner
  • Es wird erwartet, dass die Unterordner alphabetisch geordnet auf die einzelnen Festplatten kopiert werden, d.h. keine Lücken haben, also wenn die Unterordner A-Z heißen würden, und auf Festplatte 2 liegen D, E, G, und H, würden die Scripte erwarten, dass Ordner F ebenfalls auch diesem Datenträger liegt, die alphabetisch erste und letzte Ordner legen die "Grenzen" fest
  • Ich muss selbst Sorge tragen, dass ich die Grenzen vernünftig wähle, die Scripte erkennen weder eine Überschneidung dieser noch dass ich vielleicht auf Datenträger 1 A-C und auf Datenträger 2 E-H habe, aber D gar nicht sichere
  • Wenn später ein neuer Ordner "vorne" hinzukommt, muss ich womöglich im Backup Folge-Ordner verschieben
  • Die Prüfung auf "Gleichheit" basiert nur auf Name und Dateigröße, nicht auf Änderungsdatum. Wenn es z.B. reine Text-Dateien sind und dort nur ein Buchstabe geändert wird, wird es nicht als Änderung erkannt
  • Es sind in Batch verpackte PowerShell-Scripte, der Pfad der zu sichernden Daten ist fest im Script, das Laufwerk mit den Backups wird als Parameter übergeben
  • Ich kopiere Sachen mit TeraCopy und nicht dem Explorer, weil der Explorer nicht berücksichtigt, dass das Ziel bereits fast alle Dateien enthält und denkt, der Platz würde nicht reichen

Suche nach fehlenden Dateien im Backup:
Code:
@echo off
%windir%\System32\more +12 "%~f0" > "%temp%\%~n0.ps1"
where /q pwsh.exe
if errorlevel 1 (
    set POWERSHELL_EXE=powershell.exe
) else (
    set POWERSHELL_EXE=pwsh.exe
)
%POWERSHELL_EXE% -NoProfile -ExecutionPolicy Bypass -File "%temp%\%~n0.ps1" %*
exit /b
*** Ab hier PowerShell ***
# Voraussetzung: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
param(
    [string]$FolderPath = (Get-Location).Path # Standardmäßig aktueller Ordner
)
# Verzeichnisse anpassen
$current = "D:\MeinWichtigerOrdner"
$backup = $FolderPath

Write-Host "Pfad:        $current"
Write-Host "Backup-Pfad: $backup"

# Hilfsfunktion: Bindestriche entfernen und Kleinbuchstaben für Vergleich
function Normalize-Name($name) {
    return ($name -replace '-', '').ToLower()
}
# Backup-Ordner einlesen und sortieren (für Grenzen)
$backupFolders = Get-ChildItem -Path $backup -Directory |
    Sort-Object -Property @{Expression={ ($_.Name -replace '-', '').ToLower() }}
$firstFolder = $backupFolders[0].Name
$lastFolder  = $backupFolders[-1].Name
# Grenzen einmal normalisieren für Vergleich
$normFirstFolder = Normalize-Name($firstFolder)
$normLastFolder  = Normalize-Name($lastFolder)
Write-Host "Alphabetisch erster relevanter Ordner: $firstFolder"
Write-Host "Alphabetisch letzter relevanter Ordner: $lastFolder"
Write-Host ""
# Relevante Ordner aus aktuellem Bestand filtern
$relevantCurrentFolders = Get-ChildItem -Path $current -Directory | Where-Object {
    $normName = Normalize-Name($_.Name)
    ($normName -ge $normFirstFolder) -and ($normName -le $normLastFolder)
} | Sort-Object Name  # Sortierung normal, Bindestriche bleiben für Anzeige
Write-Host "Relevante Ordner im Bestand: $($relevantCurrentFolders.Count)"
Write-Host ""
# Aktuelle Dateien aus relevanten Ordnern einlesen
$currentFiles = $relevantCurrentFolders | ForEach-Object {
    Get-ChildItem -Path $_.FullName -Recurse -File
}
# Backup-Dateien indexieren nach relativem Pfad
$backupFiles = Get-ChildItem -Path $backup -Recurse -File
$backupByPath = @{}
foreach ($file in $backupFiles) {
    $relPath = $file.FullName.Substring($backup.Length).TrimStart('\')
    $backupByPath[$relPath] = $file.Length
}
# Vergleich: fehlende oder geänderte Dateien
$missingOrChanged = foreach ($file in $currentFiles) {
    $relPath = $file.FullName.Substring($current.Length).TrimStart('\')
    if ($backupByPath.ContainsKey($relPath)) {
        if ($backupByPath[$relPath] -ne $file.Length) {
            [PSCustomObject]@{
                Status   = "Geändert"
                Name     = $file.Name
                Size     = $file.Length
                FullName = $file.FullName
            }
        }
    } else {
        [PSCustomObject]@{
            Status   = "Fehlt"
            Name     = $file.Name
            Size     = $file.Length
            FullName = $file.FullName
        }
    }
}
Write-Host "Dateien im Bestand, die im Backup fehlen oder anders sind: $($missingOrChanged.Count)"
Write-Host ""
# Ausgabe
$missingOrChanged | Out-GridView -Title "Fehlende / geänderte Dateien im Backup"
# Optional als CSV
# $missingOrChanged | Export-Csv -Path "D:\fehlende_backup_dateien.csv" -NoTypeInformation -Encoding UTF8

Erkennen von Dateien, die im Backup enthalten sind aber in meinem Ordner fehlen:
Code:
@echo off
%windir%\System32\more +12 "%~f0" > "%temp%\%~n0.ps1"
where /q pwsh.exe
if errorlevel 1 (
    set POWERSHELL_EXE=powershell.exe
) else (
    set POWERSHELL_EXE=pwsh.exe
)
%POWERSHELL_EXE% -NoProfile -ExecutionPolicy Bypass -File "%temp%\%~n0.ps1" %*
exit /b
*** Ab hier PowerShell ***
# Voraussetzung: Set-ExecutionPolicy -ExecutionPolicy RemoteSigned
param(
    [string]$FolderPath = (Get-Location).Path # Standardmäßig aktueller Ordner
)
# Verzeichnisse anpassen
$current = "D:\MeinWichtigerOrdner"
$backup = $FolderPath
Write-Host "Pfad:        $current"
Write-Host "Backup-Pfad: $backup"
Write-Host ""
# Aktuelle Dateien einlesen (gruppiert nach Name)
$currentFiles = Get-ChildItem -Path $current -Recurse -File |
    Group-Object -Property Name
# Backup-Dateien einlesen
$backupFiles = Get-ChildItem -Path $backup -Recurse -File
Write-Host "Gefundene Dateien im Backup:  $($backupFiles.Count)"
Write-Host "Gefundene Dateien im Bestand: $((Get-ChildItem -Path $current -Recurse -File).Count)"
Write-Host ""
$results = @()
foreach ($file in $backupFiles) {
    $matches = $currentFiles | Where-Object { $_.Name -eq $file.Name }
    if (-not $matches) {
        # Datei fehlt komplett im Bestand
        $results += [PSCustomObject]@{
            Kategorie   = "Nur im Backup"
            Name        = $file.Name
            BackupSize  = $file.Length
            BestandSize = $null
            BackupPath  = $file.FullName
            BestandPath = $null
        }
    }
    else {
        # Prüfen ob eine Datei mit gleicher Größe existiert
        $sameSize = $matches.Group | Where-Object { $_.Length -eq $file.Length }
        if (-not $sameSize) {
            $results += [PSCustomObject]@{
                Kategorie   = "Geändert"
                Name        = $file.Name
                BackupSize  = $file.Length
                BestandSize = ($matches.Group | Select-Object -First 1).Length
                BackupPath  = $file.FullName
                BestandPath = ($matches.Group | Select-Object -First 1).FullName
            }
        }
    }
}
Write-Host "Dateien nur im Backup:  $($results | Where-Object Kategorie -eq 'Nur im Backup' | Measure-Object | Select-Object -Expand Count)"
Write-Host "Dateien geändert:       $($results | Where-Object Kategorie -eq 'Geändert'     | Measure-Object | Select-Object -Expand Count)"
Write-Host ""
# Ergebnisse in EINEM GridView
$results | Out-GridView -Title "Backup-Vergleich (Nur im Backup / Geändert)"
# oder alternativ:
# $results | Export-Csv -Path "D:\backup_vergleich.csv" -NoTypeInformation -Encoding UTF8
 
Zuletzt bearbeitet:
Hi,
das kann auch ein Freeware-Tool wie freefilesync prima lösen, ich komme damit gut zurecht.

Es lassen sich einfache Batch-Dateien damit erstellen und das Ganze auch automatiseren, z.B. regelmäßig zu festen Zeiten oder zum Systemstart usw.

Die Synchronisierungseinstellungen sind auch flexibel, es kann so eingerichtet werden, dass immer nur die gänderten/neuen Dateien synchronisiert werden.

Du müstest z.B. nur festlegen, dass deine Ordner A-G da hin kommen, die nächsten dort hin und die letzten hier hin, Batchdatei einrichten (geht einfach damit), die Einstellungen für die Automatisierung machen und gut ist. Schaus dir einfach mal an.

Grüße!
 
Stefan71 schrieb:
freefilesync ... Die Synchronisierungseinstellungen sind auch flexibel, es kann so eingerichtet werden, dass immer nur die gänderten/neuen Dateien synchronisiert werden.
Das Tool nutze ich tatsächlich, aber da muss ich ja auch die Filter immer entsprechend anpassen, dass bspw nur Ordner A-G synchronisiert werden (wenn man mal vergisst, das anzupassen, dann kopiert man eben mal die falschen Daten).

Und ich muss auch selbst "wissen", welche Ordner neue Dateien enthalten. Denn sonst muss ich bei jedem Backup immer alle Festplatten durchtesten.

Und genau die beiden Schritte will ich nicht mehr händisch machen müssen.

cartridge_case schrieb:
Klingt ein wenig nach inkrementellem Backup.
Bräuchte es bloß eine Software, die das auf mehrere HDDs aufteilen kann.
Luftgucker schrieb:
Da musste jedenfalls nichts selber schauen.
Doch - ich muss auch "wissen", in welcher Ordnergruppe es neue Daten gibt, sonst muss ich auch jedes Mal alle HDDs durchtesten.

cartridge_case schrieb:
Von welcher Datenmenge reden wir hier?
Zig TB.
 
@Snooty
Ich würde an deiner Stelle versuchen deinen jetzigen Vorgang zu automatisieren. So verkehrt ist der ja gar nicht, wenn man beachtet, was alles sonst schief gehen könnte. z.B. was passiert oder soll gemacht werden, wenn in Ordner A neue Dateien dazu kommen, diese aber nicht mehr auf die Festplatte passen, auf der Ordner A ist?!
Automatisieren ähnlich Tollertyp und mittels ChatGPT oder Gemini oder oder ein Skript schreiben lassen. Ich hatte gerade eins, dass schon sehr robust aussah und mit Sonderfällen zurecht kommen würde. Wie "Festplatte 2 zum Sichern ist nicht vorhanden"... Wichtig ist, die (externen) Festplatten korrekt zu identifizieren (Buchstaben können sich ändern), intelligent zu kopieren (z.B. mit robocopy von Windows ähnlich rsync von Linux), eine Konfiguration zu schreiben.
Am Ende führst du nur das Skript aus und es arbeitet automatisch und vor allem effizient! Es wird nichts kopiert, was schon vorhanden ist.
 
Ja, gibt’s. Am besten geeignet für dein Szenario:

Syncovery → kann Daten automatisch auf mehrere HDDs verteilen, merkt sich, was schon gesichert ist, und schreibt neue Dateien einfach auf die nächste Platte. Läuft perfekt für solche „Backup über mehrere Festplatten“-Setups.

Alternativen: BorgBackup (technischer) oder UrBackup (Speicherpool).
 
Die vorhandenen Daten ändern sich nicht oder nur sehr selten; aber ich kann mir nicht merken, bei welchem Buchstaben neue Ordner hinzugekommen sind - also muss ich beim bisherigen Konzept immer händisch gucken, wo es neue Daten gibt.

Ich hätte halt gerne nur eine HDD, auf die die neusten Daten geschrieben werden - egal welche Ordner das sind.

@Techhelfer_DE Ich finde keinen Hinweis in Syncovery, dass mehrere HDDs unterstützt werden. Kannst du mir sagen, wo ich dazu was finde?
 
Wenn es sein muss, guck dir mal StableBit DrivePool.

Ich habe aber stark die Vermutung das wir hier ein xy-Problem haben. Wieso musst du das Backup über mehrere Festplatten haben und dann auch noch "Balancen"?
 
@Snooty
Du machst dir irgendwie das Leben zu schwer.
Das sind viel zu umständliche Regeln die ein Tool abarbeiten soll. Teilweise kommt es mir so vor als müsse es Hellsehen können was nun plötzlich wohin soll. Felxibel gar.

Zunächst einmal… Mehrere externe Speichergeräte… …sollten nie dauerhaft angeschlossen sein (ein Kryptotrojaner hätte ein Gefundenes Fressen). Ich hänge meine ran und organisiere ein Backup.
→ manuell angestoßen, auf dem Laufwerk; wobei ich (sagen wir mal) Ordnergruppen A-D auf LW 1, E & F auf LW 2 und G-I auf #3 lege. Egal wie voll die LW in sich werden, darauf verschwende ich keine Zeit wie wild umzuverteilen. Stele ich fest, dass C sich nicht groß ändert könnte ich C in Gänze umräumen.

Solches Kopieren mach ich mit ROBOCOPY (in speziellen Fällen XCOPY). FreeFileSync nutze ich auch um intern (..!) und in Clouds live essentielle Daten zu kopieren. Normale Backups komme aber seit Jahrzehnten (darf ich sagen) auf externe Datenträger. Manuell und nach der Bedarfsgröße, dass ich weiß, dass sich da was getan hat.

Aber eine Vollautomatik habe ich bisher sehr bewusst vermieden da der Witz eines Backups eben der ist, im Un-Fall alte Daten zurückzuholen und solche Sicherungen nicht überzubügeln.

Mein Bauch sagt, dass du deine Strategie überdenken solltest.
Manche nenn mich faul, was nicht gar so verkehrt ist: ich mache mir nicht mehr Arbeit als nötig. Aber alles zu automatisch mit Problemen und Nebenwirkungen ist mein Ding wiederum auch nicht.

CN8
 
  • Gefällt mir
Reaktionen: cartridge_case
JumpingCat schrieb:
Wieso musst du das Backup über mehrere Festplatten haben
Weil es nicht auf eine einzelne Platte passt.
cumulonimbus8 schrieb:
Teilweise kommt es mir so vor als müsse es Hellsehen können was nun plötzlich wohin soll.
Nö, es müsste nur eine Datei anlegen in der steht, was schon gesichert wurde. Dann wäre das Problem gelöst.

Wenn ich nur auf eine einzelne Platte sichern würde, dann würde eine Backup-SW ja auch erstmal gucken, was es für Unterschiede zwischen Quelle und Ziel gibt. Und alles was bei der Quelle "zu viel" ist, wird kopiert.
 
Machst du wirklich Backup (mehrere Generationen) oder nur eine Kopie auf die Festplatten?
Was für Daten sind das ungefähr?
Hast du beim Backup alle Festplatten gleichzeitig angeschlossen?

Das "Ausbalancieren" sollte nicht so komplex per Skript sein.
 
keinFischBitte schrieb:
(z.B. mit robocopy von Windows ähnlich rsync von Linux)
cumulonimbus8 schrieb:
Solches Kopieren mach ich mit ROBOCOPY (in speziellen Fällen XCOPY).
BorgBackup ist für Linux und wird ohne zusätzliche Sachen nicht auf zwei Festplatten speichern können. Wenn du auf Windows bist, dann wird das nichts.
Bleib bei deinem generellen vorgehen und arbeite mit Robocopy (oder rsync auf Linux). Du brauchst dem nur z.b. über eine .bat Datei deine Ordner mitgeben. Das Tool guckt selbst, ob sich was geändert hat und was genau. Es kopiert nichts, was nicht kopiert werden muss.
 
keinFischBitte schrieb:
BorgBackup ist für Linux
Habe gerade gemerkt.

USB-Copy hab ich jetzt gefunden. Das kopiert Datei basiert und merkt sich, was schon kopiert wurde. Da kann ich dann einfach eine neue Platte anschließen, wenn die erste voll ist. Und dann wird einfach weiterkopiert, was noch fehlt.
 
Zurück
Oben