在Linux上存储和备份1000万个文件

Modified on: Tue, 12 Nov 2019 03:40:02 +0800

我运行一个网站,其中大约有1000万个文件(书籍封面)存储在3个子目录中,范围为[0-f]:

0/0/0/ 0/0/1/ ... f/f/f/

这导致每个目录大约2400个文件,当我们需要检索一个文件时这非常快。此外,这是许多问题建议的做法。

但是,当我需要备份这些文件时,只需浏览保存10m文件的4k目录就需要很多天。

所以我想知道我是否可以将这些文件存储在一个容器(或4k容器)中,每个容器的行为与文件系统(某种安装的ext3 / 4容器?)完全相同。我想这几乎和直接访问文件系统中的文件一样有效,这样就可以非常有效地复制到另一台服务器。

有关如何做到这一点的任何建议吗?或任何可行的替代方案(noSQL,......)?

最佳答案

快速访问和备份数百万个文件的选项

借用有类似问题的人

这听起来非常像USENET新闻服务器和缓存网络代理所面临的更容易的问题:数以亿计的随机访问的小文件。您可能希望从它们中获取提示(除非它们通常不必进行备份)。

http://devel.squid-cache.org/coss/coss -notes.txt

http://citeseer.ist.psu.edu/viewdoc/download;jsessionid=4074B50D266E72C69D6D35FEDCBBA83D?doi=10.1.1.31.4000&rep=rep1&type=pdf

显然,循环新闻文件系统的循环性质与您无关,但是具有包装图像的多个磁盘文件/设备的低级概念以及用户提供的用于查找位置信息的信息的快速索引非常非常合适。

专用文件系统

当然,这些只是人们在文件中创建文件系统并将其挂载在环回上时所讨论的概念,除非您编写自己的文件系统代码。当然,既然你说你的系统是大多数读取的,你实际上可以将磁盘分区(或lvm分区用于调整大小的灵活性)专用于此目的。如果要备份,请将文件系统挂载为只读,然后复制分区位。

LVM

我之前提到LVM对于允许动态调整分区大小非常有用,这样您就不需要备份大量空白空间。但是,当然,LVM还有其他可能非常适用的功能。特别是“快照”功能,可让您在某个时刻冻结文件系统。任何意外的rm -rf或任何不会干扰快照的内容。根据您的具体操作,这可能足以满足您的备份需求。

RAID-1

我确信您已经熟悉RAID并且可能已经将其用于可靠性,但RAID-1也可用于备份,至少如果您使用的是软件RAID(您可以将其与硬件RAID一起使用,但这实际上会降低可靠性,因为它可能需要相同的型号/版本控制器来读取)。这个概念是你创建一个RAID-1组,其中一个磁盘的数量超过实际需要连接的磁盘,以满足正常的可靠性需求(例如,如果使用带有两个磁盘的软件RAID-1,或者可能是一个大磁盘和一个硬件,则为第三个磁盘 - RAID5具有较小的磁盘,在硬件RAID-5之上具有软件RAID-1)。当需要备份时,安装磁盘,请mdadm将该磁盘添加到raid组,等待它指示完整性,可选择请求验证清理,然后删除磁盘。当然,根据性能特征,您可以在大多数情况下安装磁盘,只删除以与备用磁盘交换,或者只能在备份期间安装磁盘。


相关问答

添加新评论