如何在 Linux 中挂载 ISO 和其他图像文件类型?

已发表: 2018-09-06

是否曾经需要检查图像文件的内容? 也许你忘记了那个 Linux 发行版的版本。 仔细检查图像可能有很多原因,但是如何在不刻录图像的情况下做到这一点? 让我们找出来,不需要额外的软件。

每个精通技术的 Linux 用户都应该熟悉mount命令。 它是一般系统管理的一个非常重要的部分。 但是,许多人不知道mount命令实际上比乍一看更强大。

在 Linux 中挂载镜像文件

我们可以快速轻松地挂载,不仅是 ISO 映像,甚至是带有分区的磁盘映像。

很快,这里是一个挂载 ISO 文件的例子。

mount -o loop disk_image.iso /path/to/mount/dir

这里-o标志用于传递挂载选项,在这种情况下,我们告诉挂载我们要使用环回设备挂载映像。 环回设备是一个非常好的概念,用于帮助安装图像文件。 回送设备是充当中间人的软件伪设备,它允许系统将文件视为块设备,例如 CDROM 驱动器、硬盘驱动器等。这样做,我们在处理时具有更大的灵活性使用文件,例如执行文件系统功能(假设存在底层块设备)

这很酷,但谁甚至不再使用 ISO,对吧? 好吧, mount也可以做得更多。 如果您有一个硬盘驱动器的映像文件(从 dd 或类似的东西获得) ,我们称之为 hdd.img,那么您实际上也可以在其中安装文件系统。 如果您怀疑我们需要再次使用环回设备,那么您就在正确的轨道上。

但如果你试试这个……

mount -o loop hdd.img /path/to/mount/dir

你不会有太多的运气。

那是因为大多数磁盘都有分区表。 CD 和 DVD 通常没有分区表,因为它不适合它们的用例。 当mount开始挂载一个卷时,它期望遇到的是一个文件系统,而不是一个分区表。

但这并不意味着它不能完成。 为了挂载文件系统,我们必须告诉挂载它在映像文件中的位置,并将一条信息传递给挂载选项。 mount需要的信息就是分区的偏移量,也就是分区开始的镜像文件的字节数。 有多种方法可以解决这个问题,但fdisk会为您完成这项工作。

fdisk -l hdd.img

假设, fdisk告诉我们起始扇区是 100 (这纯粹是一个示例,在您的特定情况下这不太可能是正确的) 。 我们现在要做的是获取该扇区号并将其乘以从中获取映像的 HDD 的扇区大小,这(很可能)在旧驱动器上为 512 字节,在较新驱动器上可能为 4096 (4K) ,但是您应该在克隆驱动器时始终检查这一点(也许将其放入文件名中以更好地衡量) 。 扇区大小是每个扇区的字节数。

为简单起见,我们将使用 512 字节的扇区大小,这将为我们提供 51,200 的偏移量。 此偏移量是文件系统开始的映像中的字节数。 知道了这一点,我们就可以准确地告诉mount在哪里找到文件系统。

mount -o ro,loop,offset=51200 hdd.img /path/to/mount/dir

注意:我还在这个示例中添加了ro选项,以展示如何将文件系统安装为只读。 这在取证应用程序中特别有用,在这些应用程序中,您不能出于安全甚至法律问题而干扰数据完整性。 通常,将使用称为 write-blocker 的特殊适配器从磁盘创建映像文件,该适配器实际上会阻止所有写入命令并且只允许读取命令。

数学和所有方面的工作量相当大,但一定有更简单的方法,对吧? 这取决于您使用的 Linux 发行版的最新程度,但过去五年左右的任何东西都应该没有任何问题。

工具losttup用于设置环回设备。 您可能想知道为什么要手动设置环回设备,而mount会为您处理所有这些。 还记得 mount 因为那个烦人的分区表而不想挂载整个磁盘映像吗? 好吧,鉴于分区表包含有关分区所在位置的所有数学信息(fdisk 获取所有信息的位置) ,让系统引用它会容易得多。 我们可以简单地为整个磁盘映像创建一个环回设备,然后告诉系统扫描新创建的环回设备上的分区。

losttup -f hdd.img

注意:传递给losttup-f标志只是告诉它创建一个名称尚未使用的环回设备,例如/dev/loop1 if /dev/loop0 is already in use 。 或者,您可以传递一个设备名称,例如/dev/loop0 ,如果该设备不存在, losetup将创建它,如果存在,它将重新分配给新指定的图像文件。

如果命令成功,您将在/dev/下看到新创建的环回设备。 现在,您可以使用

partprobe /dev/loopback0

要么

kpartx -u /dev/loopback0

如果您分别安装了partprobekpartx 。 不过, parted应该安装在大多数现代 Linux 发行版上。

完成此操作后,您应该会在/dev/中看到类似/dev/loop0p1的内容。 这是您的分区,您可以轻松地安装它。

挂载 /dev/loop0p1 /path/to/mount/dir

您可能会注意到,不需要环回。 那是因为我们已经处理好了。

不过,我们可以通过在losttup中添加一个标志来使这更容易。

losttup -f -P hdd.img

我们使用的-P标志实际上告诉losttup让内核扫描分区表,因此我们可以跳过安装我们想要的分区。

使用上述,您可以挂载各种磁盘映像。 不管它们来自光学媒体、USB 密钥、MBR 分区还是 GPT。 Linux 内核可以处理许多不同的分区表和文件系统,您将很难找到它不支持的东西。

当然,可能有一些工具可以让这变得更容易,但其中的乐趣在哪里? 我已经在数据恢复和一般系统管理中使用了这些技术,并且像任何类型的知识一样,它在需要时非常有价值。

如果您有任何技巧可以补充这些技巧,请在下面的评论中告诉我们。

另请阅读: