在非常短的时间内备份数百万个小文件的最佳方法是什么? 我们有不到5个小时的时间来备份一个文件系统,其中包含大约6000万个文件,大部分是小文件。
我们已经尝试了一些解决scheme,比如richcopy,7z,rsync等,而且所有这些解决scheme似乎都很困难。 我们正在寻找最理想的方式
我们愿意把文件先存档,或通过networking或硬盘传输将文件传输到另一个位置
谢谢
我强烈build议使用文件存储系统,使您可以从快照中快照卷和备份。 这样一来,对实际的服务器几乎没有什么影响,备份系统可以花时间做备份,而不用担心主系统。 您没有提到操作系统,但是像ZFS或NetApp文件pipe理器可以允许这个操作系统,而且这两者都被用于这个确切的function。 我确定有其他的文件系统提供这个,但我知道这些工作。
希望这可以帮助。
我使用了一台服务器,存储了大约2000万个文件,其中95%的文件大小小于4k,大约50%的文件每90天被删除一次。 他们使用原始磁盘映像进行备份。 他们还创build一个名称的索引文件,通过脚本创build的MD5散列和date,并使用它来跟踪内容。
原始备份解决scheme是通过md5签名将文件作为blob加载到数据库中。 这是因为创build数百万的MD5哈希需要比创build原始映像备份花费的时间更长。
你真的需要每次都备份它们吗? 如果您进行增量/差异备份,那么您只需每次备份更改 ,而不是所有涉及的文件。
正如你看过rsync ,你可以看看使用rsnapshot ,它创build了一种增量备份。
然后将整个卷(分区)备份为“原始”设备。
这里的瓶颈将是文件系统和硬盘本身。 对于许多小文件,FS不断读取可能与文件分开的文件的元数据,或者读取的文件可能不在磁盘上的连续丛中。 在任何一种情况下,驱动头都必须移动很多 。
将所有这些小文件放到更大的文件中速度越快,整个过程就会越快。
不幸的是,如果你所做的只是复制这些文件一次,那么把它们放在一个单独的大文件中就像存档一样,只会使进程变慢。
读取所有文件>归档>备份位置
VS
读取所有文件>备份位置
最佳的方法是将所有文件一次复制到次要位置,然后使用修改后的date和大小或归档位,因为您使用的是Windows(不是像哈希那样的内容检查,它仍然会涉及读取文件)来确定哪些文件已经更改,并将其复制到辅助位置并从那里进行备份。 或者使用一个绕过FS的系统,就像build议的像一个RAW文件一样。
在Windows 2008及更高版本中,Windows Server Backup可以处理音量级别的图像,所以它不会通过数百万个文件元数据。 它只是执行一个快照(或MS中的卷影复制),然后按顺序备份文件系统中所有使用的块。 读取是连续的,因此速度非常快,并将结果写入另一个卷或networking共享中的大.vhd文件。
有几个缺点:每个备份都是完全备份,没有压缩,如果要访问networking共享,则每个目标文件夹只能存储一个“映像”。 你可以用脚本来克服后者,前者可以使用其他工具,如7-zip,rsync或任何其他可以处理原始文件的备份/压缩/重复数据删除工具。
你可能最终会使用命令行的wbadmin接口来做这个事情; 忽略GUI,这对于大多数用例来说太简单了。
这就是我们所做的:
我们购买了Windows 2008存储服务器R2的NAS。 创build一个ISCSI目标,实际上是一个大文件(.vhd)挂载ISCSI目标并将所有文件移动到虚拟磁盘。
现在我们用备份软件备份vhd。 备份一个大文件比许多小文件快得多。
您也可以在NAS上安装备份软件,并将其粘贴到此。 这样你就不必使用双存储(镜像数据和备份镜像数据以便购买时间)