在极短的时间内备份数百万个小文件的最佳方法是什么?我们只有不到 5 个小时的时间来备份一个包含约 6000 万个文件(其中大部分是小文件)的文件系统。
我们尝试了多种解决方案,例如 richcopy、7z、rsync,但似乎都不太管用。我们正在寻找最优方法...
我们可以先将文件放入档案库,或者通过网络或硬盘传输将文件传输到另一个位置
谢谢
答案1
我强烈建议使用允许您对卷进行快照并从快照进行备份的文件存储系统。这样对实际服务器的影响很小,备份系统可以花时间进行备份而不必担心主系统。您没有提到操作系统,但 ZFS 或 NetApp 文件管理器之类的东西可以允许这样做,并且两者都在各地用于此确切功能。我确信还有其他文件系统可以提供此功能,但我知道这些系统可以工作。
希望这可以帮助。
答案2
我曾使用过一个服务器,它存储了大约 2000 万个文件,其中 95% 的文件大小小于 4k,大约 50% 的文件每 90 天被删除一次。他们使用原始磁盘映像进行备份。他们还通过脚本创建了一个包含名称、md5 哈希值和创建日期的索引文件,并使用该文件来跟踪内容。
最初的备份解决方案是通过 md5 签名将文件作为 blob 加载到数据库中。由于创建数百万个 md5 哈希比制作原始映像备份花费的时间更长,因此该解决方案已被逐步淘汰。
答案3
你真的需要每次都备份所有内容吗?如果你进行增量/差异备份,那么你只需要备份变化每次都删除它,而不是删除所有涉及的文件。
正如您所看到的rsync
,您可以考虑使用快照,这会创建一种增量备份。
答案4
这里的瓶颈将是文件系统和硬盘本身。对于许多小文件,文件系统会不断读取文件的元数据,这些元数据可能与文件无关,或者您正在读取的文件可能不在磁盘上连续的块中。无论哪种情况,驱动器磁头都必须移动很多。
您越快将所有这些小文件转换成大文件,整个过程就会越快。
不幸的是,如果您所做的只是复制这些文件一次,那么将它们放在一个大文件(如档案)中只会使该过程变得更慢。
读取所有文件 > 存档 > 备份位置
对比
读取所有文件>备份位置
最佳方法是将所有文件一次性复制到辅助位置,然后使用修改后的日期和大小或存档位(因为您使用的是 Windows,而不是像哈希这样的内容检查,这仍然需要读取文件)来确定哪些文件已更改,然后仅将这些文件复制到辅助位置并从那里备份。或者使用绕过 FS 的系统,例如 poige 建议的 RAW 副本。