Hintergrund
Ich lief aus dem Raum auf /home/data
und Notwendigkeit der Übertragung /home/data/repo
an /home/data2
.
/home/data/repo
enthält 1M Verzeichnisse, von denen jedes 11 Verzeichnisse und 10 Dateien enthält. Es beläuft sich auf 2 TB.
/home/data
ist auf ext3 mit dir_index aktiviert.
/home/data2
ist auf ext4. Ausführen von CentOS 6.4.
Ich repo/
gehe davon aus, dass diese Ansätze langsam sind, da 1 Million Verzeichnisse direkt darunter liegen.
Versuch 1: mv
ist schnell, wird aber unterbrochen
Ich könnte fertig sein, wenn dies beendet wäre:
/home/data> mv repo ../data2
Aber es wurde unterbrochen, nachdem 1,5 TB übertragen wurden. Es wurde mit ca. 1GB / min geschrieben.
Versuch 2: rsync
Crawlt nach 8 Stunden Erstellen der Dateiliste
/home/data> rsync --ignore-existing -rv repo ../data2
Das Erstellen der inkrementellen Dateiliste dauerte mehrere Stunden und die Übertragung erfolgte mit 100 MB / min.
Ich storniere es, um einen schnelleren Ansatz zu versuchen.
Versuch 3a: mv
beschwert sich
Testen Sie es in einem Unterverzeichnis:
/home/data/repo> mv -f foobar ../../data2/repo/
mv: inter-device move failed: '(foobar)' to '../../data2/repo/foobar'; unable to remove target: Is a directory
Ich bin mir nicht sicher, worum es bei diesem Fehler geht, aber vielleicht cp
kann ich mich retten.
Versuch 3b: cp
kommt nach 8 Stunden nirgendwo hin
/home/data> cp -nr repo ../data2
Der Datenträger wird 8 Stunden lang gelesen, und ich beschließe, ihn abzubrechen und zu rsync zurückzukehren.
Versuch 4: rsync
Crawlt nach 8 Stunden Erstellen der Dateiliste
/home/data> rsync --ignore-existing --remove-source-files -rv repo ../data2
Ich --remove-source-files
dachte, es könnte schneller gehen, wenn ich jetzt mit dem Aufräumen beginne.
Es dauert mindestens 6 Stunden, um die Dateiliste zu erstellen, und anschließend werden Daten mit einer Geschwindigkeit von 100-200 MB / min übertragen.
Aber der Server wurde über Nacht belastet und meine Verbindung geschlossen.
Versuch 5: Es sind nur noch 300 GB übrig, um sich zu bewegen, warum dies so schmerzhaft ist
/home/data> rsync --ignore-existing --remove-source-files -rvW repo ../data2
Wieder unterbrochen. Das -W
schien das "Versenden inkrementeller Dateilisten" fast zu beschleunigen, was meines Erachtens keinen Sinn ergeben sollte. Ungeachtet dessen ist die Übertragung schrecklich langsam und ich gebe diese auf.
Versuch 6: tar
/home/data> nohup tar cf - . |(cd ../data2; tar xvfk -)
Grundsätzlich wird versucht, alles neu zu kopieren, aber vorhandene Dateien werden ignoriert. Es muss 1,7 TB der vorhandenen Dateien durchwühlen, liest jedoch mindestens mit 1,2 GB / min.
Bisher ist dies der einzige Befehl, der sofortige Befriedigung gibt.
Update: wieder irgendwie unterbrochen, auch mit nohup ..
Versuch 7: Harakiri
Debattiere immer noch darüber
Versuch 8: Zusammenführen mit Skript mv
Das Zielverzeichnis hatte ungefähr 120.000 leere Verzeichnisse, also bin ich gelaufen
/home/data2/repo> find . -type d -empty -exec rmdir {} \;
Ruby-Skript:
SRC = "/home/data/repo"
DEST = "/home/data2/repo"
`ls #{SRC} --color=never > lst1.tmp`
`ls #{DEST} --color=never > lst2.tmp`
`diff lst1.tmp lst2.tmp | grep '<' > /home/data/missing.tmp`
t = `cat /home/data/missing.tmp | wc -l`.to_i
puts "Todo: #{t}"
# Manually `mv` each missing directory
File.open('missing.tmp').each do |line|
dir = line.strip.gsub('< ', '')
puts `mv #{SRC}/#{dir} #{DEST}/`
end
GETAN.
mv
nochmal? Theoretisch mv
wird eine Quelldatei nur gelöscht, wenn die Zieldatei vollständig kopiert wurde, sodass sie ordnungsgemäß funktionieren sollte . Haben Sie auch physischen Zugriff auf das Gerät oder erfolgt dies über eine ssh
Verbindung?
mv
ist nicht verzeihend, wenn Sie immer wieder getrennt werden, können Sie Daten verlieren und wissen es nicht einmal. Wie Sie sagten, Sie tun dies über ssh
, empfehle ich mit screen
und trennen. Aktivieren Sie die Protokollierung und verfolgen Sie diese. Wenn Sie ausführlich sprechen, dauert es nur länger. Versuchen Sie auchiotop
screen
. Ich habe mich über Verbose gewundert, aber ich denke, es ist zu spät, um tar
jetzt neu zu starten . Und iotop
war in den letzten Tagen mein Lieblingsdienstprogramm :)