如何实现主机与虚拟机之间的文件互传(7种实用方法详解)
目录导读
- 为什么主机与虚拟机互传文件如此重要?
- 【方法一】共享文件夹(最推荐)——以VirtualBox和VMware为例
- 【方法二】拖拽复制(最简单)——适用场景与限制
- 【方法三】网络共享(SMB/NFS)——跨平台通用方案
- 【方法四】FTP/SFTP服务器搭建——适合传输大文件
- 【方法五】第三方工具辅助(如FileZilla、WinSCP)
- 【方法六】U盘/ISO镜像挂载(物理介质法)
- 【方法七】剪贴板共享与远程桌面——文字互传技巧
- 常见问题问答(Q&A)
- 不同场景该选哪种方案?
为什么主机与虚拟机互传文件如此重要?
在日常开发、测试、运维或学习场景中,虚拟机(如VirtualBox、VMware、Hyper-V)与宿主机(Windows/macOS/Linux)之间的文件传输是高频需求,在Windows主机上编写代码,上传到Linux虚拟机中编译运行;或从虚拟机中导出的日志文件需要回传到主机分析,如果每次都用U盘拷贝,效率低下且易出错,掌握多种文件互传技术,能显著提升工作效率。

【方法一】共享文件夹(最推荐)——以VirtualBox和VMware为例
操作步骤(VirtualBox):
- 安装增强功能:虚拟机启动后,点击菜单栏“设备”→“安装增强功能”(Windows虚拟机需运行安装程序,Linux需挂载镜像并执行
./VBoxLinuxAdditions.run)。 - 设置共享文件夹:在VirtualBox主界面,选中虚拟机→“设置”→“共享文件夹”→“添加”,选择主机上的文件夹路径,勾选“自动挂载”和“固定分配”。
- 访问文件夹:Windows虚拟机会在“网络位置”中看到共享目录;Linux虚拟机通常挂载在
/media/sf_共享文件夹名(需将用户加入vboxsf组:sudo usermod -aG vboxsf $USER)。
VMware类似: 安装VMware Tools后,在“虚拟机”→“设置”→“共享文件夹”中开启并指定路径。
优势: 无需网络配置,实时同步,支持双向读写。
限制: 需安装虚拟机功能增强包,某些老旧系统可能不兼容。
【方法二】拖拽复制(最简单)——适用场景与限制
操作方式: 在主机与虚拟机的窗口之间,直接拖拽文件即可完成复制。
前提条件:
- VirtualBox或VMware需安装增强工具/VMware Tools。
- 部分Linux桌面环境(如GNOME、KDE)默认支持跨窗口拖放。
限制:
- 仅支持单个文件或小体积文件(大文件易卡死)。
- 部分Linux系统(如无GUI的服务器版)不支持。
- 拖拽时可能丢失文件权限或属性。
适用场景: 快速传输少量文本、截图或配置文件。
【方法三】网络共享(SMB/NFS)——跨平台通用方案
SMB(Windows主机 → Linux虚拟机):
- Windows上开启文件共享:右键文件夹→“属性”→“共享”→添加“Everyone”用户。
- Linux虚拟机挂载:
sudo mount -t cifs //主机IP/共享名 /mnt -o username=你的Windows用户名。 - 如果主机是Linux,虚拟机是Windows:在Linux上安装Samba服务(
sudo apt install samba),配置/etc/samba/smb.conf后重启服务。
NFS(Linux主机 → Linux虚拟机):
- 主机安装NFS服务:
sudo apt install nfs-kernel-server,编辑/etc/exports添加共享路径。 - 虚拟机挂载:
mount -t nfs 主机IP:/共享路径 /mnt。
优势: 不依赖Hypervisor,支持任意虚拟机软件。
注意: 需要主机和虚拟机网络互通(通常使用桥接模式或NAT模式+端口转发)。
【方法四】FTP/SFTP服务器搭建——适合传输大文件
方案A:虚拟机中搭建FTP服务器(如vsftpd)
- 安装:
sudo apt install vsftpd - 配置:确保
/etc/vsftpd.conf中anonymous_enable=NO,local_enable=YES。 - 从主机使用FileZilla连接:协议FTP,主机IP为虚拟机IP,端口21。
方案B:使用SFTP(基于SSH,更安全)
- 虚拟机开启SSH服务:
sudo systemctl start sshd - 主机使用命令:
scp 本地文件 用户名@虚拟机IP:/目标路径或直接使用WinSCP图形界面。
推荐: 优先选择SFTP,因为它加密传输,且无需额外搭建服务(只要SSH已开启)。
【方法五】第三方工具辅助(如FileZilla、WinSCP)
适用场景: 当主机和虚拟机间网络不通或不想命令行操作时。
工具推荐:
- FileZilla(FTP/SFTP客户端): 免费开源,支持拖拽传输。
- WinSCP(Windows专用): 支持SFTP/SCP,提供双面板浏览。
- Dukto(局域网文件快传): 无需配置,两端运行后自动发现。
注意: 需确保虚拟机网络可达主机(例如使用桥接模式获得独立IP,或通过NAT模式的端口映射)。
【方法六】U盘/ISO镜像挂载(物理介质法)
U盘直通(USB Passthrough):
- VirtualBox:点击“设备”→“USB”→选择你的U盘。
- VMware:菜单“虚拟机”→“可移动设备”→选择U盘。
ISO镜像挂载(当文件打包成ISO时):
- 主机使用UltraISO或
mkisofs制作ISO镜像。 - 虚拟机挂载ISO文件(从虚拟机光驱设置中加载)。
适用场景: 虚拟机没有网络,或需传输操作系统安装盘、大型软件包。
【方法七】剪贴板共享与远程桌面——文字互传技巧
剪贴板共享(文本/小数据)
- VirtualBox:需安装增强功能,在“设置”→“高级”中勾选“共享剪贴板”(双向)。
- VMware:VMware Tools安装后自动启用。
远程桌面(RDP/VNC)附带文件复制
- 主机使用
mstsc(Windows远程桌面)连接虚拟机,可以复制粘贴文件。 - 但需注意:RDP文件复制受带宽限制,不适合大文件。
常见问题问答(Q&A)
Q1:为什么我的共享文件夹挂载后为空或权限不足?
A:Linux虚拟机中,用户需属于vboxsf组(VirtualBox)或vmhgfs组(VMware),执行命令:sudo usermod -aG vboxsf $USER 后注销或重启。
Q2:拖拽文件时提示“操作失败”怎么办?
A:首先确认增强工具已安装;其次检查文件是否被主机占用(如已打开);如果文件超过2GB,建议改用共享文件夹或FTP方式。
Q3:主机和虚拟机网络不通,怎么互传?
A:使用U盘直通(USB passthrough)或共享文件夹;如果虚拟机支持无需网络的挂载方式(如VirtualBox共享文件夹),可免网络传输。
Q4:传输完成后文件属性(如执行权限)丢失,如何解决?
A:使用tar打包(tar czf file.tar.gz 源目录)再传输,解压时使用tar xzf file.tar.gz -C 目标目录可保留权限;或用rsync命令(rsync -avz 源 目标)。
Q5:在Windows主机与Linux虚拟机之间如何保持文件实时同步?
A:安装网盘客户端(如Nextcloud、Syncthing),或使用rsync定时同步,亦可用共享文件夹实时同步(VirtualBox增强功能)。
不同场景该选哪种方案?
| 使用场景 | 推荐方案 | 理由 |
|---|---|---|
| 日常开发、代码编辑 | 共享文件夹 | 无缝同步,支持双向编辑 |
| 快速传输小文件(<100MB) | 拖拽复制 或 剪贴板共享 | 最简单,无需额外配置 |
| 传输大文件(>1GB) | SFTP 或 SMB/CIFS网络共享 | 速度稳定,不受GUI影响 |
| 无网络环境 | U盘直通 或 ISO镜像挂载 | 绕过网络限制 |
| 跨平台(Win↔Linux) | SFTP(FileZilla/WinSCP) | 安全、通用、工具成熟 |
| 需要保留文件权限 | rsync + SSH 或 tar打包传输 | 完美保留元数据 |
最后建议: 如果你经常在虚拟机中工作,首选共享文件夹(性能最优);如果追求灵活性(如移动办公),则掌握SFTP和U盘直通两种方法,足以应对99%的传输需求,无论哪种方法,提前确保虚拟机软件的工具包或SSH服务处于正常运行状态,可以避免80%的传输问题。
如果你在使用过程中遇到具体报错,欢迎在评论区留言,我们会针对10种常见虚拟化软件逐一解答。