在Linux和FreeDOS之间复制文件

239 阅读3分钟

我运行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 file manager

使用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 系统命令略有不同。