Sono uno studente laureato di chimica computazionale con accesso a un cluster Linux. Il cluster è costituito da un file server molto grande (25 TB), al quale sono collegate diverse decine di nodi di calcolo. Ogni nodo di calcolo è composto da 8 a 24 core Intel Xeon. Ogni nodo di calcolo contiene anche un disco locale di circa 365 TB.
Dato che al dozzina accedono regolarmente al file server una dozzina di utenti nel gruppo di ricerca, il file server viene utilizzato principalmente per l'archiviazione di file a lungo termine (viene eseguito il backup di notte, mentre i dischi locali dei nodi di calcolo non vengono mai sottoposti a backup). Pertanto, l'amministratore di sistema ci ha incaricato di eseguire simulazioni sui dischi locali - che hanno un I / O più veloce rispetto al file server - in modo da non rallentare il file server per gli altri utenti.
Quindi, eseguo simulazioni sui dischi locali e poi, una volta terminato, copio i file di traiettoria - sto eseguendo simulazioni di dinamica molecolare (MD) - sul file server per l'archiviazione. Supponiamo che io sono un file chiamato traiettoria traj.trr
in una directory sul disco locale di un nodo, /home/myusername/mysimulation1/traj.trr
. Per la conservazione a lungo termine, ho sempre copiare traj.trr
in una directory nel fileserver, ~/mysimulation1/traj.trr
dove ~
rappresenta il mio directory nel fileserver, /export/home/myusername
. Dopo averlo copiato, lo uso abitualmente du -h
per verificare che /home/myusername/mysimulation1/traj.trr
abbia le stesse dimensioni del file ~/mysimulation1/traj.trr
. In questo modo, posso essere almeno ragionevolmente sicuro che il trasferimento al fileserver sia andato a buon fine. Per esempio:
cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h
Se le due chiamate du -h
danno la stessa dimensione di file leggibile dall'uomo, allora posso essere ragionevolmente sicuro che il trasferimento / copia sia andato a buon fine. (I miei traj.trr
file tipici hanno una dimensione compresa tra circa 15 e 20 GB, a seconda della simulazione esatta che ho eseguito.) Se corro du
(cioè senza l' -h
interruttore) sui due traj.trr
file, le loro dimensioni in byte sono di solito molto, molto simili - - di solito entro pochi byte. Ho usato questo metodo generale nell'ultimo anno e mezzo, senza problemi.
Tuttavia, recentemente ho riscontrato il seguente problema: a voltedu -h
segnala che i duetraj.trr
file hanno dimensioni diverse di diversi GB. Ecco un esempio:
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
L'output delle due chiamate a du -h
è rispettivamente il seguente:
20G traj.trr
28G traj.trr
Credo che il primo (ovvero, traj.trr
nel disco locale /home/myusername/mysimulation1/
) abbia le dimensioni corrette del file, poiché le mie traiettorie di simulazione dovrebbero essere di circa 15-20 GB ciascuna. Ma allora come potrebbe il file sul file server essere effettivamente più grande ? Ho potuto vedere come potrebbe essere più piccolo, se in qualche modo il cp
trasferimento non è riuscito. Ma non vedo come potrebbe effettivamente essere più grande .
Ottengo un output simile quando eseguo gli stessi comandi di cui sopra, ma senza lo -h
switch dato a du
:
20717480 traj.trr
28666688 traj.trr
Riesci a pensare a qualche motivo per la differenza?
Se, per qualche improbabile possibilità, du
funziona in qualche modo, posso essere d'accordo. Ma ho davvero bisogno di assicurarmi che la copia di traj.trr
sul file server sia completa e identica alla sua versione di origine sul disco locale. Devo eliminare il file locale in modo da disporre di spazio su disco locale sufficiente per eseguire nuove simulazioni, ma non posso permettermi di avere la versione di traj.trr
sul file server danneggiata.
Il formato di file .trr (dal pacchetto di dinamica molecolare Gromacs) è un formato binario, non testo. Pertanto, non sono sicuro che i file possano essere confrontati in modo affidabile da un programma come diff
.
md5sum
i due file. I due checksum corrispondono. Quindi suppongo che questo significhi che i due file sono uguali?
ls -l
? Il comando du
indica la quantità di spazio sul disco utilizzata per il file, non la dimensione del file. Le dimensioni sul disco possono essere influenzate dal tuo filesystem e dalle sue strategie di allocazione.
ls -l -h
afferma che entrambi i file sono 20 GB. Allo stesso modo, ls -l
dice che entrambi i file sono 21214683940 byte. Quindi immagino che i file abbiano le stesse dimensioni, ma non utilizzino la stessa quantità di spazio su disco (secondo du
).
md5sum
osha1sum
sui file. Si abbinano?