总结

总结

我想创建一个包含 Ubuntu 13.10 的 .img 文件。我知道如何获取 .iso,但我只在 Mac 下找到了如何将其“转换”为 .img 的说明(例如,这里)——但是,我在 Ubuntu 13.10 上工作。创建 .img 文件需要哪些步骤?

背景信息:我想使用 .img 在 Android 上使用 Complete Linux Installer 运行它。Complete Linux Installer 已经提供了 .img 文件(请参阅这里),但它们太小了。Ubuntu 仅“看到”.img 文件的大小,而这个文件太小了,无法发挥作用——这就是我想创建一个更大的 .img 文件的原因。使用resize2fs myImage.img 4G,我试图使图像变大,但从这样的图像运行的 Ubuntu 仍然认为 .img 很小,所以我希望通过立即创建更大的 .img,Ubuntu 可以“看到”更大的空间。我知道我在这里处于危险之中……

答案1

我会尝试一下,但你正在尝试从 iso 制作 img 文件,对吗?如果是这样的话,那么除了扩展名之外,iso 和 img 之间没有任何区别:

如果 IMG 文件未压缩,则 ISO 和 IMG 格式的结构没有区别。可以将 IMG 格式文件重命名为 ISO 文件扩展名,然后在仅识别 ISO 文件格式的软件中打开。这是在无法处理 IMG 格式的程序中访问光盘信息的有效方法。

来源

维基百科似乎也同意:

ISO 映像是另一种类型的光盘映像文件,通常使用 .iso 文件扩展名,但有时也使用 .img 文件扩展名。它们类似于原始光盘映像,但仅包含一个轨道,其中包含从光盘获取的计算机数据。它们不能包含多个轨道,也不能包含音频或视频轨道。它们也不包含原始光盘映像通常存储的 CD-ROM 或 DVD 扇区的控制标头和纠错字段。它们的内部格式遵循光盘文件系统的结构,通常是 ISO 9660(用于 CD)或 UDF(用于 DVD)。通常包含原始光盘映像的 CUE/BIN 和 CCD/IMG 格式也可以存储 ISO 映像。

那么,如何将 iso 转换为 img?只需更改扩展名:

rename 's/\.iso(?=[^.iso]*$)/.img/g' *

现在,要创建一个 img,您应该使用dd它并将其保存到名为 img 的文件中。

答案2

只需重命名文件即可。任何.iso文件都可以安全地重命名为具有.img扩展名的文件。

总结

ISO 与 IMG

原始磁盘映像是一个二进制文件,其中包含存储在存储设备上的二进制数据的逐扇区二进制副本。原始磁盘映像是源介质的完整快照,包括 MBR、GUID 或 Apple 分区表。

ISO 映像是原始磁盘映像,其中包含存储在光盘上的二进制数据的逐扇区副本。ISO 映像包含采用 ISO-9660 文件系统格式化的光学介质的二进制数据。

ISO 映像是原始磁盘映像的一个子集。ISO 映像(.iso扩展名)可以重命名为原始磁盘映像文件(.img扩展名),但除非磁盘映像包含 ISO-9660 格式的数据,否则反之则不成立。包含 ext4 格式数据的原始磁盘映像不是 ISO 映像。

不过,如果 ISO 映像包含 MBR 引导扇区或 ESP 引导分区,则通常会将其用作可引导介质。BIOS/UEFI 固件将能够执行引导加载程序代码并引导系统。

我下载了 Ubuntu 22.04 可启动 ISO 进行快速演示,探测文件类型显示:

root@ubuntu:~# file ./ubuntu-22.04-desktop-amd64.iso
ubuntu-22.04-desktop-amd64.iso: DOS/MBR boot sector; GRand Unified Bootloader, stage1 version 0x79, boot drive 0xbb, stage2 address 0x8e70, 1st sector stage2 0xb8db31c3, stage2 segment 0x201

ISO 映像使用 GPT(GUID 分区表)布局,其中包含保护性 MBR。保护性 MBR 包含第一阶段引导加载程序的引导代码,这只是一个很小的可执行代码,用于加载第二阶段引导加载程序(即 GRUB),该引导加载程序负责在传统 BIOS 引导过程中加载内核。

第二阶段的引导加载程序存储在 ESP(EFI 系统分区)中,具有符合 UEFI 标准的固件的较新的计算机可以通过探测磁盘来查找 ESP 来直接执行第二阶段的引导加载程序。

保护性 MBR 还包含一个分区表,该分区表定义了一个具有整个磁盘大小的单个存根分区。这可以防止不了解 GPT 布局的软件将磁盘视为空的。

探索图像的内容

为了探索图像的内容,我们可以将 ISO 图像附加到循环设备。

循环设备是一种块设备,它将其数据块映射到文件系统中的常规文件块或其他块设备,而不是物理存储设备。这对于为文件系统中存储的原始映像提供块设备非常有用。

您可以使用 列出循环设备ls -l /dev/loop*。特殊字符设备/dev/loop-control是循环设备的内核驱动程序。它用于动态查找要使用的空闲循环设备,以及从系统中添加和删除循环设备。

将 ISO 映像附加到可用的循环设备:

root@ubuntu:~# losetup -f --show -P ./ubuntu-22.04-desktop-amd64.iso
/dev/loop0

列出分区:

root@ubuntu:~# fdisk -l /dev/loop0
Disk /dev/loop0: 3.41 GiB, 3654957056 bytes, 7138588 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: A09DB2B8-B5F6-43AE-AFB3-91E0A90189A1

Device         Start     End Sectors  Size Type
/dev/loop0p1      64 7129427 7129364  3.4G Microsoft basic data
/dev/loop0p2 7129428 7137923    8496  4.2M EFI System
/dev/loop0p3 7137924 7138523     600  300K Microsoft basic data

挂载 ISO-9660 和 EFI 分区:

root@ubuntu:~# mkdir -p /mnt/{iso,esp}
root@ubuntu:~# mount -o ro /dev/loop0p1 /mnt/iso
root@ubuntu:~# mount /dev/loop0p2 /mnt/esp

注意:ISO-9660 是只读文件系统,因此必须使用该选项安装分区ro

您可以使用以下命令验证已安装的文件系统:

root@ubuntu:~# df -T /dev/loop0p{1,2}
Filesystem     Type    1K-blocks    Used Available Use% Mounted on
/dev/loop0p1   iso9660   3564682 3564682         0 100% /mnt/iso
/dev/loop0p2   vfat         4214    3222       992  77% /mnt/esp

要卸载分区并释放循环设备,请运行:

root@ubuntu:~# umount loop0p{1,2}
root@ubuntu:~# losetup -d /dev/loop0

答案3

免责声明:我不保证以下回答正确,但谷歌搜索为我找到了该问答,我希望我的回答将有助于解决类似的问题。

我找到了一个建议,将其转换isoimg从 USB 启动。我无法使用书面文件从 USB 启动下载 ISO。一段时间后,我发现了一条转换为 img 的建议:

geteltorito f1.iso > f1.img

我确实能够从写入img文件的 USB 启动。文件有所不同:

$ file 6muj31uc.iso
6muj31uc.iso: ISO 9660 CD-ROM filesystem data '6muj31us' (bootable)
$ file 6muj31uc.img  
6muj31uc.img: DOS/MBR boot sector; partition 1 : ID=0x4, active, start-CHS (0x0,1,1), end-CHS (0xe,63,32), startsector 32, 30688 sectors

启动映像听起来像img文件:

man geteltorito

geteltorito 是一个 Perl 脚本,它从 CD 中提取初始/默认的 El Torito 启动映像(如果存在)。

相关内容