我正在做一个档案项目,目前我在 4TB NAS 驱动器上存储了 514600 张图像(大小从 200kb 到 2mb 不等)。驱动器本身的格式为 ext4,我通过 cifs/smb 在网络上写入文件。
存储如此大量的文件会有什么影响吗?文件系统会不会成为碎片的牺牲品?
答案1
当磁盘上已有的文件发生更改,使其变得比以前大,并且没有比您的文件更小的文件时,就会发生碎片化簇的大小最终会变得碎片化。为了正确回答您的问题,我们需要知道您的簇大小、驱动器的使用百分比以及在初始分配磁盘空间后文件是否发生了更改。
由于所有文件系统的开销(以及扫描/查找时间),对许多小文件进行的 IO 操作与对少数大文件进行的 IO 操作相比要慢得多,因此如果您考虑到性能下降,那么是的。这实际上更多地取决于您是一次访问其中的 5000 个,还是一次只访问几个。
尤其是 Ext4,不需要碎片整理由于 Windows 文件系统为文件分配空间的方式相同,因此只要您的分区没有达到 90%,我就不用担心这一点。
答案2
存储如此大量的文件有什么影响吗?
我要补充一点,您应该注意文件系统可以处理的最大文件数。文件(在您使用的 ext4 上)会消耗 inode。创建文件系统时会静态分配 inode 表,增加它的唯一方法是重新创建文件系统。
df -i
您可以使用或检查当前 inode 的使用/空闲数量tune2fs -l /path/to/device
仅当存储非常小的文件时,默认值才会成为问题。
答案3
访问速度明显下降。这是 Java 项目中常见的问题,因为有大量相对较小的文件。将它们存储在一个存档中效率更高,尽管必须解压它们,但访问速度更快。
就您而言,您的文件并不小,因此可能不会出现碎片问题。
你正在从事一个档案项目,因此你应该使用 ZIP 或压缩/GZIP。如果您的文件已经打包,您可以只使用 TAR 将它们粘贴到一个更大的文件中。找到一些合理的“打包单位” - 这样您以后就可以轻松找到所有文件。