我是计算机化学专业的研究生,可以访问Linux群集。群集由一个非常大的文件服务器(25 TB)组成,数十个计算节点连接到该服务器。每个计算节点由8至24个Intel Xeon内核组成。每个计算节点还包含大约365 TB的本地磁盘。
由于该文件服务器通常由研究组中的十几个用户访问,因此该文件服务器主要用于长期文件存储(每晚备份一次,而从不备份计算节点的本地磁盘)。因此,系统管理员已指示我们在本地磁盘上运行模拟(这些I / O比文件服务器具有更快的I / O),以便不降低其他用户使用文件服务器的速度。
因此,我在本地磁盘上运行模拟,然后在完成后将轨迹文件(正在运行分子动力学(MD)模拟)复制到文件服务器进行存储。假设我有一个traj.trr
在节点本地磁盘上的目录中调用的轨迹文件/home/myusername/mysimulation1/traj.trr
。对于长期存储,我总是将traj.trr
文件复制到文件服务器中的目录~/mysimulation1/traj.trr
,其中~
代表文件服务器中的目录/export/home/myusername
。复制后,我习惯性地使用du -h
来验证/home/myusername/mysimulation1/traj.trr
文件大小是否与相同~/mysimulation1/traj.trr
。这样,我至少可以合理地确定向文件服务器的传输已成功。例如:
cd /home/myusername/mysimulation1/
cp -v traj.trr ~/mysimulation1/
du /home/myusername/mysimulation1/traj.trr -h
du ~/mysimulation1/traj.trr -h
如果两个调用du -h
给出相同的可读文件大小,则可以合理地确定传输/复制成功。(traj.trr
根据我运行的确切模拟,我的典型文件的大小范围约为15到20 GB。)如果我在两个文件上运行du
(即,不进行-h
切换)traj.trr
,它们的字节大小通常非常非常相似- -通常在几个字节之内。在过去的一年半中,我一直在使用这种总体方法,没有任何问题。
但是,最近我遇到了以下问题:有时du -h
报告两个traj.trr
文件的大小相差数GB。这是一个例子:
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
来自两个调用to的输出du -h
分别如下:
20G traj.trr
28G traj.trr
我相信前者(即traj.trr
本地磁盘中的/home/myusername/mysimulation1/
)是正确的文件大小,因为我的模拟轨迹预计每个约为15至20 GB。但是,实际上文件服务器上的文件又怎么可能更大呢?如果cp
传输失败,我可以看到它会变得更小。但是我不知道它可能会更大。
当我执行与上述相同的命令时,会得到类似的输出,但是没有-h
切换到du
:
20717480 traj.trr
28666688 traj.trr
您能想到造成这种差异的任何原因吗?
如果以某种不太可能的机会出现du
故障,我可以接受。但我只需要确保traj.trr
文件服务器上的副本完整且与本地磁盘上的源版本相同即可。我需要删除本地文件,以便有足够的本地磁盘空间来运行新的模拟,但是我不能承受traj.trr
文件服务器上的版本损坏的负担。
所述.trr文件格式(从的Gromacs分子动力学封装)是二进制格式,而不是文本。因此,我不确定文件是否可以通过程序可靠地比较diff
。
md5sum
在两个文件上运行。两个校验和匹配。所以我想这意味着两个文件是相同的?
ls -l
?该命令du
报告磁盘上有多少空间用于文件,而不是文件的大小。磁盘上的大小可能受文件系统及其分配策略的影响。
ls -l -h
表示两个文件均为20 GB。同样,ls -l
说两个文件都是21214683940字节。因此,我猜这些文件的大小是相同的,但是不要使用相同数量的磁盘空间(根据du
)。
md5sum
或sha1sum
处理文件。他们匹配吗?