因此我需要 .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 副本附带的文档,以获取与您正在使用的机器上安装的软件版本相关的说明。