Jestem absolwentem chemii obliczeniowej z dostępem do klastra Linux. Klaster składa się z bardzo dużego (25 TB) serwera plików, do którego podłączonych jest kilkadziesiąt węzłów obliczeniowych. Każdy węzeł obliczeniowy składa się z 8 do 24 rdzeni Intel Xeon. Każdy węzeł obliczeniowy zawiera także dysk lokalny o wielkości około 365 TB.
Ponieważ serwer plików jest rutynowo dostępny dla kilkunastu użytkowników w grupie badawczej, serwer plików jest używany głównie do długotrwałego przechowywania plików (jest on tworzony kopii zapasowej co noc, podczas gdy dyski lokalne węzłów obliczeniowych nigdy nie są tworzone). Dlatego administrator systemu polecił nam przeprowadzać symulacje na dyskach lokalnych - które mają szybsze operacje we / wy niż serwer plików - aby nie spowalniać serwera plików dla innych użytkowników.
Tak więc uruchamiam symulacje na lokalnych dyskach, a następnie, po ich zakończeniu, kopiuję pliki trajektorii - prowadzę symulacje dynamiki molekularnej - na serwer plików w celu przechowywania. Załóżmy, że mam plik o nazwie trajektorii traj.trr
w katalogu na dysku lokalnym węzła, /home/myusername/mysimulation1/traj.trr
. Do długotrwałego przechowywania, zawsze skopiować traj.trr
do katalogu na serwerze plików, ~/mysimulation1/traj.trr
gdzie ~
reprezentuje mój katalog na serwerze plików, /export/home/myusername
. Po skopiowaniu go zwykle używam du -h
do sprawdzenia, czy /home/myusername/mysimulation1/traj.trr
ma ten sam rozmiar pliku co ~/mysimulation1/traj.trr
. W ten sposób mogę przynajmniej mieć pewność, że transfer do serwera plików powiódł się. Na przykład:
cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h
Jeśli dwa wywołania du -h
dadzą ten sam rozmiar pliku, który można odczytać dla człowieka, to mogę być całkiem pewny, że przesyłanie / kopiowanie powiodło się. (Moje typowe traj.trr
pliki mają rozmiar od około 15 do 20 GB, w zależności od dokładnej symulacji, którą uruchomiłem.) Jeśli uruchomię du
(tj. Bez -h
przełącznika) na dwóch traj.trr
plikach, ich rozmiary w bajtach są zwykle bardzo, bardzo podobne - - zwykle w ciągu zaledwie kilku bajtów. Używam tej ogólnej metody przez ostatnie półtora roku, bez żadnych problemów.
Jednak ostatnio napotkałem następujący problem: czasamidu -h
zgłasza, że rozmiar dwóchtraj.trr
plików jest różny o kilka GB. Oto przykład:
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
Dane wyjściowe z obu wywołań du -h
są odpowiednio następujące:
20G traj.trr
28G traj.trr
Uważam, że ten pierwszy (tj. Na traj.trr
dysku lokalnym /home/myusername/mysimulation1/
) ma prawidłowy rozmiar pliku, ponieważ oczekuje się, że moje trajektorie symulacji będą miały około 15 do 20 GB każdy. Ale w jaki sposób plik na serwerze plików może być większy ? Widziałem, jak może być mniejszy, jeśli jakoś się cp
nie powiedzie. Ale nie rozumiem, jak może być większy .
Otrzymuję podobne wyniki, gdy wykonuję te same polecenia, co powyżej, ale bez -h
przełącznika podanego do du
:
20717480 traj.trr
28666688 traj.trr
Czy potrafisz wymyślić jakiś powód różnicy?
Jeśli przez jakiś nieoczekiwany przypadek du
jakoś źle funkcjonuje, mogę się z tym pogodzić. Ale naprawdę muszę się upewnić, że kopia traj.trr
na serwerze plików jest kompletna i identyczna z wersją źródłową na dysku lokalnym. Muszę usunąć plik lokalny, aby mieć wystarczającą ilość miejsca na dysku lokalnym, aby uruchomić nowe symulacje, ale nie mogę sobie pozwolić na traj.trr
uszkodzenie wersji serwera plików.
Format .trr (od GROMACS dynamiki molekularnej opakowaniu) to format binarny, a nie tekst. Dlatego nie jestem pewien, czy pliki mogą być wiarygodnie porównane przez program taki jak diff
.
md5sum
dwa pliki. Dwie sumy kontrolne są zgodne. To chyba dwa pliki są takie same?
ls -l
? Polecenie du
informuje, ile miejsca na dysku zajmuje plik, a nie jak duży jest plik. Na rozmiar dysku może mieć wpływ system plików i jego strategie alokacji.
ls -l -h
mówi, że oba pliki mają 20 GB. Podobnie, ls -l
mówi, że oba pliki mają 21214683940 bajtów. Sądzę więc, że pliki mają ten sam rozmiar, ale nie używają takiej samej ilości miejsca na dysku (zgodnie z du
).
md5sum
lubsha1sum
na plikach. Czy oni pasują?