Ich bin ein Doktorand der Computerchemie mit Zugang zu einem Linux-Cluster. Der Cluster besteht aus einem sehr großen (25 TB) Dateiserver, an den mehrere Dutzend Rechenknoten angeschlossen sind. Jeder Rechenknoten besteht aus 8 bis 24 Intel Xeon-Kernen. Jeder Rechenknoten enthält außerdem eine lokale Festplatte mit etwa 365 TB.
Da etwa ein Dutzend Benutzer in der Forschungsgruppe routinemäßig auf den Dateiserver zugreifen, wird der Dateiserver hauptsächlich für die Langzeitspeicherung von Dateien verwendet (er wird jede Nacht gesichert, während die lokalen Datenträger der Rechenknoten nie gesichert werden). Aus diesem Grund hat der Systemadministrator uns angewiesen, Simulationen auf den lokalen Datenträgern durchzuführen, die schneller als der Dateiserver sind, um den Dateiserver für die anderen Benutzer nicht zu verlangsamen.
Also führe ich Simulationen auf den lokalen Festplatten aus und kopiere dann, nachdem sie fertig sind, die Trajektoriendateien - ich führe Molekulardynamik-Simulationen (MD-Simulationen) - zum Speichern auf den Dateiserver. Angenommen, ich habe eine Trajektoriedatei, die traj.trr
in einem Verzeichnis auf der lokalen Festplatte eines Knotens aufgerufen wird /home/myusername/mysimulation1/traj.trr
. Für die Langzeitspeicherung kopiere ich immer traj.trr
in ein Verzeichnis auf dem Dateiserver, ~/mysimulation1/traj.trr
in dem ~
mein Verzeichnis auf dem Dateiserver steht /export/home/myusername
. Nachdem ich es kopiert habe, du -h
überprüfe ich gewöhnlich , ob /home/myusername/mysimulation1/traj.trr
es dieselbe Dateigröße hat wie ~/mysimulation1/traj.trr
. Auf diese Weise kann ich zumindest einigermaßen sicher sein, dass die Übertragung auf den Dateiserver erfolgreich war. Beispielsweise:
cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h
Wenn die beiden Aufrufe du -h
dieselbe für Menschen lesbare Dateigröße ergeben, kann ich mit ziemlicher Sicherheit davon ausgehen, dass die Übertragung / Kopie erfolgreich war. (Meine typischen traj.trr
Dateien haben eine Größe von 15 bis 20 GB, abhängig von der genauen Simulation, die ich ausgeführt habe.) Wenn ich die beiden Dateien du
(dh ohne den -h
Schalter) ausführe traj.trr
, sind ihre Größen in Bytes normalerweise sehr, sehr ähnlich. - In der Regel innerhalb weniger Bytes. Ich verwende diese Gesamtmethode seit anderthalb Jahren ohne Probleme.
In letzter Zeit bin ich jedoch auf folgendes Problem gestoßen: Manchmal wirddu -h
berichtet, dass sich die beidentraj.trr
Dateien in der Größe um mehrere GB unterscheiden. Hier ist ein Beispiel:
cd /home/myusername/mysimulation1/ # this is the local disk
cp -v traj.trr ~/mysimulation1/
du traj.trr -h
cd ~/mysimulation1/ # this is the fileserver
du traj.trr -h
Die Ausgabe der beiden Aufrufe an du -h
lautet wie folgt:
20G traj.trr
28G traj.trr
Ich glaube, dass die erstere (dh die traj.trr
auf der lokalen Festplatte /home/myusername/mysimulation1/
) die richtige Dateigröße hat, da meine Simulationsverläufe voraussichtlich jeweils etwa 15 bis 20 GB betragen. Aber wie könnte die Datei auf dem Dateiserver tatsächlich größer sein ? Ich konnte sehen, wie es kleiner sein könnte, wenn die cp
Übertragung irgendwie fehlschlug. Aber ich sehe nicht ein, wie es tatsächlich größer sein könnte .
Ich erhalte eine ähnliche Ausgabe, wenn ich die gleichen Befehle wie oben ausführe, aber ohne den -h
Schalter für du
:
20717480 traj.trr
28666688 traj.trr
Können Sie sich einen Grund für den Unterschied vorstellen?
Wenn es durch einen unwahrscheinlichen Zufall zu einer du
Fehlfunktion kommt, kann ich damit einverstanden sein. Aber ich muss wirklich nur sicherstellen, dass die Kopie von traj.trr
auf dem Dateiserver vollständig und mit der Quellversion auf der lokalen Festplatte identisch ist. Ich muss die lokale Datei löschen, damit ich genug lokalen Speicherplatz habe, um neue Simulationen auszuführen, aber ich kann es mir nicht leisten, die Version von traj.trr
auf dem Dateiserver zu beschädigen.
Das .trr-Dateiformat (aus dem Gromacs Molecular Dynamics-Paket) ist ein Binärformat, kein Text. Daher bin ich mir nicht sicher, ob die Dateien von einem Programm wie z. B. zuverlässig verglichen werden können diff
.
md5sum
die beiden Dateien bearbeitet . Die beiden Prüfsummen stimmen überein. Das heißt also, dass die beiden Dateien identisch sind?
ls -l
? Der Befehl gibt an du
, wie viel Speicherplatz auf der Festplatte für Ihre Datei verwendet wird, nicht wie groß Ihre Datei ist. Die Größe der Festplatte kann durch Ihr Dateisystem und dessen Zuordnungsstrategien beeinflusst werden.
ls -l -h
sagt, dass beide Dateien 20 GB groß sind. Ebenso ls -l
heißt es, dass beide Dateien 21214683940 Bytes sind. Ich schätze, die Dateien haben die gleiche Größe, belegen aber nicht den gleichen Speicherplatz (laut du
).
md5sum
odersha1sum
auf den Dateien auszuführen. Passen sie zusammen?