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.trrin una directory sul disco locale di un nodo, /home/myusername/mysimulation1/traj.trr. Per la conservazione a lungo termine, ho sempre copiare traj.trrin una directory nel fileserver, ~/mysimulation1/traj.trrdove ~rappresenta il mio directory nel fileserver, /export/home/myusername. Dopo averlo copiato, lo uso abitualmente du -hper verificare che /home/myusername/mysimulation1/traj.trrabbia 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 -hdanno 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.trrfile 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' -hinterruttore) sui due traj.trrfile, 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 -hsegnala che i duetraj.trrfile 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.trrnel 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 cptrasferimento 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 -hswitch dato a du:
20717480 traj.trr
28666688 traj.trr
Riesci a pensare a qualche motivo per la differenza?
Se, per qualche improbabile possibilità, dufunziona in qualche modo, posso essere d'accordo. Ma ho davvero bisogno di assicurarmi che la copia di traj.trrsul 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.trrsul 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.
md5sumi due file. I due checksum corrispondono. Quindi suppongo che questo significhi che i due file sono uguali?
ls -l? Il comando duindica 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 -hafferma che entrambi i file sono 20 GB. Allo stesso modo, ls -ldice 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).
md5sumosha1sumsui file. Si abbinano?