在不超过 inode 或硬盘空间的情况下存储大量 jpeg 图像(Python)
Posted
技术标签:
【中文标题】在不超过 inode 或硬盘空间的情况下存储大量 jpeg 图像(Python)【英文标题】:Storing lots of jpeg images without exceeding inode or harddisk space (Python) 【发布时间】:2021-02-10 08:54:35 【问题描述】:我正在处理数百万个不同尺寸的小图像 (~100x100)。
如果我将它们以 jpg 格式存储在硬盘上,它们将超过我磁盘的 inode 限制。
如果我将它们存储为像 HDF5 这样的二进制文件,即使我应用压缩,它们也会占用 >100GB(h5py 的 gzip 无损压缩远不如 jpeg 的压缩那么紧凑)。
是否有任何标准方法可以将这些图像存储为具有 jpeg 压缩的单个文件,这样它就不会占用大量的 inode 或硬盘空间?我也想通过python轻松读取这些图像。
【问题讨论】:
"是否有任何标准方法可以将这些图像存储为单个文件并使用 jpeg 压缩..." 你能澄清一下吗?您正在寻求将“数百万个小”JPEG 文件填充到一个文件中?您能否详细说明这本身将如何节省存储空间,以及您打算如何将它们扩展为“通过 python 轻松读取这些图像”? 可能是数据库中的 Blob?需要的文件很少(可能只有一个),但会增加一些开销。 (Re: esqew):我无法将数百万张 jpg 文件放入我的硬盘,因为它的 inode 用完了。所以我尝试将它们存储为单个 hdf5 文件,但总文件大小变得非常大,因为我不知道 hdf5 格式的任何 jpeg 压缩过滤器。我正在尝试看看是否有一种解决方案可以两全其美:文件少且压缩率高(可能有损) (Re: jasonharper) 有这方面的教程吗?我做了一个快速的谷歌搜索,它似乎需要一些 mysql 知识 你的 inode 限制是多少?一百万听起来并不多。不要使用 (Re: name) 而是 @name,然后人们会收到通知。 【参考方案1】:Ext4 的每节点字节数
如果图像大部分大小相同,您可以选择最佳bytes per inode。您需要小于默认 16384 的值才能更好地匹配您的图像尺寸。
循环装置
如果无法重新格式化磁盘,您可以挂载“循环”设备:
dd if=/dev/zero of=./single-file bs=512 count=2M # 1G
mkfs.ext4 -i 1024 ./single-file # 1K per inode
mkdir /mnt/small-images/
mount ./single-file /mnt/small-images
mv 01.jpg /mnt/small-images/
【讨论】:
我在一个远程集群上,没有root权限。有没有办法使用这个循环设备? 集群可能安装了fuse
、udisks2
或libguestfs-tools
。然后你可以检查How to mount an image file without root permission?
不幸的是,这些都没有安装在集群上以上是关于在不超过 inode 或硬盘空间的情况下存储大量 jpeg 图像(Python)的主要内容,如果未能解决你的问题,请参考以下文章