「Linux」- 如何高效地移动/复制文件

  CREATED BY JENKINSBOT

问题描述

在日常工作中,离不开数据的复制与移动。有时需要将几百万(甚至几千万)的静态资源移动/复制到其他存储设备中。那该如何高效的移动/复制这些数据呢?

本文将介绍如何高效移动大量文件的方法。

关于并行地移动/复制

在「Is it better to pass all files to mv or to run a bunch of mv processes in parallel?」中,有人回答了这个问题。其中有一句话是点睛之笔:

如果并行移动文件真的有意义,那么
mv(1)或者其他类似工具早有这么做了。

所以说,不要再想着并行移动/复制文件。而且,并行移动/复制还会带来其他问题:

(1)并行写入可能会带来文件碎片;

(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?