在Linux虚拟机与宿主机之间传输文件,根据网络环境、数据量和操作习惯,主要分为网络协议传输、虚拟化工具共享和特殊场景挂载三大类。以下是专业且实用的解决方案:

一、基于SSH协议的命令行工具(最通用、最专业)
这是Linux环境下最标准、最常用的方法,前提是虚拟机内已安装并启动SSH服务(如 openssh-server),宿主机与虚拟机网络互通。
1. SCP(Secure Copy)命令
适合单文件或小批量文件的快速传输。
从宿主机上传文件到虚拟机:
scp /path/local/file.txt user@虚拟机IP:/path/remote/
从虚拟机下载文件到宿主机:
scp user@虚拟机IP:/path/remote/file.txt /path/local/
递归传输整个目录:
scp -r /path/local/dir user@虚拟机IP:/path/remote/
若SSH端口非默认22,使用 -P 参数指定端口(例如 -P 2222)。
2. SFTP(SSH File Transfer Protocol)
适合交互式批量管理,支持断点续传和目录浏览。
在宿主机终端执行:
sftp user@虚拟机IP
连接后使用 put(上传)、get(下载)、put -r(递归上传目录)等命令。
3. RSYNC(增量同步工具)
适合大文件、海量文件或需要增量备份的场景,只传输差异数据,效率极高。
同步宿主机目录到虚拟机:
rsync -avz /path/local/dir/ user@虚拟机IP:/path/remote/dir/
反向同步(虚拟机到宿主机):
rsync -avz user@虚拟机IP:/path/remote/dir/ /path/local/dir/
参数 -a 归档模式(保留权限、时间戳),-v 显示详细过程,-z 传输时压缩。
二、SSHFS(SSH文件系统挂载)
若需要像操作本地目录一样频繁读写虚拟机文件,可将虚拟机远程目录直接挂载到宿主机本地目录。
宿主机安装 sshfs 后,执行:
sshfs user@虚拟机IP:/remote/path /local/mountpoint
操作完成后使用 fusermount -u /local/mountpoint 卸载。
三、虚拟机厂商提供的“共享文件夹”(图形化操作最便捷)
适用于VMware、VirtualBox等桌面级虚拟机软件,无需网络配置,直接通过宿主机目录共享。
1. VMware Workstation / Fusion
设置 → 共享文件夹 → 添加宿主机目录,并启用“共享”和“始终启用”。虚拟机内需安装 VMware Tools,然后挂载:
vmhgfs-fuse .host:/共享文件夹名 /mnt/hgfs -o allow_other
或直接访问默认挂载点 /mnt/hgfs。
2. VirtualBox
设备 → 共享文件夹 → 添加宿主机目录。虚拟机内需安装 Guest Additions,然后执行挂载命令:
mount -t vboxsf 共享文件夹名 /mnt/shared
四、KVM/QEMU虚拟机的VIRTIOFS(高性能直通)
针对KVM/QEMU环境,使用 virtiofs 可获得接近本地的文件传输性能。
宿主机配置共享目录,虚拟机内挂载:
mount -t virtiofs share_tag /mnt/shared
五、网络文件系统(NFS/SMB)
适用于多台虚拟机共享同一存储,或跨平台传输(Windows宿主机与Linux虚拟机)。
NFS场景:虚拟机内执行 mount -t nfs 宿主机IP:/exported/dir /mnt/nfs
SMB场景:虚拟机内执行 mount -t cifs //宿主机IP/share /mnt/smb -o username=user,password=pass
六、临时介质传输(U盘/ISO镜像)
若网络完全隔离,可将文件制作为ISO镜像(genisoimage 或 mkisofs),通过虚拟机光驱挂载;或使用虚拟U盘设备直通。
总结建议:日常少量文件优先使用SCP;大量文件或增量同步首选RSYNC;需要连续读写操作选择SSHFS或共享文件夹;企业级KVM环境推荐VIRTIOFS。无论选择哪种方式,务必确保虚拟机已配置正确的网络(NAT、桥接或Host-Only)且防火墙允许相应端口。

查看详情

查看详情