我必须将几 TB 的数据从一个外部驱动器复制到另一个外部驱动器(大部分是 ~400 MB 文件)。源是 NTFS 格式的 USB2,我能从中获得的最佳读取速度是 7MB/s。目标是 HFS+ USB3,写入速度远高于此。
NTFS 文件系统不行,只有 NTFS-3g(慢,用户空间)可以读取其中的所有文件,甚至 Windows 都无法做到,否则我会使用它。
我正在使用rsync -va /Volumes/source /Volumes/target
它来执行复制。
在 rsync 或 OS X 中,有没有办法缓存写入,这样目标就不需要连续几天以低速写入?比如在写入之前填满 1GB 或 2GB 甚至 4GB 的 RAM?这样目标驱动器就会花几天时间做
write - rest - rest - rest - rest - rest
write - rest - rest - rest - rest - rest
write - rest - rest - rest - rest - rest
...
而不是整天都以缓慢的速度持续写作。
另一种可能性,考虑到大多数文件都很大,可以让 rsync 仅在读取完任何给定文件后才将其写入,但我发现也没有办法做到这一点。
还是最好一直以慢速持续书写?
答案1
首先,如果没有良好的驱动程序配置,您将面临一个漫长而困难的 NTFS 读取过程。
尝试http://www.macupdate.com/app/mac/26288/ntfs
也就是说,如果运行速度如此缓慢,则很可能原始驱动器存在问题。
官方rsync上没有好的办法改变缓存进程
在这种情况下,您可能会发现 cp -rvn 是一个更快的选择。
答案2
我找到了一些答案:使用 ramdisk 作为 rsync 的临时目录,例如
rsync -va -T /Volumes/ramdisk /Volumes/source /Volumes/target
确保临时目录确实存在,否则 rsync 将不会创建它而只会将其读入/dev/null
,据我所知(它可能会直接使用可用 RAM 作为临时空间,这很好,但我对此表示怀疑,并且我有太多 RAM 而不想尝试这样做)。
这将首先将每个文件完整地读取到 ramdisk,然后一次性将其写入目标。由于文件很大,最终结果或多或少符合我的预期。这并不完美,因为 rsync 在目标尚未完成写入时停止读取源,但在这种情况下,这意味着源不会在整个传输过程中保持不间断的活动,这对我来说没问题。整体上没有减速,因为读取 ramdisk 比读取/写入目标要快一点。