在 Mac 上,向 DOS 虚拟机复制文件

一般我们向虚拟机中复制文件,可以使用网络,使用插件提供的共享文件夹来完成, 但是如果虚拟机的系统年代比较久远,没有网络,VirtualBox 官方也没有插件支持的话, 我们依然有办法复制文件,今天我们来说明如何在 osx 下做到这一点

前言

最近使用 VirtualBox 安装了 FreeDOS 系统来回顾一些旧软件, 想要向新装的系统中复制文件时遇到了困难,因为 VirtualBox 的插件不支持旧的系统, 所以不能使用自带的共享文件夹功能来复制文件,不能使用插件的话, 比较容易想到的做法可能是通过网路来复制,可是也有问题,dos 时期可能分享文件是使用 ftp 协议,而不像现在多数使用 ssh,所以还需要搭建一台 ftp 服务器,我们都知道 ftp 服务器也很陈旧了,dos 下也是有 ssh 的工具可以使用,但是需要另外安装, 那么问题又来了,怎么把安装包复制到虚拟机呢,感觉这是一个循环。

后来想到,有几个办法可以解决这个问题:

  1. 把需要复制的文件制作成 iso 文件
  2. 准备一个优盘
  3. 使用虚拟磁盘
  4. 加载 vdi 文件到 OSX 系统

1 和 2 需要额外的工具,3 的话使用工具或在 windows 系统下会比较简单, 但其实如果采用 4,我们只需要一条命令行

步骤

  1. 打开终端并切换到虚拟机所在目录

    • 对于 OSX,VirtualBox 默认的虚拟机存放目录是 ~/VirtualBox VMs/
    • 虚拟机目录一般以虚拟机的名称命名
  2. 创建一个 img 链接,因为默认 hdiutil 不能识别 vdi 格式的虚拟磁盘

    ln -s srcfile.vdi dstfile.img
    
    • srcfile 为虚拟机的磁盘名
    • dstfile 为 hdiutil 后续要加载的文件名
  3. 确保虚拟机已关机的情况下,在终端输入以下命令来挂载 vdi 虚拟磁盘

    hdiutil attach -agent hdid -section 0x1000 dstfile.img
    
  4. 这时我们就可以在 finder 中查看和修改虚拟磁盘的内容了

    • 注意使用完成后推出虚拟磁盘,否则虚拟机无法打开
    • OSX 只能识别 FAT16/32 格式的虚拟磁盘, NTFS 无法使用
    • 创建 vdi 磁盘时需要选择固定大小的类型,否则可能无法向虚拟磁盘中复制大文件
    • 可以为虚拟机添加一块固定大小的 vdi 虚拟磁盘,然后使用该方法用来交换文件

总结

在加入正确位移的情况下,OSX 是可以挂载 vdi 磁盘文件的,这样一来, 我们就可以只借助系统工具和 VirtualBox,向无法安装扩展的虚拟机复制文件