问题标签 [iso9660]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
filesystems - 如何预测 ISO 9660 文件系统的大小?
我正在将数据存档到 DVD,并且我想将 DVD 打包完整。我知道 DVD 上所有我想要的文件的名称和大小,但我不知道元数据占用了多少空间。我想在每张 DVD 上获取尽可能多的文件,所以我使用了带有贪婪装箱的 Bubblesearch 启发式算法。我尝试了 10,000 种替代方法,并获得了最好的一种。目前我知道所有文件的大小,因为我不知道文件是如何存储在 ISO 9660 文件系统中的,所以我为元数据添加了很多内容。我想减少污水。
我可以使用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
。)
c++ - 用于从通用磁盘格式设备或文件中读取的 C/C++ 库
是否有任何好的免费 C/C++ 库可以从具有 UDF 和 ISO9660 等文件系统的通用设备中读取并提取文件/元数据等?
到目前为止,我能找到的只有GNUs libcdio,它很有前途,还有一些“Magic UDF”,它有如此多的点击量,我很反感,在 Google 中推出了其他结果,并且带有一个非常极端的价格标签。
跨平台支持是可取的(当然是个人喜好),Windows 兼容性是一个不幸的要求。许可证限制越少越好,我还没有调查 libcdio 的 GPLv3 许可证的兼容性如何。
请注意,这个问题仍然悬而未决,如果有人找到这样的图书馆,我会接受另一个答案。
c - 如何使用 C 在 Linux 上将内存数据写入 DVD?
我有 MP4 格式的数据,需要在 Linux 平台上复制到 DVD。现在我在硬盘上创建 MP4 文件,然后使用 growisofs 命令将该文件刻录到 DVD。如果我不必在将 MP4 数据刻录到 DVD 之前将它们写入硬盘,效率会更高。请让我知道是否有办法使用 C 程序将内存数据写入 DVD。
bootloader - 可引导 cd 的第一个执行字节在哪里?
我查看了小型 Linux 发行版的 iso 映像 (ISO 9660)。我找到了 16 个空扇区,然后是一个描述主卷描述的扇区。下一个扇区通常是一个引导记录,仅包含描述性信息,例如系统和版本标识符以及未指定字节范围内的小端整数。然后是补充卷描述符,最后是卷描述符集终止符。
我只猜它是引导记录中的一个小端整数。我没有找到更多关于此的信息。在我使用的所有图像中,小端整数小于主卷描述符中扇区计数的值,所以我进一步猜测它指向图像内的一个扇区。有人可以提供有关此的更详细信息吗?
standards - ECMA-119 规范中提到的 ISO 2375 和 2735 标准是什么?
超出 ECMA-119 规范:
8.5 补充卷描述符
...
8.5.3 交易量标志 (BP 8):
该字段的位应从最低有效位开始编号为 0 到 7。该字段应指定卷的某些特征,如下所示。
位 0:
如果设置为零,则意味着转义序列字段仅指定根据 ISO 2735注册的转义序列;
如果设置为 ONE,则意味着 Escape Sequences 字段指定了至少一个未根据 ISO 2375注册的转义序列。
在 iso.org 我找到了 ISO- 2735标准:
密封金属食品容器 圆形开顶和通气孔牛奶罐的容量和直径
以及 ISO 2375标准:
数据处理——转义序列的注册程序
有人可以确认“ISO 2735”是打字错误,意思是“ISO 2375”吗?是否有等同于 ISO 2375 的 ECMA 标准?
c - 在 C 中创建非常慢的磁盘映像(iso 9660)
作为一个有趣的项目,我想我会编写一个程序来制作 iso 文件。据我所知,它可以工作,但它每 30 秒只能读取 4KB。我使用弹出 -x 11 将我的 cdrom 驱动器减慢到合理的速度。没有它,驱动器将全速运行并很快终止该过程。任何使这更快/更好的建议将不胜感激。
delphi - 如何在 ISO 映像中添加和删除文件?
是否有任何(最好是免费的)处理 ISO 文件的组件或库?
特别是我希望能够添加文件并保存到 ISO,以及从 ISO 中提取文件。
我不需要高级功能或花里胡哨,只需要做我上面提到的事情。
我试图找到一些,但真的什么也没找到。
也许这可以在不需要这样一个库的情况下完成?如果是这样,你会推荐什么方法?
c# - C# 中的 DVD ISO - .NET DiscUtils 替代品
根据 C# 的文件夹结构制作.ISO 文件的最佳方法是什么?除了DiscUtils之外,还有其他开源库吗?遇到 DiscUtils的问题,我想尝试另一条路径。我有哪些选择?我更喜欢开源,但也可能愿意为解决方案付费。
assembly - 在 ISO 9660 文件系统上加载文件
我刚刚读完这篇关于在 ISO 9660 文件系统上读取文件的文章,我对如何将文件读入内存感到困惑。我知道根目录位于 PVD 的偏移量 156,我将如何使用它来查找位于根目录中的文件,一旦找到文件名,我将如何找到该文件所在的地址,这样我就可以将它加载到内存中(使用 int 0x13 AH=42)?
maven - 为 Maven Assembly 插件创建一个新的格式选项
Maven Assembly 插件允许在程序集描述符中指定不同的格式。我怎样才能开发一种新格式以便支持它?
我想创建一个 ISO 映像,而不是它已经支持的 zip、jar 或 tar 文件。我找到了一个可以创建 ISO 映像的插件(https://github.com/stephenc/java-iso-tools),但不是作为程序集插件的一部分,所以很乐意使用它,或者甚至扩展该插件。
我基本上希望能够在我的程序集描述符中执行以下操作:
我还希望它能够在创建的存档中删除额外的间接级别,这样当我声明一个文件应该位于存档的根目录时,它确实是。如果它是 tar 文件,这将是一个 tar 炸弹,但对于 ISO 映像来说将是一个有用的功能。