问题描述
在日常工作中,离不开数据的复制与移动。有时需要将几百万(甚至几千万)的静态资源移动/复制到其他存储设备中。那该如何高效的移动/复制这些数据呢?
本文将介绍如何高效移动大量文件的方法。
关于并行地移动/复制
在「Is it better to pass all files to mv or to run a bunch of mv processes in parallel?」中,有人回答了这个问题。其中有一句话是点睛之笔:
如果并行移动文件真的有意义,那么mv(1)或者其他类似工具早有这么做了。
所以说,不要再想着并行移动/复制文件。而且,并行移动/复制还会带来其他问题:
(1)并行写入可能会带来文件碎片;
(2)如果目标空间不足,并行会导致多个文件不完整;
(2)如果目标空间不足,并行会导致多个文件不完整;
所以不要再想象什么并行移动/复制操作。
移动文件
# 同一文件系统
如果移动的源地址及目的地址位于同一文件系统中,可以直接使用mv(1)命令,速度将会非常快,因为它只更新inode信息。
# 不同文件系统
既然没有什么并行动作,所以直接使用mv(1)命令即可。
复制文件
对于文件的复制,不管是否位于同一文件系统,都可以使用rsync(1)命令。因为它可以提供更细粒度的控制,比如权限保留、增量复制等等。如果发生终端,由于支持增量复制,因此也可以恢复。
参考文献
Is it better to pass all files to mv or to run a bunch of mv processes in parallel?
What is the fastest way to move a million images from one directory to another in Linux?