我运行Linux作为我的主要操作系统,我在虚拟机中启动FreeDOS。大多数时候,我使用QEMU作为我的PC模拟器,但有时我会用GNOME Boxes(它使用QEMU作为后端虚拟机)或用VirtualBox运行其他实验。
我喜欢玩经典的DOS游戏,有时我会调出一个最喜欢的DOS应用程序。我在管理信息系统(MIS)课上讲计算机的历史,有时我会用FreeDOS和一个传统的DOS应用程序录制一个演示,比如As-Easy-As(我最喜欢的DOS电子表格--曾经作为 "共享软件 "发布,但现在可以从TRIUS公司免费获得)。
但这样使用FreeDOS意味着我需要在我的FreeDOS虚拟机和我的Linux桌面系统之间传输文件。让我告诉你我是如何做到这一点的。
用guestmount访问镜像
我曾经通过计算第一个DOS分区的偏移量来访问我的虚拟磁盘镜像,然后用正确的选项组合调用Linuxmount 命令来匹配该偏移量。这总是很容易出错,而且不是很灵活。幸运的是,有一个更简单的方法可以做到这一点。来自libguestfs-tools软件包的guestmount 程序可以让你从Linux访问或_挂载_虚拟磁盘镜像。你可以在Fedora上用这个命令安装libguestfs-tools 。
$ yum install libguestfs-tools libguestfs
使用guestmount 不像从 GNOME 文件管理器中双击文件那么简单,但命令行的使用并不难。guestmount 的基本用法是。
$ guestmount -a image -m device mountpoint
在这个用法中,_image_是要使用的虚拟磁盘镜像。在我的系统上,我用qemu-img 命令创建了我的QEMU虚拟磁盘镜像。guestmount 程序可以读取这种磁盘镜像格式,以及GNOME Boxes使用的QCOW2镜像格式,或者VirtualBox使用的VDI镜像格式。
_设备_选项表示虚拟磁盘上的分区。想象一下,把这个虚拟磁盘当作一个真正的硬盘使用。你可以用/dev/sda1 访问第一个分区,用/dev/sda2 访问第二个分区,以此类推。这就是guestmount 的语法。默认情况下,FreeDOS 1.3 RC4在一个空的驱动器上创建了一个分区,所以访问该分区的方式是/dev/sda1 。
而_mountpoint_是在你的本地Linux系统上 "装载 "DOS文件系统的位置。我通常会创建一个临时目录来工作。你只需要在访问虚拟磁盘时使用这个挂载点。
把这些放在一起,我用这组命令从Linux上访问我的FreeDOS虚拟磁盘镜像。
$ mkdir /tmp/freedos
$ guestmount -a freedos.img -m /dev/sda1 /tmp/freedos
之后,我就可以通过/tmp/freedos 目录访问我的FreeDOS文件,使用Linux上的普通工具。我可能在命令行中使用ls /tmp/freedos ,或者使用桌面文件管理器打开/tmp/freedos 挂载点。
$ ls -l /tmp/freedos
total 216
drwxr-xr-x. 5 root root 8192 May 10 15:53 APPS
-rwxr-xr-x. 1 root root 85048 Apr 30 07:54 COMMAND.COM
-rwxr-xr-x. 1 root root 103 May 13 15:48 CONFIG.SYS
drwxr-xr-x. 5 root root 8192 May 15 16:52 DEVEL
drwxr-xr-x. 2 root root 8192 May 15 13:36 EDLIN
-rwxr-xr-x. 1 root root 1821 May 10 15:57 FDAUTO.BAT
-rwxr-xr-x. 1 root root 740 May 13 15:47 FDCONFIG.SYS
drwxr-xr-x. 10 root root 8192 May 10 15:49 FDOS
-rwxr-xr-x. 1 root root 46685 Apr 30 07:54 KERNEL.SYS
drwxr-xr-x. 2 root root 8192 May 10 15:57 SRC
-rwxr-xr-x. 1 root root 3190 May 16 08:34 SRC.ZIP
drwxr-xr-x. 3 root root 8192 May 11 18:33 TEMP

使用GNOME文件管理器访问虚拟磁盘
(Jim Hall,CC-BY SA 4.0)
例如,要从我的Linuxprojects 目录中复制几个C源文件到虚拟磁盘镜像上的C:\SRC ,以便我以后能在FreeDOS下使用这些文件,我可以使用Linuxcp 命令。
$ cp /home/jhall/projects/*.c /tmp/freedos/SRC
虚拟驱动器上的文件和目录在技术上是_不分大小写的_,所以你可以用大写或小写字母来指代它们。然而,我发现使用所有大写字母来输入DOS文件和目录更为自然。
$ ls /tmp/freedos
APPS CONFIG.SYS EDLIN FDCONFIG.SYS KERNEL.SYS SRC.ZIP
COMMAND.COM DEVEL FDAUTO.BAT FDOS SRC TEMP
$ ls /tmp/freedos/EDLIN
EDLIN.EXE MAKEFILE.OW
$ ls /tmp/freedos/edlin
EDLIN.EXE MAKEFILE.OW
用guestmount卸载
在你再次在虚拟机中使用虚拟磁盘镜像之前,你应该总是_卸载_它。如果你在运行QEMU或VirtualBox时让镜像挂起,你就有可能弄乱你的文件。
guestmount 的配套命令是guestunmount ,用于卸载磁盘镜像。只要给出你想卸载的挂载点即可。
$ guestunmount /tmp/freedos
注意,这个命令的拼写与Linux的umount 系统命令略有不同。