So speichern Sie große Mengen kleiner Dateien

383
sharpener

Lass uns folgende Aufgabe haben:

  • Backup große Menge (z. B. 500 GB) kleiner Dateien (einige KB bis zu 1 MB) unter Linux
  • Der Sicherungsspeicher ist meistens schreibgeschützt
  • Die Speicherung ist schnell genug, um auf bestimmte Dateien in der regulären Verzeichnis- / Dateiansicht zuzugreifen, idealerweise durch integrierte oder eingebaute Funktionen in regulären Dateimanagern (wie mc, TotalCommander (über Samba) oder so).
  • Der Speicher sollte im Idealfall nur eine einzige Datei sein (kann effektiv nach nas verschoben werden)
  • Es ist keine Komprimierung erforderlich
  • Das Hinzufügen von Dateien kann eine kostspielige Operation sein (sogar die anfängliche Speicherinitialisierung).

Ich habe einfach alt ausprobiert tar, aber das "Öffnen" des Index für 500G scheint endlos zu sein - also müsste ich es wahrscheinlich als Ganzes extrahieren. Gibt es zum Beispiel eine Möglichkeit, wie man einen ddTeil des Dateisystems in ein Image einbinden und dann einhängen kann?

Irgendwelche Gedanken?

0

3 Antworten auf die Frage

1
davidgo

Sie können tatsächlich eine Datei erstellen und sie wie ein Blockgerät behandeln. Möglicherweise müssen Sie es jedoch manuell mounten.

  1. Der erste Schritt ist das Erstellen des "Blockgeräts" - Sie können dddies (z. B. dd if=/dev/zero of=/path/to/file.name bs=100M count=6000) oder ein anderes Werkzeug ( fallocate, truncate) verwenden.
  2. Dann formatieren Sie das Gerät mit etwas mkfs.ext4 /path/to/file.name.
  3. Als nächstes montieren - mkdir /mntpoint; moint /path/to/file.name /mntpoint.
  4. Kopieren von Dateien in /mntpointIhrem bevorzugtes Werkzeug - zum Beispiel rsnapshot, rsyncoder plain old cp.
  5. Heben Sie die Bereitstellung auf, wenn Sie fertig sind, und stellen Sie sicher, dass Sie sich nicht im /mntpointVerzeichnis befinden umount /mntpoint.
0
Alex

Ich mache es in solchen Fällen, wenn man einen schnellen Zugriff auf den gesicherten Inhalt benötigt - inkrementelle Sicherung rsyncmit --link-dest=Option.
Es ist ziemlich schnell und hat keine Auswirkungen auf vorherige Sicherungskopien, bei denen Sie beliebig viele Sicherungskopien erstellen können. Backups beanspruchen nicht viel Speicherplatz, da Sicherungskopien feste Links zu vorhandenen Dateien sind. In diesem Fall ist der Zugriff auf das Backup sofort möglich, und die eigentliche Dateiübertragung dauert selbst bei einer großen Anzahl von Dateien rsyncnur Sekunden, da nur neue Dateien kopiert wurden.

#!/bin/sh  srcDir='/importunt/data' # Use full path bkpDir='/backups' # Use full path  cd "$"  previousDir="$(ls -td -- */ | head -n 1 | awk -F'/' '')" # Get most newest directory currentDir="$(date '+%Y-%m-%dT%H;%M;%S')"  [ -n "$" ] && { rsync_opts="-aPvz --safe-links --link-dest=$/$ --exclude=*.mp3" } || { rsync_opts="-aPvz --safe-links --exclude=*.mp3" }  mkdir -m 770 "$" rsync $ "$" "$"/"$" 

Grundsätzlich erstellen solche Lösungen einen exakten Schnappschuss, sodass die Wiederherstellung von Dateien relativ einfach ist.

Seien Sie nicht beängstigend, wenn Sie duon /backupsdirectory verwenden, wenn bei jedem Update eine zunehmende Größe angezeigt wird. Wenn Sie dies tun, werden dfSie feststellen, dass der tatsächliche Speicherplatz nicht reduziert wird. Auf diese Weise zählten harte Links unter Linux und FreeBSD, also keine Sorge. Um sicher zu gehen, dass ich nicht gelogen habe, können Sie den Inode einer Datei in der inkrementellen Sicherung mit überprüfen ls -i file. Sie werden feststellen, dass die gleiche Datei in allen Verzeichnissen den gleichen Inode aufweist. Dies bedeutet rsync, dass nur Dateinamen mit festen Links kopiert werden, die jedoch alle auf denselben Inhalt verweisen.

Ein weiterer Vorteil dieser Methode ist, dass Sie älteste Backup-Verzeichnisse in beliebiger Reihenfolge löschen können - neueste, mittlere oder älteste.

Das obige Skript ist ein vereinfachtes Beispiel. Wenn Inhalte in der inkrementellen Sicherung bearbeitet werden sollen, sollten Sie den Mechanismus nicht verwenden ls -t, um das neueste vorherige Verzeichnis in der Sicherung zu ermitteln, sondern $in einer Datei speichern und $bei einem nachfolgenden Aufruf wiederherstellen .

Da rsyncdie Übertragung von Übertragungen unterstützt wird ssh, können Sie die inkrementelle Sicherung mit derselben Effizienz auf die entfernte Maschine übertragen. Die einzigen Änderungen werden synchronisiert.

0
Attie

tarspeichert keinen prägnanten Index an einer Stelle in der Datei (wie Zip) - stattdessen deklariert er jede Entität mit den Daten der Entität, daher " scheint endlos zu sein " - Sie müssen die gesamte Datei lesen, um eine Liste aller zu erhalten Wesen in ihm.

Wenn Sie einen einfachen Zugriff auf den Index haben möchten, können Sie einfach die Ausgabe erfassen tar -cvund diese neben dem Archiv speichern.

tar -cv -f ./test.tar ./to_backup/ \ > index.txt 

Wenn Sie zusätzliche Informationen benötigen, können Sie alternativ verwenden tar -cT $, wodurch eine Liste von Dateien akzeptiert wird $. Auf diese Weise könnten Sie findDateinamen sammeln, Details zu jeder Datei in Ihren " Index " aufnehmen und den Dateinamen stdoutfür tardie Archivierung erzeugen .

find ./to_backup/ -type f \ | tee index.txt \ | tar -cT /dev/stdin \ > ./test.tar 

Ohne Komprimierung ist es sehr einfach, Dateien zu einem tarArchiv hinzuzufügen ( tarsteht für " Tape Archive " ... das Mischen von Daten auf Band ist schmerzhaft). Ein Dateiformat mit einem kurzen Index wird zu einem späteren Zeitpunkt schwieriger zum Hinzufügen von Dateien, obwohl dies normalerweise möglich ist.