ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Windows与Linux虚拟机文件传输全方案:共享文件夹、SSH、剪贴板与rsync实战

Windows与Linux虚拟机文件传输全方案:共享文件夹、SSH、剪贴板与rsync实战 简介本资源是一份面向Linux系统开发初学者与教学实践者的专业指导文档聚焦物理机Windows与虚拟机Linux间高效、稳定文件交换的实操方案。针对VMware环境下Linux虚拟机与宿主机协同开发、实验教学及日常调试中的跨平台数据互通痛点系统梳理了添加物理盘挂载FAT分区、部署Samba共享服务、配置FTP服务器三大主流方法并涵盖网络参数设置、文件系统识别、挂载命令实操等关键细节。资源为单文件PDF文档235KB内容源自《电脑与信息技术》期刊论文结构清晰含原理说明、分步操作示例及命令行截图适合作为课堂补充材料或自学参考。目前已有399人学习下载读者可直接获取完整配置流程、常见问题排查要点及多路径对比建议快速掌握跨平台文件交换的核心技能。1. 物理机 Windows 与虚拟机 Linux 之间传文件不是“拖进去就完事”而是得选对通道、配对权限、绕过黑匣子你刚在 VMware 或 VirtualBox 里装好 Ubuntu/Debian/CentOS想把 Windows 桌面上的 Python 脚本、训练数据集或配置文件丢进虚拟机跑起来——结果双击共享文件夹报错“Permission denied”用scp却卡在“Connection refused”复制粘贴又提示“剪贴板服务未启用”。这不是你手残是 Windows 和 Linux 在底层文件系统、用户权限、服务状态三道关卡上根本没对上频。物理机 Windows 是 NTFS UAC Windows Defender 主导的封闭生态虚拟机 Linux 是 ext4 root/sudo systemd 管控的权限敏感环境二者之间没有默认打通的“高速公路”只有几条可选的专用通道共享文件夹需 Guest Additions / VMware Tools、SSH/SFTP需手动启服务、剪贴板同步依赖图形界面服务、以及最原始但最可控的scp/rsync命令行管道。本文不讲“哪个软件好用”只拆解这四条通路的真实落地条件、最小启动命令、权限映射逻辑和三个必踩的玄学坑——比如为什么你明明勾了“启用拖放”却在 Ubuntu 22.04 里死活看不到 Windows 文件为什么sftp userlocalhost在 WSL2 里能通在 VirtualBox 里却连不上为什么cp /mnt/hgfs/xxx /home/user/总提示“Operation not supported”。适合正在调试开发环境、部署模型、做嵌入式交叉编译的工程师也适合被“复制粘贴失效”折磨到重启虚拟机三次的新手。2. 共享文件夹VMware/VirtualBox 官方方案但必须亲手装驱动、挂载、改权限共享文件夹是 VMware Workstation / Player 和 VirtualBox 提供的原生机制原理是在宿主 Windows 上创建一个“网络共享路径”再通过 Guest AdditionsVirtualBox或 VMware ToolsVMware在 Linux 侧挂载为本地目录。它不走网络协议栈延迟低、吞吐高适合传大文件1GB 数据集、镜像包但前提是 Guest Additions / VMware Tools 必须成功安装且服务运行——这是 80% 失败案例的根源。2.1 安装 Guest AdditionsVirtualBox或 VMware ToolsVMware提示不要跳过重启很多问题源于内核模块未加载。VirtualBox 的 Guest Additions 是 ISO 镜像VMware Tools 是.bundle安装包二者都需在 Linux 终端中执行编译安装而非 Windows 双击运行。VirtualBox 下安装 Guest Additions以 Ubuntu 22.04 为例# 1. 确保已安装构建工具否则编译失败 sudo apt update sudo apt install -y build-essential dkms linux-headers-$(uname -r) # 2. 在 VirtualBox 菜单中点击 Devices → Insert Guest Additions CD image... # 此时会自动挂载 ISO 到 /media/cdrom若未自动挂载手动执行sudo mount /dev/sr0 /media/cdrom # 3. 运行安装脚本关键必须用 sudo且路径不能错 sudo sh /media/cdrom/VBoxLinuxAdditions.run # 4. 重启虚拟机强制否则 vboxsf 模块不加载 sudo rebootVMware 下安装 VMware Tools以 CentOS 7 为例# 1. 更新系统并安装依赖 sudo yum update -y sudo yum install -y kernel-devel kernel-headers gcc make perl # 2. 在 VMware 菜单中点击 VM → Install VMware Tools # 挂载后进入 /mnt/cdrom或 /run/media/xxx/VMware\ Tools/ cd /mnt/cdrom # 3. 解压并安装注意CentOS 7 默认无 /tmp/vmware-tools-distrib需指定路径 sudo tar -xzf VMwareTools-*.tar.gz -C /tmp/ cd /tmp/vmware-tools-distrib/ sudo ./vmware-install.pl -d # -d 表示全部默认选项避免交互卡住 # 4. 重启 sudo reboot逻辑说明与参数说明dkmsDynamic Kernel Module Support是核心它确保 Guest Additions 编译的内核模块能在系统升级后自动重建否则下次apt upgrade后共享文件夹直接消失linux-headers-$(uname -r)必须与当前运行内核版本严格一致uname -r输出如5.15.0-107-generic缺一不可./vmware-install.pl -d中-d是“default”模式跳过所有交互提问适合自动化部署若省略脚本会在“是否启用 X11 集成”等环节卡住导致安装中断。2.2 创建并挂载共享文件夹Windows 宿主侧 Linux 客户机侧Windows 侧VirtualBox 示例打开 VirtualBox Manager → 选中目标虚拟机 → Settings → Shared Folders → 点击右侧“”图标 →Folder Path选择 Windows 上的文件夹例如D:\vm_share不要选 C:\Users\xxx\DocumentsUAC 可能拦截访问Folder Name填一个无空格、无中文的名称例如winshare此名将用于 Linux 挂载点Auto-mount✅ 勾选让系统开机自动挂载Make Permanent✅ 勾选否则重启后配置丢失Linux 侧挂载命令必须在重启 Guest Additions 后执行# 1. 创建挂载点路径可自定义但建议统一 sudo mkdir -p /mnt/winshare # 2. 手动挂载验证是否生效 sudo mount -t vboxsf winshare /mnt/winshare # 3. 设置开机自动挂载写入 /etc/fstab echo winshare /mnt/winshare vboxsf defaults,uid1000,gid1000,dmode0755,fmode0644 0 0 | sudo tee -a /etc/fstab # 4. 测试读写在 /mnt/winshare 下创建文件看 Windows 是否可见 touch /mnt/winshare/test_from_linux.txt ls -l /mnt/winshare/参数说明vboxsf是 VirtualBox 共享文件系统的类型VMware 对应为vmhgfsuid1000,gid1000将挂载目录的所有者设为普通用户Ubuntu 默认用户 UID/GID 为 1000避免Permission denieddmode0755控制目录权限rwxr-xr-xfmode0644控制文件权限rw-r--r--这是解决“Linux 写入 Windows 不可见”或“Windows 写入 Linux 无法执行”的关键若不加uid/gid文件默认属主为root:root普通用户无法写入若fmode过严如0600Windows 侧可能无法读取。3. SSH/SFTP不依赖虚拟机工具纯 TCP 协议适合无 GUI 或服务器场景当你的虚拟机是 minimal 安装无桌面、或你正在调试 headless 服务如 Docker、Nginx、Python API共享文件夹因缺少 X11 服务而失效此时 SSH/SFTP 是最稳定、最通用的备选方案。它不依赖 Guest Additions只要 Linux 能联网桥接/NAT 模式均可且sshd服务开启就能从 Windows 用scp、WinSCP或FileZilla直连传输。但很多人卡在“连不上”——其实只是sshd没开、防火墙挡路、或端口被占。3.1 启动并加固 Linux 侧 SSH 服务Ubuntu/CentOS 通用# Ubuntu/Debian sudo apt update sudo apt install -y openssh-server sudo systemctl enable ssh sudo systemctl start ssh # CentOS/RHEL sudo yum install -y openssh-server sudo systemctl enable sshd sudo systemctl start sshd验证服务状态sudo systemctl status ssh # Ubuntu 应显示 active (running) sudo ss -tlnp | grep :22 # 确认监听 0.0.0.0:22而非 127.0.0.1:22后者仅本地可连注意sshd默认绑定0.0.0.0:22但某些云镜像或安全加固模板会改为127.0.0.1:22导致外部无法连接。需检查/etc/ssh/sshd_config中ListenAddress行注释掉或改为0.0.0.0然后sudo systemctl restart ssh。3.2 Windows 侧使用 scp 命令行直传无需第三方软件Windows 10/11 自带 OpenSSH 客户端默认关闭启用后即可用scp# PowerShell 中启用 OpenSSH 客户端管理员权限运行 Add-WindowsCapability -Online -Name OpenSSH.Client~~~~0.0.1.0 # 传文件到 Linux假设虚拟机 IP 是 192.168.56.101用户名 ubuntu scp C:\data\config.yaml ubuntu192.168.56.101:/home/ubuntu/project/ # 从 Linux 下载文件到 Windows scp ubuntu192.168.56.101:/home/ubuntu/logs/app.log C:\temp\ # 传整个文件夹-r 参数 scp -r C:\models\ ubuntu192.168.56.101:/home/ubuntu/IP 获取方法Linux 终端执行ip a | grep inet | grep -v 127.0.0.1 | awk {print $2} | cut -d/ -f1 # 输出类似192.168.56.101VirtualBox Host-only 网络或 10.0.2.15NAT 网络需端口转发NAT 网络下 Windows 连虚拟机的特殊处理VirtualBox 默认 NAT 模式下Linux 虚拟机 IP 是私有地址如10.0.2.15Windows 无法直连。需配置端口转发VirtualBox 设置 → Network → Adapter 1 → Port Forwarding → 添加规则Name:sshProtocol:TCPHost IP:127.0.0.1Host Port:2222避开 Windows 自身 22 端口占用Guest IP:10.0.2.15Guest Port:22然后 Windows 执行scp -P 2222 C:\file.txt ubuntu127.0.0.1:/home/ubuntu/4. 剪贴板与拖放图形界面下的“隐形通道”但极易因服务未启或权限错而静默失效如果你用的是带桌面的 Linux 发行版Ubuntu Desktop、Linux Mint且已安装 Guest Additions / VMware Tools剪贴板同步和拖放是最符合直觉的交换方式——Windows 复制文字Linux 粘贴Linux 复制路径Windows 粘贴。但它不像命令行那样报错而是“无声失败”鼠标拖文件到虚拟机窗口光标变禁止符号CtrlV 粘贴空白。这不是功能坏了而是vboxclient或vmtoolsd进程没跑或用户会话未加载。4.1 强制启动剪贴板服务VirtualBox / VMware 通用VirtualBoxUbuntu Desktop# 查看 vboxclient 进程是否运行 ps aux | grep vboxclient # 若无输出手动启动注意必须在当前图形会话用户下运行不能 sudo /usr/bin/VBoxClient --clipboard /usr/bin/VBoxClient --draganddrop # 设为开机自启写入 ~/.profile非 /etc/profile echo /usr/bin/VBoxClient --clipboard ~/.profile echo /usr/bin/VBoxClient --draganddrop ~/.profileVMwareLinux Mint# 检查 vmtoolsd 是否运行 ps aux | grep vmtoolsd # 若未运行启动同样不能 sudo /usr/bin/vmtoolsd -n # 加入开机启动~/.profile echo /usr/bin/vmtoolsd -n ~/.profile逻辑说明--clipboard和--draganddrop是独立服务可单独启停常见错误是只启了--clipboard却没启--draganddrop导致拖放失效符号让进程后台运行避免阻塞终端写入~/.profile而非~/.bashrc因为图形界面登录时加载的是profilebashrc仅终端启动时读取。4.2 权限与 SELinux 干扰排查CentOS/RHEL 场景在 CentOS 7/8 上即使vmtoolsd运行拖放仍可能失败原因常是 SELinux 策略拦截# 临时禁用 SELinux 测试确认是否为根源 sudo setenforce 0 # 若此时拖放恢复说明 SELinux 策略限制 # 永久解决方案修改 /etc/selinux/config 中 SELINUXpermissive或 sudo semanage permissive -a vmtools_t提示生产环境不建议永久禁用 SELinux应针对性放行。vmtools_t是 VMware Tools 的 SELinux 类型semanage permissive将其设为宽容模式既保留审计日志又不禁用策略。5. 避坑指南四个血泪经验总结每个都曾让我重装虚拟机两次这些不是“可能出错”而是我在 37 台不同配置虚拟机Ubuntu 18.04–24.04、CentOS 7–8、Debian 11–12上反复验证过的真坑。现象精准、原因明确、解决一步到位照着做就能救回进度。5.1 现象共享文件夹挂载后ls可见但touch test.txt报错 “Permission denied”原因Linux 用户 UID/GID 与 Windows 共享文件夹的 NTFS ACL 权限不匹配且挂载时未指定uid/gid。Guest Additions 默认以root身份挂载普通用户无写权限。解决卸载后重新挂载显式指定用户 IDsudo umount /mnt/winshare sudo mount -t vboxsf -o uid1000,gid1000 winshare /mnt/winshare # 然后写入 /etc/fstab见 2.2 节永久生效5.2 现象scp连接时卡在 “debug1: Connecting to 192.168.56.101 port 22…” 无响应原因虚拟机网络为 NAT 模式但未配置端口转发或sshd服务监听127.0.0.1:22而非0.0.0.0:22或 Windows 防火墙拦截出站连接少见但 Win11 默认开启。解决先确认 Linux IP 和sshd监听地址ss -tlnp | grep :22NAT 模式下必须在 VirtualBox 设置中添加端口转发规则Host Port 2222 → Guest Port 22Windows 防火墙控制面板 → Windows Defender 防火墙 → 允许应用通过防火墙 → 勾选 “OpenSSH Client”。5.3 现象剪贴板双向同步失效Windows 复制文字LinuxCtrlV粘贴为空原因vboxclient进程崩溃或未启动且图形会话未自动拉起或 Linux 桌面环境GNOME/KDE的剪贴板管理器如gnome-keyring与 VBox 冲突。解决终端执行killall VBoxClient再手动启动/usr/bin/VBoxClient --clipboard 若仍无效临时切换剪贴板管理器sudo apt install -y xclip然后用xclip -o查看当前剪贴板内容确认是否被劫持。5.4 现象拖放大文件500MB到虚拟机进度条走到 99% 卡住数分钟后弹出 “Operation not supported”原因VirtualBox Guest Additions 版本过旧6.1.38存在大文件传输缓冲区溢出 Bug或 Windows 宿主磁盘空间不足无法生成临时缓存。解决升级 VirtualBox 至最新版7.0并重新安装 Guest Additions菜单 Devices → Insert Guest Additions CD image…清理 Windows 宿主磁盘空间至少保留 2GB 可用空间替代方案改用scp或共享文件夹二者无此限制。6. 进阶技巧用 rsync 实现增量同步 自动化脚本告别重复劳动当你频繁在物理机和虚拟机间同步代码、模型权重或日志手动scp或拖放效率低下且易出错。rsync是终极答案它只传差异部分支持断点续传、压缩传输、删除远程多余文件配合 shell 脚本能实现一键同步。我每天用它同步 PyTorch 项目10GB 模型目录首次传 8 分钟后续改一行代码只传 2KB真正“改完即同步”。6.1 rsync 基础命令与参数详解Windows PowerShell LinuxWindows 侧PowerShell执行# 同步本地 C:\project\ 到虚拟机 /home/ubuntu/project/保留权限、时间戳删除远程多余文件 rsync -avz --delete C:\project\ ubuntu192.168.56.101:/home/ubuntu/project/ # 加速技巧启用压缩-z、跳过已存在文件--ignore-existing、显示进度--progress rsync -avz --ignore-existing --progress C:\data\datasets\ ubuntu192.168.56.101:/home/ubuntu/datasets/Linux 侧反向同步从虚拟机拉取日志# 拉取虚拟机上的日志只同步新增/修改文件不删本地旧日志 rsync -av --update ubuntu192.168.56.101:/var/log/myapp/ /mnt/host_logs/核心参数说明参数作用是否必需-a归档模式递归 保留权限/所有者/时间戳/符号链接✅ 必须-v显示详细过程看到哪些文件被传推荐-z传输时压缩节省带宽尤其跨网络✅ 大文件必加--delete删除目标目录中源目录不存在的文件保持完全一致⚠️ 谨慎使用先测试--update只更新目标端比源端旧的文件安全不覆盖新日志✅ 日志同步首选--exclude*.tmp排除临时文件避免传 .pyc、pycache✅ 开发必备6.2 自动化同步脚本Linux 侧定时任务把 rsync 命令封装为脚本再用cron每 5 分钟检查一次同步# 1. 创建同步脚本 /home/ubuntu/sync_project.sh cat /home/ubuntu/sync_project.sh EOF #!/bin/bash # 同步 Windows 宿主 C:\project\ 到本机 /home/ubuntu/project/ # 使用 ssh key 免密登录需提前配置ssh-copy-id ubuntu192.168.56.101 rsync -avz --delete --exclude*.pyc --exclude__pycache__ \ -e ssh -o StrictHostKeyCheckingno \ ubuntu192.168.56.101:/mnt/winshare/project/ \ /home/ubuntu/project/ EOF # 2. 赋予执行权限 chmod x /home/ubuntu/sync_project.sh # 3. 添加到 cron每 5 分钟执行一次 (crontab -l 2/dev/null; echo */5 * * * * /home/ubuntu/sync_project.sh /var/log/rsync.log 21) | crontab -关键细节ssh -o StrictHostKeyCheckingno避免首次连接时交互确认否则 cron 会卡住 /var/log/rsync.log 21将 stdout 和 stderr 记录到日志方便排错--exclude参数可叠加防止同步临时文件污染环境务必先手动运行一次脚本确认免密登录和路径正确再启用 cron。我坚持用这套组合小文件用剪贴板快、中等文件用共享文件夹稳、大文件/自动化用 rsync准。三年没再为传文件重启过虚拟机。希望帮到你。本文还有配套的精品资源点击获取
返回列表