在两个 NFS 1Gb/s 文件夹之间移动 9000 万个文件 (270GB) 的最快方式
Posted
技术标签:
【中文标题】在两个 NFS 1Gb/s 文件夹之间移动 9000 万个文件 (270GB) 的最快方式【英文标题】:Fastest way to move 90 million files (270GB) between two NFS 1Gb/s folders 【发布时间】:2017-02-04 05:49:35 【问题描述】:我需要将 9000 万个文件从 NFS 文件夹移动到第二个 NFS 文件夹,到 NFS 文件夹的两个连接都使用相同的 eth0,即 1Gb/s 到 NFS 服务器,不需要同步,只移动(覆盖如果它存在)。我认为我的主要问题是文件数量,而不是总大小。最好的方法应该是每个文件对 NFS 文件夹的系统调用较少的方法。
我尝试了 cp、rsync,最后http://moo.nac.uci.edu/~hjm/parsync/ parsync 首先花了 10 个小时来生成文件列表的 12 GB gzip,在花了 40 个小时并且没有复制任何文件之后,它一直工作到 10 个线程,直到我取消它并开始调试,我发现它正在使用 -vvv 选项(它使用 rsync)再次对每个文件(来自列表)进行调用(stat?):
[sender] make_file(accounts/hostingfacil/snap.2017-01-07.041721/hostingfacil/homedir/public_html/members/vendor/composer/62ebc48e/vendor/whmcs/whmcs-foundation/lib/Domains/DomainLookup/Provider.php,*,0)*
parsync 命令是:
time parsync --rsyncopts="-v -v -v" --reusecache --NP=10 --startdir=/nfsbackup/folder1/subfolder2 thefolder /nfsbackup2/folder1/subfolder2
每个 rsync 都有这种形式:
rsync --bwlimit=1000000 -v -v -v -a --files-from=/root/.parsync/kds-chunk-9 /nfsbackup/folder1/subfolder2 /nfsbackup2/folder1/subfolder2
NFS 文件夹已挂载:
server:/export/folder/folder /nfsbackup2 nfs auto,noexec,noatime,nolock,bg,intr,tcp,actimeo=1800,nfsvers=3,vers=3 0 0
知道如何指示 rsync 将列表中已有的文件从 nfs 复制到 nfs2 文件夹吗?或者任何有效地制作这个副本的方法(每个文件一个系统调用?)
【问题讨论】:
我认为优化两个 NFS 挂载之间数百万个文件的移动可能是一个有趣的挑战,但我希望在考虑更改架构以减少数量时,开发工作与加速会更好文件和/或摆脱 NFS。 @mnagel NFS 由数据中心作为备份服务提供。文件数量是对 450 多个托管帐户进行 30 天保留的增量备份的产物。 【参考方案1】:我曾经遇到过同样的问题,我发现最好只运行一个查找命令并单独移动每个文件。
cd /origin/path
find . | cpio -updm ../destination/
-u 命令将覆盖现有文件
【讨论】:
您能提供更多信息吗?下面的命令将为每个文件执行一个 cp,一次 una cp,对吗?如果需要创建目录会做吗? 90Mil Files 是否有目录结构? 文件位于目录结构中。一个文件夹中没有 9000 万个文件。 如果我理解该命令,它将扩展到 cpio -updm ../destination/ file1 /folder/file2 /folder/folder/file3 cp 将最后一个路径作为目标,不是吗? 我联系了 parsync 开发人员,他是一位大学教授,对移动大数据量有很好的了解。他解释说,在 NFS 文件夹之间移动数百万个文件并没有最佳解决方案。因此,我决定采用最佳方法,使用 parsync 生成的已文件列表,我正在以这种方式执行副本: cd /nfsbackup/folder/folder/ time cpio -p -duv /nfsbackup2/folder/folder/以上是关于在两个 NFS 1Gb/s 文件夹之间移动 9000 万个文件 (270GB) 的最快方式的主要内容,如果未能解决你的问题,请参考以下文章