如何预测ISO 9660文件系统的大小?
我正在将数据存档到DVD,我想要将DVD打包。我知道DVD上我想要的所有文件的名称和大小,但我不知道元数据占用了多少空间。我想在每张DVD上获得尽可能多的文件,所以我使用了一个带有贪婪的bin-packing的Bubblesearch启发式算法。我尝试了10,000种替代方案并获得最佳选择。目前我知道所有文件的大小,因为我不知道文件如何存储在ISO 9660文件系统中,我为元数据添加了大量的slop。我想减少污水。
我可以使用
genisoimage -print-size
,除非它太慢了 - 假设40,000个文件占用500MB,大约需要3秒钟。每张DVD需要8小时不在卡片中。我以前修改过genisoimage
源,我真的不想尝试从源代码中挤出算法;我希望有人知道更好的估算方法,或者可以指出一个有用的规范。
澄清问题和问题:
我需要刻录分成多张DVD的档案,通常一次大约五张。我试图解决的问题是决定在每张DVD上放置哪些文件,以便每张DVD(除了最后一张)尽可能完整。这个问题是NP难的。
我正在使用标准的贪婪打包算法,您首先放置最大的文件,然后将其放入第一张有足够空间的DVD中。所以j_random_hacker,我绝对不是从随机开始的。我从排序开始并使用Bubblesearch来扰乱文件的打包顺序。此程序将我的包装从估计容量的约80%提高到估计容量的99.5%以上。这个问题是关于更好地估计容量;目前我估计的容量低于实际容量。
我编写了一个尝试10,000次扰动的程序,每个程序包含两个步骤:
选择一组文件
估计这些文件在DVD上占用多少空间
第2步是我正在努力改进的步骤。正如Tyler D所暗示的那样,目前我正在“谨慎行事”。但我想做得更好。我不能使用genisomage -print-size
因为它太慢了。同样,我不能将文件tar到磁盘,因为它只是太慢了,但tar文件的大小与ISO 9660图像的大小不同。这是我需要预测的ISO 9660图像的大小。原则上这可以完全准确地完成,但我不知道该怎么做。这就是问题所在。
注意:这些文件位于具有3TB硬盘存储空间的计算机上。在所有情况下,文件的平均大小至少为10MB;有时它明显更大。所以有可能genisomage
毕竟会足够快,但我怀疑它 - 似乎通过将ISO映像写入/ dev / null来工作,我无法想象当图像大小足够快时接近4.7GB。我现在无法访问该计算机,或者当我发布原始问题时。当我确实在晚上访问时,我会尝试获得更好的数字。但我不认为genisomage
会成为一个很好的解决方案 - 尽管它可能是学习文件系统模型的好方法
告诉我它是如何工作的。知道块大小为2KB已经很有帮助。
知道同一目录中的文件被刻录到samae DVD也很有用,这简化了搜索。我希望直接访问这些文件,这会排除tar-before-burning。 (大多数文件都是音频或视频,这意味着尝试使用gzip
来点击它们没有意义。)
没有找到相关结果
已邀请:
5 个回复
呕蹿尉
。然后在该数据集上拟合方程nx + y = iso_size - total_input_size,其中n =给定运行中的文件数,以找到x,即每个文件的开销字节数,以及y,即常量的开销(不包含文件的ISO 9660文件系统的大小)。舍入x和y并使用该公式来估计给定文件集的ISO文件系统大小。为安全起见,请确保使用集合中任何位置出现的最长文件名作为测试文件名,并将每个文件名放在与集合中最深层次结构一样深的单独目录层次结构中。
购藏盗码韦
碉罕城爸
青董据零
count是文件数 file_size是每个文件的大小(以字节为单位) 结果是2048字节块。 示例脚本:
我在具有高达150k文件的磁盘上验证了这一点,大小范围从200字节到1 MiB。
缮淳彼誊
,并且非常接近4700000000。 我查看了ECMA规范,但是像大多数规格一样,它是中等痛苦的,我对自己的能力没有信心。此外它似乎不讨论Rock Ridge扩展,或者如果它,我错过了它。 我喜欢你的想法#3并认为我会更进一步:我将尝试构建一个相当丰富的模型,然后在许多文件集上使用
来估计模型的参数。然后我可以使用该模型进行估算。这是一个爱好项目,所以需要一段时间,但我最终会解决它。我会在这里发一个答案,说明消耗了多少浪费!