RAW 磁盘映像和 .Img 格式,有何区别?

RAW 磁盘映像和 .Img 格式,有何区别?

因此我需要 .img 文件来与 xen 虚拟机管理程序一起使用。目前,我有一个当前安装的 vmdk 磁盘映像。qemu 似乎可以从 vmdk 转换为原始磁盘映像,据我所知,.img 文件也是一种原始磁盘映像格式。我的问题是 qemu 转换的输出(顺便说一下,扩展名为 .raw)是否与 .img 文件相同,我可以直接重命名它吗?或者两者之间有什么区别?

如果不同,我该如何将 vmdk 转换为 img?

答案1

不幸的是,仅从文件扩展名你无法完全确定。

首先,文件扩展名可以重命名。例如,很多情况下,JPG 文件被重命名为 PNG 文件(反之亦然),这可能是因为用户在使用图形编辑器时,误以为他们保存的是某种格式,而实际上他们保存的是另一种格式。在某些情况下,这其实并不重要。例如,如果 Web 浏览器使用“图形处理”指令尝试处理 PNG 文件,而“图形处理”库查看图形并确定它是 JPG 文件,则最终结果可能是一切都顺利完成。

早在 MS-DOS 时代,我发现 .IMG 文件扩展名最常用于“原始”磁盘映像。但是,偶尔也有一些软件使用其他格式,它们称之为“映像”。.IMG 最常见的是“原始磁盘映像”,但事实并非绝对。例外情况相当罕见,但偶尔确实存在。通常,我认为例外最常见的是软盘映像,或完全不相关的文件格式(例如,可能是某种图形的“原始”数据)。对于较大的文件,例如包含数十兆字节(或更多)的文件,我倾向于认为这可能是分区或整个“硬盘”(或其他“长期存储”;例如 SSD)的映像。

为了避免混淆,我个人更喜欢使用“.raw”的文件扩展名。多年来,我几乎从未见过“.raw”指代原始磁盘映像以外的任何内容,而“.img”(或“.ima”)偶尔是其他一些定制格式使用的扩展名。

举一个更现代的例子,Usenet 帖子有一些指令将以 QCOW2 格式输出数据并使用文件名“virtual.img”。我有一种预感,这样的文档甚至可能包含在某些操作系统的 Qemu 软件包文档中。随着 Qemu 的更新版本,情况有所改善,其中的文档现在更倾向于指定 .qcow2,但我记得在使用旧版本的 Qemu 时,我认为文档并没有真正为 QCOW2 格式指定默认文件扩展名。(作为一个喜欢使用“.htm”、“.jpg”和“.mid”的人,喜欢将扩展名保持简短,我通常自己使用“.qc2”。)

当我遇到“.img”文件时,我会认为它“可能是磁盘映像,最有可能是原始映像,但比使用 .raw 扩展名时更不确定”。当我知道数据是什么格式时,我倾向于避免分配“.img”扩展名,这样就不会产生歧义。

如果文件确实是原始映像文件,则可以成功重命名。不幸的是,没有真正简单的方法让软件测试 .raw 格式。根据定义,.raw 格式没有任何额外的字节作为描述文件其余部分的“元数据”。文件格式有规则,基本上“原始磁盘映像”格式的一个“规则”是,除了如果将映像写入物理磁盘,磁盘上实际存在的字节外,没有其他字节。任何偏离该规则的行为都意味着该文件不仅仅是一个“原始”磁盘映像。我想有些软件可以分析 MBR 并查看那里的数据是否有意义,但我对这样的过程不太有信心,因为仍然觉得误检的可能性太大。实际上,阅读指定文件使用哪种格式的文档会更有信心。

至于您的最后一个问题:“如果不同,我该如何将 vmdk 转换为 img?”

使用 qemu-img 应该可以正常工作。请确保指定“ -O raw ”。我没有包含示例命令行,因为不同版本的 qemu-img 在命令行的不同位置需要“-O specifiedFormat”命令行选项。如果您将“ -O raw ”放在错误的位置,结果将是一条错误消息(而不是创建的文件),因此您会立即知道。您可以查看 qemu-img 副本附带的文档,以获取与您正在使用的机器上安装的软件版本相关的说明。

答案2

我认为 .img 并不是真正的格式,就像 .raw 并不是真正的格式一样。它可能是一串二进制文本。将图像从 .raw 重命名为 .img 不会有什么坏处。但为了安全起见,我可能会先备份。如果是原始图像,它可能会很大,所以我会在尝试任何事情之前先对磁盘映像进行压缩存档。7-zip在 Windows 上运行良好,xz并且xz-实用程序在 linux/unix 上运行良好。

相关内容