如何为目录创建图像文件?

Tim*_*Tim 1 iso archive ext4 loop-device disk-image

如何为目录创建图像文件?例如:

  • 通过终端命令从文件夹创建 iso 映像显示genisoimage可以为目录创建 iso 映像文件。我只知道为磁盘卷创建了一个图像文件。是否genisoimage先为目录创建循环设备或块设备文件(类似于 CD/DVD),然后为循环设备或块设备文件创建映像文件?它是否与将图像文件挂载到需要首先为图像文件创建循环设备的目录的两步过程完全相反(类似于losetup命令)?

  • 是否有可以为目录创建 ext4 图像文件的命令?它也是一个两步过程吗?

还可以为目录创建存档文件。这两个过程有何不同?为目录创建图像文件是否涉及循环设备,而为目录创建存档文件则不涉及?

sou*_*edi 6

ext4 没有等效的工具。就像你说的,你可以使用循环设备来达到同样的效果——

  1. 创建一个具有足够空间来存储文件的空图像文件。——truncate -s 1G my.img
  2. 格式化它 - mkfs.ext4 my.img
  3. 将其安装为循环设备 - mount -oloop my.img /mnt
  4. 将文件复制到挂载的文件系统中。——cp -a directory/. /mnt/.
  5. 使用 将 ext4 文件系统缩小到其最小大小resize2fs -M my.img。它会告诉你文件系统有多少块长(以及文件系统块的大小)。
  6. 您现在可以使用适当的truncate命令将文件截断到较小的大小。

然而,Linux 内核没有 ISO9660 的可写实现,所以这不是如何genisoimage实现的。我们当然也没有适用于 ISO9660 的收缩工具:-)。

将 ISO9660 挂载为可写文件系统可能不太实用,因为它不是为它设计的。例如,它可能没有任何结构来有效地记录磁盘上的可用空间,或者允许将写入的文件分段以适应删除所留下的空间。


genisoimage确实类似于创建 TAR 或 ZIP 存档文件。文件系统映像将包含所有指定文件的副本。它将与所有指定文件大小的总和大致相同。不过,与这些存档格式有一些对比。文件系统数据结构与磁盘设备的扇区(2048 字节)对齐,以便高效读取单个文件。存档格式不与任何如此大的边界对齐。归档文件被打包以保持紧凑;另请注意,一次提取所有文件是很常见的。我希望存档格式也需要更多的努力才能找到一个单独的文件并阅读其内容。

我不会将其称为目录的图像。我想在词源上,它不是任何真正块设备的图像。但是,它与创建为数据 CDROM 副本的图像文件的格式相同。正如手册页所说 -

genisoimage 获取给定目录树的快照,并生成二进制映像,该映像在写入块设备时将对应于 ISO9660 和/或 HFS 文件系统。


专门为 CD-R(和 DVD-R)创建的技术部分是因为它是一种特殊情况。

写它们时你不能寻求。此外,CD-R 刻录程序自然希望得到连续的数据流。如果提供的数据不够快并且用完,则写入将失败并且光盘将无用——除了现在许多写入器有一种不规范的解决方法并且需要在光盘上写入一个小间隙。

对于操作系统来说,允许使用通用块设备接口写入此类磁盘不一定非常有用。我们当然不能在 CD-R 块设备上创建文件系统、挂载它并将文件复制到其中。相反,我们使用这种更专业的方法。

我们不告诉genisoimage将文件系统映像直接写入光盘设备,例如/dev/sr0wodim dev=/dev/sr0 -如果我们愿意,我们可以通过管道:-)。在古代,提前生成整个文件系统映像可能更安全,因为在读取单个大文件时可以获得更一致的性能。即读取太慢的可能性较小,因此写入器用完数据并失败的可能性较小。