Multithread-Datei kopieren für Linux benötigt

Habe ich eine "große" Menge an Daten, die kopiert werden muss-jeden Tag. (6TB)

Es ist 15 Festplatten vorgestellt, die von einem SAN über Fibre-Channel und kopieren auf ein lokales array, bestehend aus 22 Spindeln.

sources are 
/mnt/disk1
/mnt/disk2
/mnt/disk3

destination is
/mnt/Data/SystemBackup/

Aufgrund der Natur unserer SAN, single-threaded-Datei-Kopie ist nicht sehr schnell, aber es ist sehr in der Lage, 600+mb/sec, wenn wir ihn bitten in der rechten Weise. 🙂 Ich brauche einen Weg, um zu laichen mehrere threads in eine Datei kopieren. Es gibt VIELE Möglichkeiten, dies zu tun in windows... aber ich finde keine einheitlichen Methoden zur Verfügung, um Linux.

Könnte so etwas wie Python-oder Perl-Unterstützung? Gibt es etwas, was ich bin fehlt? Was sind Ihre Gedanken?

Bearbeiten:
(Bitte beachten, ich bin mit einer modifizierten version von gnutils cp.) Lesen Sie hier weitere Informationen: http://www.usenix.org/event/lisa10/tech/slides/kolano.pdf

Edit2: Der code

#!/bin/bash

# Declare the foo
OPTIONS="-r --double-buffer --threads=8"
dstdir="/mnt/Data/PrUv2Backup/"
mcp=/root/mcp

# Cleanup old timestamp file
rm -rf PrUv2CopyTimes.log

# Declare array of source locations
srcdirs=(
PrUv2-home
PrUv2-trax
PrUv2-trax2
PrUv2-trax3
PrUv2-traxnl
PrUv2-traxnl2
PrUv2-traxnl3
PrUv2-traxnl4
PrUv2-traxnv
PrUv2-traxnv2
PrUv2-ulog
PrUv2-zmops
PrUv2-zmops2
PrUv2-zmops3
PrUv2-zmops4
)


for srcdir in "${srcdirs[@]}"

do
        echo `date +"%r"` $srcdir start  >> PrUv2CopyTimes.log
        $mcp $OPTIONS /mnt/$srcdir/$dstdir
        echo `date +"%r"` $srcdir finish >> PrUv2CopyTimes.log
done

# email results
cat PrUv2CopyTimes.log | mailx -r LouPrBoxen001 -s "Backup Complete" [email protected]
  • Wenn Sie sagen, "wenn wir ihn bitten in der rechten Weise", was genau ist "der richtige Weg"? Ich denke, dass die threading-Architektur kritisch hängt davon ab.
  • Das klingt vielleicht albern, aber in deinem Skript kopieren, konnten Sie nicht kopieren-Operationen parallel? Damit ist sichergestellt, dass Ihre Kopie-Operationen effektiv zu max aus Ihrer Bandbreite. Natürlich müssen Sie Wiegen die Anzahl der Operationen, die Sie in parallel vs performance et al, aber Sie bekommen die Idee.
  • "Der richtige Weg" ist irgendwie eine mir unbekannt. Ich weiß, dass es behandelt random IO in eine böse schnelle Art und Weise. Es mag viele Anfragen und viel zu tun... wenn du Fragen zum kopieren einer einzelnen großen Datei, es kann nicht nur geben Sie dem IO.
  • Ich könnte, aber ich weiß nicht, wie. Ich werde Bearbeiten und posten, bis mein original-Skript.
  • ganze Skript Hinzugefügt.
  • Warum gehst du nicht einfach mehrere rsync parallel, jedes kopieren von einer anderen Quelle-Verzeichnis?
  • 1. Als ich sagte, dass ich nicht weiß, wie die Dinge laufen parallel so... ich könnte brechen Sie das Skript aus und jeder tut 3 oder 4 Sätze von Verzeichnissen... 2. rsync hat Probleme mit dem gehen tief genug in directory trees. Es werde nicht kopieren Sie alle unsere Dateien.

Schreibe einen Kommentar