在开发和运维工作中,经常需要在物理主机与虚拟机之间传输文件。无论是向虚拟机提供测试数据、安装包,还是将虚拟机内的代码、日志导出,一个高效便捷的文件传输方法至关重要。本文将详细介绍五种在 VMware 和 VirtualBox 环境中实现高效文件传输的实用方法,并给出选择建议,帮助您根据具体场景做出最佳决策。
一、共享文件夹(推荐用于频繁大量传输)
这是一种设置一次即可长期使用的方法,在虚拟机系统中会映射为一个固定的目录或驱动器,支持双向读写,非常适合项目开发或日常频繁的文件交换。
VMware 虚拟机设置步骤
- 关闭目标虚拟机,在VMware软件中右键点击该虚拟机,选择“设置”。
- 在设置窗口中,选择“选项”标签页,然后点击“共享文件夹”。
- 选择“总是启用”,并点击右侧的“添加...”按钮。
- 在弹出的向导中,浏览并选择主机上的文件夹路径,为其设置一个共享名称(例如
Share)。
- 建议勾选“自动挂载”和“在 Windows 客户机中映射为网络驱动器”(针对 Windows 虚拟机)。
- 启动虚拟机。访问方式如下:
- Windows 虚拟机:通过
\\vmware-host\Shared Folders\共享名 路径访问,或直接在网络位置中查看。
- Linux 虚拟机:文件通常位于
/mnt/hgfs/共享名 目录下(需要确保已安装 VMware Tools)。
VirtualBox 虚拟机设置步骤
- 关闭目标虚拟机,点击VirtualBox管理器的“设置”按钮。
- 在设置窗口中,选择“共享文件夹”选项卡。
- 点击右侧带“+”图标的按钮,添加新的共享文件夹。
- 选择主机文件夹路径,设置共享文件夹名称(例如
vbox_share),并建议勾选“自动挂载”和“固定分配”。
-
启动虚拟机。访问方式如下:
- Windows 虚拟机:通常可通过
\\vboxsvr\共享名 访问。
- Linux 虚拟机:需要手动挂载(首次使用时建议创建挂载点)。
# 创建挂载目录
sudo mkdir -p /media/sf_shared
# 挂载共享文件夹,将 `共享名` 替换为实际名称
sudo mount -t vboxsf 共享名 /media/sf_shared
优势:一次配置,永久生效;传输速度和稳定性好;适合需要持续同步的大量文件。
二、拖放功能(最便捷的临时传输方式)
如果你的虚拟机运行在带有图形界面的模式下,直接拖放文件无疑是最直观快捷的方式。
准备工作:安装增强工具
此功能依赖于虚拟机“增强工具”,需先在虚拟机系统内安装。
- VMware:点击虚拟机菜单栏的“虚拟机” -> “安装 VMware Tools”。
- VirtualBox:点击设备菜单栏的“设备” -> “安装增强功能...”。
以 Linux 虚拟机为例,安装命令通常如下:
# 对于VirtualBox(假设光盘已自动挂载)
sudo /media/*/VBoxLinuxAdditions.run
# 对于VMware(通常需要手动挂载并解压安装)
sudo mount /dev/cdrom /mnt
sudo tar -xzf /mnt/VMwareTools-*.tar.gz -C /tmp
cd /tmp/vmware-tools-distrib/
sudo ./vmware-install.pl -d # 使用默认配置安装
启用与使用
- VMware:虚拟机设置 -> 选项 -> 客户机隔离,勾选“启用拖放”。
- VirtualBox:虚拟机设置 -> 常规 -> 高级,将“拖放”选项设置为“双向”。
启用后,你可以直接从主机的文件管理器中将文件或文件夹拖拽到虚拟机的窗口中,反之亦然。
优势:操作极其简单直观,与在本地操作系统间复制文件体验一致,非常适合快速传递个别小文件。
三、USB设备共享(适合大容量文件传输)
当需要传输大型文件(如系统镜像、数据集)时,通过USB设备(U盘、移动硬盘)中转是速度最快的选择之一。
- 将USB存储设备插入物理主机。
- 在虚拟机软件菜单中将设备连接到虚拟机:
- VMware:点击“虚拟机” -> “可移除设备” -> 选择你的USB设备 -> “连接”。
- VirtualBox:点击“设备” -> “USB” -> 选择你的USB设备进行连接。
- 连接成功后,该USB设备将从主机断开,并挂载到虚拟机系统中。在Linux虚拟机中,通常可以在
/media/目录下找到;在Windows虚拟机中,会像本地插入U盘一样在资源管理器中显示。
优势:传输速度接近物理硬件极限,不依赖主机与虚拟机之间的虚拟网络配置,是传输数GB以上大文件的理想选择。
四、网络传输(适合远程或无图形界面管理)
如果虚拟机没有图形界面,或者你需要从远程位置管理虚拟机,基于网络协议的传输方式最为灵活。
1. SSH/SFTP(Linux虚拟机首选)
这是管理 Linux 服务器最经典、最安全的方式。确保虚拟机已开启SSH服务(通常已默认安装)。
在主机上,可以使用 scp 命令或 SFTP 客户端进行文件传输。
# 从主机上传文件到Linux虚拟机
scp /path/to/local/file username@虚拟机IP地址:/path/on/virtual/machine/
# 从Linux虚拟机下载文件到主机
scp username@虚拟机IP地址:/path/on/virtual/machine/file /path/to/local/
对于习惯图形化操作的用户,推荐使用 FileZilla、WinSCP 等 SFTP 客户端进行拖拽式传输。
2. Samba 共享(Windows虚拟机或跨平台)
如果主机是 Windows 系统,虚拟机也是 Windows,使用 SMB/CIFS 协议共享文件夹非常方便。在主机上设置共享文件夹后,在虚拟机内通过 \\主机IP地址\共享名 即可访问。对于 Linux 主机与 Windows 虚拟机之间的互访,也可通过在 Linux 上配置 Samba 服务实现。
# Linux虚拟机访问Windows主机共享文件夹 (示例)
sudo mkdir -p /mnt/winshare
sudo mount -t cifs //主机IP/共享名 /mnt/winshare -o username=主机用户名
3. FTP(通用方案)
在虚拟机内安装一个轻量级的 FTP 服务器(如 Linux 的 vsftpd,Windows 的 FileZilla Server),然后在主机使用任何 FTP 客户端(如 FileZilla Client)连接即可。这种方法配置稍复杂,但兼容性极广。
优势:不受特定虚拟机软件的限制,适用于任何能建立网络连接的场景,是进行 运维 和远程管理的必备技能。深入理解这些网络文件共享机制,也是构建复杂系统架构的基础。
五、其他实用方法
云存储同步
将文件上传至 OneDrive、Google Drive 或国内的各种云盘,然后在虚拟机内登录同一账户下载。这种方法适用于在多台设备(包括实体机和虚拟机)间同步配置文件或文档,但对网络环境有一定要求。
虚拟光驱/ISO镜像
将需要传输的文件集合制作成一个 ISO 镜像文件,然后在虚拟机设置中,将该 ISO 文件挂载为虚拟机的光驱。启动虚拟机后,即可像读取光盘一样访问里面的所有文件。这种方法适合分发软件安装包合集或一次性迁移大量零散文件。
总结与选择建议
- 频繁、大量文件传输(如开发项目):优先配置 共享文件夹,一劳永逸。
- 临时、少量文件传递:使用 拖放功能,最为快捷。
- 传输单个超大文件(如ISO镜像):通过 USB设备共享,速度最快。
- 管理无图形界面的服务器或远程操作:SSH/SFTP 是不二之选,这也是现代 云原生 和 DevOps 工作中的标准操作。
- Windows 环境间互传:Samba 共享 或 Windows 自带的远程桌面(RDP)文件传输功能很实用。
无论选择哪种方法,都强烈建议为虚拟机安装对应的“增强功能包”(VMware Tools / VirtualBox Guest Additions),它能显著提升包括文件传输在内的一系列虚拟机性能与集成体验。