我必须将一个相对较大的文件 (6GB) 复制到另一台服务器。为了确保一致性,我必须“锁定”此文件,并且在传输过程中不使用它。我显然希望尽量减少停机时间,但在此之前,我还想估算一下这样做所需的时间。
我可以看到两个解决方案:
在本地复制文件,然后通过网络(本地)传输。我认为这将导致最短的停机时间,但也许我错了,因为磁盘必须同时写入和读取同一个文件。即使这样,我也不知道如何估计在本地复制文件所需的时间。也许创建一个 6GB 的文件并复制它会很有意义,但是,我该怎么做呢?
直接通过网络复制文件 (scp)。这似乎很慢,因为网络访问比磁盘写入慢几个数量级,但也许我错了。
一般来说,我如何对两种方法进行基准测试并决定哪一种方法最适合我?
答案1
老实说……有几种方法可以解决这个问题。我有几台服务器,需要复制经常使用的文件……所以我安排了几分钟的“维护窗口”,在此期间我可以锁定文件……创建快照(使用 dm-snapshot),使服务器重新上线,然后对快照的文件副本执行任何操作。这使我拥有了文件的稳定版本……并以最短的停机时间使服务重新上线。之后……我可以删除快照而不会影响实时服务器。对于您来说……您可以根据需要按照自己的节奏复制 6gb 快照文件……而不必担心实时版本的文件会搞乱复制过程。
答案2
创建一个虚拟文件来传输:
time dd if=/dev/urandom of=~/testfile bs=1M count=512
time cp testfile testfile2 #How long it takes to copy
time scp testfile user@otherserver:/path
/dev/urandom
被选中以避免压缩带来的任何提升。SCP 应该以交互方式告诉您速度是多少。基本数学应该允许将文件大小推断为 6 GB。
答案3
您可以使用 *nix 实用程序“管道查看器”观看这些过程。它将为您提供进度条和预计传输时间。