ARTICLE DETAIL

资讯详情

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

VMware共享文件夹配置全攻略:Windows与Linux无缝文件互通

VMware共享文件夹配置全攻略:Windows与Linux无缝文件互通 1. 共享文件夹方案选型为什么优先考虑VM自带功能干这行久了你会发现一个特别常见的工作场景开发机是Windows部署环境是Linux代码在Windows上写着顺滑但一跑到Linux上就各种小毛病。以前我处理这种问题的方式很原始——用U盘拷、用网盘传、用SCP拉来回倒腾文件卡得人没脾气尤其是项目代码频繁改动的时候那种反复手动同步的效率低到让人怀疑人生。后来我换成了虚拟机方案一台VMware里跑着LinuxWindows作为宿主机两边文件打通全靠共享文件夹这个功能。所谓共享文件夹简单理解就是宿主机Windows上的一个真实目录直接映射进虚拟机Linux里的某个挂载点两边读写的是同一份数据。你在Windows里改完代码保存Linux里立刻就能看到反之亦然完全不用手动同步。围绕“Windows和Linux之间共享文件”这件事其实不止一种做法。我在实际项目中试过几类主流方案这里先给个直观对比方案实现方式优点缺点适合场景VMware共享文件夹虚拟机设置中指定宿主机目录安装VMware Tools后挂载配置简单、性能好、无网络依赖需要装VMware Tools仅限VMware虚拟机单机开发、代码调试、个人笔记本场景SMB/CIFS服务Windows开启文件共享Linux用mount挂载跨平台通用物理机/虚拟机都能用配置略麻烦依赖网络权限坑多多机协作、局域网内共享NFS服务Linux开NFSWindows装对应客户端访问Linux生态原生性能高Windows侧配置麻烦协议兼容性问题多纯Linux集群为主偶尔跨平台从我个人的使用体验来看如果文件交换的主战场就是“同一台物理机上的Windows和VMware里的Linux”那VM自带的共享文件夹方案永远是第一优先。理由有三个第一不需要额外搭服务鼠标点几下就能完成配置第二走的是虚拟机底层通道不占用局域网带宽稳定性比SMB高一个量级第三宿主机目录直接作为数据源后续做备份、版本管理都方便。当然这个方案也不是没有短板。它强依赖VMware Tools而且是“单向映射”——以宿主机目录为基准虚拟机里挂载的是同一份数据想反过来把Linux里的目录共享给Windows看就得换别的思路。这一块我在后面第3节会展开细讲。1.1 VM共享文件夹解决的核心问题你可能想问为什么不用现成的Samba或者SSH传文件非要用VM的共享文件夹我给你讲个真实场景你就明白了。之前我维护一个前后端分离的小项目前端代码在Windows的VS Code里写后端服务跑在Linux虚拟机里。以前每次改完接口都得手动把前端打包文件传到虚拟机里的Nginx目录再清理缓存重启服务整个流程来回折腾五六分钟。后来配置了VM共享文件夹前端构建输出目录直接指向共享目录后端Nginx站点根目录也指向同一个共享目录的映射位置改完代码保存浏览器刷新立刻生效。整个效率提升不是一星半点。再比如做内核模块开发或者嵌入式交叉编译的场景。编译工具链在Linux里代码工程放在Windows里做版本管理以前都是把代码拉到Linux编译完再传回结果。有了共享文件夹编译时直接读取Windows映射过来的源码目录产物也写回共享目录两边代码始终处于同步状态不需要任何手动同步脚本。这就是共享文件夹最核心的价值打破了两套操作系统之间的文件壁垒让它们像操作同一个磁盘那样协同工作。从开发效率角度看省掉的不只是“传文件”这一步而是省掉了整个“同步” 的心智负担。1.2 选择VM共享文件夹之前的几个考量因素不过也不是所有情况都适合用VM共享文件夹。我在实操中总结了几个判断标准你在动手之前最好先过一遍虚拟机必须是VMware Workstation或VMware Player系列VirtualBox的共享文件夹机制不同配置方法也不通用。宿主机和虚拟机的操作系统版本要兼容VMware Tools。比如新版本VMware Tools对老内核的Linux支持就一般个别老系统可能要手动编译安装。如果你的项目对持久化要求极高或者文件量巨大比如几十万个小文件共享文件夹的性能可能不如原生磁盘。这种场景建议走NFS或者直接把数据放虚拟机磁盘里。涉及数据库文件直接存放的场景千万别把MySQL、PostgreSQL的数据目录放到共享文件夹上。共享文件夹底层的文件锁机制和原生Linux文件系统有差异高并发读写时容易出现数据损坏。这个坑我是踩过的后面专门提。搞清楚这些前提条件后再动手去配成功率会高得多。2. 环境准备VMware Tools安装是绕不开的重头戏很多新手在配置共享文件夹时卡住九成原因都是VMware Tools没装对。VMware Tools本身就是宿主机和虚拟机之间通信的“通用翻译官”它负责把宿主机的共享目录翻译成虚拟机里能识别的文件系统。没有它你在虚拟机设置里配了共享路径Linux里也什么都看不到。2.1 虚拟机系统基础配置检查在安装VMware Tools之前先确认虚拟机的基本配置没问题操作系统版本确认。Windows宿主机 Linux虚拟机这个组合最常规我用过Ubuntu 20.04/22.04、CentOS 7/8、Debian 10/11、Kali Linux基本都顺手。优先推荐Ubuntu系驱动和工具链支持最完善。虚拟机网络模式建议选NAT或者桥接。虽然共享文件夹功能不依赖网络但后续你可能会用到ssh等网络功能网络配置不健康会干扰排错判断。虚拟机内系统务必安装好SSH服务可选但推荐。万一共享文件夹配置失败SSH还能作为备用通道快速切过去排查问题。2.2 VMware Tools安装实操图形界面与命令行两种方式安装VMware Tools有两条路图形界面方式和命令行方式。我推荐用命令行方式因为图形方式依赖桌面环境新手容易在弹窗里点丢。先说明图形界面的流程在VMware菜单栏点击“虚拟机(M)” → “安装VMware Tools(T)”虚拟机会挂载一个虚拟光驱里面是安装包。进入Linux系统打开光驱目录把里面的tar.gz压缩包复制到本地解压后执行vmware-install.pl。这个过程会有一堆交互式提问一路回车默认值就好。命令行方式我更为推荐可复制粘贴的完整流程如下# 1. 在VMware菜单栏点击“虚拟机 - 安装VMware Tools” # 2. 挂载光驱 sudo mkdir -p /mnt/cdrom sudo mount /dev/cdrom /mnt/cdrom # 3. 查看光驱中的安装包名字 ls /mnt/cdrom # 4. 复制压缩包到/tmp目录避免直接在只读光驱里解压 cp /mnt/cdrom/VMwareTools-*.tar.gz /tmp/ # 5. 解压 cd /tmp tar -zxvf VMwareTools-*.tar.gz # 6. 进入解压目录并开始安装 cd vmware-tools-distrib sudo ./vmware-install.pl安装过程中会出现很多[yes/no]和路径选择我这里给一个简单粗暴的建议能回车就回车全部用默认值。What is the location of the directory of C header files that match your running kernel?这种问题直接回车让它自动检测。运行到后面如果提示需要编译内核模块确认gcc、make、kernel-headers这些依赖已经安装即可。装完之后重启虚拟机验证一下是否真正生效# 查看VMware Tools服务状态 vmware-toolbox-cmd --version # 查看hgfs相关内核模块是否加载 lsmod | grep hgfs # 查看共享文件夹挂载点默认在/mnt/hgfs ls /mnt/hgfs/如果ls /mnt/hgfs/能列出你在宿主机指定的共享目录名说明VMware Tools已经工作正常。怕的是装完了之后/mnt/hgfs目录根本不存在这种一般是hgfs模块没编译成功造成的我放到后面常见问题里细说。2.3 安装VMware Tools时依赖问题处理老一点的Linux发行版安装VMware Tools时容易卡在缺少编译依赖上。Ubuntu/Debian系用以下命令补齐sudo apt update sudo apt install -y build-essential linux-headers-$(uname -r)CentOS/RHEL/Fedora系用sudo yum install -y gcc make kernel-devel # 或者新版系统用 dnf sudo dnf install -y gcc make kernel-devel需要注意一个细节内核头文件版本必须和当前运行的内核版本完全一致。如果你之前升级过内核但没重启uname -r显示的运行内核版本可能和已安装的kernel-devel版本对不上这时候编译必挂。解决思路就是先重启到新内核或者用yum install kernel-devel-$(uname -r)指定版本安装。安装VMware Tools这事我踩过最深的坑就是老版本VMware配新内核hgfs模块编译不过去。如果你遇到hgfs模块加载失败但内核头文件又确认没问题可以考虑升级VMware版本或者干脆用我第3节会提的vmhgfs-fuse方案绕过去。3. 共享文件夹配置与挂载实操全流程VMware Tools搞定后接下来就是共享文件夹的核心操作了。这一段我按完整流程拆开讲每一步操作都有明确目的照着做基本一次成功。3.1 虚拟机设置里的共享文件夹配置先看宿主机这边怎么配确保虚拟机处于关机或挂起状态修改硬件设置通常需要关机但共享文件夹设置其实支持开机状态修改。选中虚拟机点击菜单栏“虚拟机(M)” → “设置(S)”打开虚拟机设置面板。切换到“选项(Options)” 选项卡点击左侧“共享文件夹(Shared Folders)”。右侧选择“总是启用(Always enabled)”。点击“添加(Add)”按钮弹出添加共享文件夹向导。在“主机路径(Host path)”中选择你要共享的Windows目录比如D:\dev\shared。在“名称(Name)”中给这个共享起个名字比如shared。这个名字就是Linux虚拟机里挂载时用的标识。勾选“启用此共享(Enable this share)”。如果想让虚拟机对共享目录有完全读写权限在“其他属性”勾选“只读”或默认不勾选。这里有个细节很多人不在意共享文件夹名称最好不要带中文和空格否则挂载时处理起来非常别扭——不是不能配而是要处理转义和编码问题浪费时间没价值。3.2 Linux端挂载hgfs与vmhgfs-fuse两条路线配置好宿主机侧之后Linux虚拟机的操作取决于VMware Tools的版本和系统环境。老式VMware Tools12.x之前通常走的是vmhgfs内核模块挂载方式是# 手动挂载 sudo mount -t vmhgfs .host:/shared /mnt/hgfs但新版VMware Tools比如VMware Workstation 16/17自带的版本很多默认使用了vmhgfs-fuse这套机制挂载方式变为# 创建挂载点 sudo mkdir -p /mnt/hgfs # 使用FUSE方式挂载 sudo vmhgfs-fuse .host:/shared /mnt/hgfs -o allow_other -o uid1000注意.host:/后面跟的shared就是你在宿主机侧配置时填写的“名称”不是宿主机目录路径。这个对应关系搞错的话挂载会直接报No such file or directory。还有一个更直接的办法。新版VMware Tools装完后/mnt/hgfs一般会被自动挂载好共享目录直接就在里面。用df -h能看到类似这样的输出vmhgfs-fuse 465G 200G 265G 43% /mnt/hgfs看到这个就说明一切正常直接在/mnt/hgfs下找你的共享目录即可。如果自动挂载没生效手动执行挂载还提示找不到文件系统类型那么大概率是系统缺少FUSE相关组件。Ubuntu/Debian系执行sudo apt install fuseCentOS/RHEL系执行sudo yum install fuse fuse-libs然后再试一次。3.3 挂载后如何验证读写是否正常配置完不能只看目录存在就收工读写验证这步千万别省。我一般按这个顺序测# 1. 查看挂载信息 df -hT | grep hgfs # 2. 创建测试文件虚拟机侧写入 echo test from linux | sudo tee /mnt/hgfs/shared/test_linux.txt # 3. 去Windows侧的D:\dev\shared目录看是否出现test_linux.txt # 4. 在Windows里创建一个test_windows.txt # 5. 回到Linux里读 cat /mnt/hgfs/shared/test_windows.txt双向读写都通了才算真正配置成功。有些场景下你可能只需要单向传递比如只让Linux读Windows的软件包那就没必要开写权限宿主机侧权限控制更安全。3.4 Windows和Linux互通时文件权限如何控制共享文件夹有一个重要的特点文件属主和权限位是受VMware转换逻辑影响的和原生Linux文件系统不太一样。默认情况下共享文件夹里的文件属主可能是挂载时指定的uid/gid也可能显示为root。有时候你明明在Windows侧创建的文件到Linux里看属主变成root:root这很正常的不要急着去改权限。因为整个共享目录本质上还是Windows文件系统NTFS或exFATLinux侧的chmod、chown对它的作用非常有限。如果你需要在Linux侧对共享文件做权限控制两个办法挂载时指定uid和gid让共享目录落到普通用户手里sudo vmhgfs-fuse .host:/shared /mnt/hgfs -o uid$(id -u) -o gid$(id -g)如果共享给多个用户加allow_other选项sudo vmhgfs-fuse .host:/shared /mnt/hgfs -o allow_other -o umask022umask022表示文件默认权限755目录默认权限755普通用户可读可执行只有属主能写。这个在生产环境比较适用避免共享目录变成“谁都能改”的三不管地带。3.5 物理机和虚拟机共享文件夹的延伸玩法既然热词里专门出现了“物理机和虚拟机共享文件夹”我就多提一句。VMware共享文件夹本质上就是在物理机宿主机和虚拟机之间搭了一座桥。你可以利用这个特性做很多提高效率的事把Windows的下载目录共享给Linux虚拟机下载好的ISO、软件包直接在虚拟机里挂载使用不用反复拷贝。把Windows上的IDE项目目录共享给虚拟机做编译验证。Windows上写代码、Linux里编译两者的优势都能用上。虚拟机里的日志、备份文件写回宿主机共享目录方便宿主机侧统一做定时备份和清理。但同样要提醒不要把虚拟机里的核心服务数据放共享目录比如数据库数据文件、消息队列持久化文件。原因我之前提过共享文件系统的锁语义和块设备文件系统有差异高并发场景下容易出问题。这个建议我反复强调是因为真有同事把MySQL的数据目录放共享目录里跑了几天直接表损坏。4. 永久挂载配置解决重启后共享目录消失共享文件夹配置好之后很多新手会以为大功告成了。结果重启一次Linux虚拟机/mnt/hgfs下面就空了。这种问题出现频率极高热词里“cifs挂载共享文件夹重启后失效怎么办”能上热搜说明大家被这事折磨得不轻。4.1 为什么重启后共享目录会消失原因不复杂手动挂载的命令只是临时的没有写入系统启动加载项里。Linux一重启挂载关系就重置了需要重新执行一次mount或vmhgfs-fuse命令。解决办法就是把它写进/etc/fstab让系统在启动时自动完成挂载。这也是热词里“cifs挂载共享文件夹重启后失效”的终极解药——不只是VM共享文件夹任何形式的网络文件系统挂载都适用这套逻辑。4.2 用/etc/fstab实现VM共享文件夹开机自动挂载先看一个完整的fstab配置示例# 编辑fstab文件 sudo vim /etc/fstab # 在文件末尾追加如下内容url编码 .host:/shared /mnt/hgfs fuse.vmhgfs-fuse allow_other,uid1000,gid1000,umask022,defaults 0 0拆解一下这行配置.host:/shared源路径.host:是VMware的固定前缀/shared填的是宿主机侧的共享名称。/mnt/hgfs虚拟机里的挂载点务必保证目录已存在。fuse.vmhgfs-fuse文件系统类型。这里其实有两种写法老版本内核模块用vmhgfs新版FUSE方式用fuse.vmhgfs-fuse。实在拿不准可以先在命令行跑一次挂载命令用mount | grep hgfs看系统实际识别出的类型。allow_other,uid1000,gid1000,umask022挂载参数uid和gid建议填你日常使用的用户id可以用id命令确认。defaults使用默认挂载选项。0 0不做dump备份、不做fsck检查。写完fstab后强烈建议先验证一下配置是否正确避免重启后起不来# 卸载当前挂载 sudo umount /mnt/hgfs # 用fstab配置重新挂载这个命令不会真的重启系统 sudo mount -a # 确认挂载成功 df -h | grep hgfs执行mount -a如果没有报错说明fstab配置可用。如果报错比如special device .host:/shared does not exist马上检查共享名称是否和宿主机侧一致或者fuse类型是否写错。4.3 systemd方式自动挂载另一种靠谱选择除了fstab也可以用systemd服务来实现开机挂载。这种方式适合虚拟机启动顺序比较讲究的场景或者你不怎么熟悉fstab语法想用更“现代”的方式管理。创建一个systemd服务文件sudo vim /etc/systemd/system/vmhgfs-fuse.service内容如下[Unit] DescriptionVMware shared folders Afternetwork.target [Service] Typeoneshot RemainAfterExityes ExecStart/usr/bin/vmhgfs-fuse .host:/shared /mnt/hgfs -o allow_other,uid1000,gid1000 ExecStop/usr/bin/fusermount -u /mnt/hgfs [Install] WantedBymulti-user.target启用服务sudo systemctl daemon-reload sudo systemctl enable vmhgfs-fuse.service sudo systemctl start vmhgfs-fuse.service这种方式的好处是你可以随时用systemctl stop和start控制挂载状态比fstab更灵活。坏处是配置文件要自己写多一步学习成本。我个人在服务器类虚拟机上更喜欢fstab方案毕竟它是Linux挂载的事实标准排错资料也多。4.4 永久挂载后权限和路径的避坑指南永久挂载配置完成后还有几个细节值得注意第一uid和gid建议写实际使用的用户不要用0root。因为共享目录一旦以root挂载普通用户在目录里创建的文件会因为权限问题导致各种麻烦。我自己曾为了省事直接把uid写成0结果普通用户往共享目录写文件时不停地报权限错误排查了半天。第二挂载点目录要提前建好且为空。如果/mnt/hgfs目录不存在fstab挂载会保错如果目录里已经有内容挂载后这些内容会被暂时隐藏取消挂载后才会重新出现。第三不要把/mnt/hgfs直接作为虚拟机的home目录或者工作目录。共享文件系统不支持某些高级文件操作比如硬链接、特殊文件节点部分软件会有兼容问题。正确的用法是把共享目录作为一个“数据中转区”需要编辑的文件在里面临时处理正式运行的文件复制到原生文件系统里。5. 权限问题与常见问题排查实录共享文件夹配置过程中我估计你已经遇到或者即将遇到一堆拦路虎。这一节我把自己踩过的坑、以及网上高频提问的问题整理成文档直接可以当排查手册用。5.1 共享文件夹在Linux下显示为空或目录不存在这是问得最多的问题。明明宿主机配置了共享目录/mnt/hgfs也存在但里面空空如也。排查顺序如下# 1. 检查VMware Tools是否正常 vmware-toolbox-cmd --version # 2. 确认hgfs模块状态 lsmod | grep hgfs # 3. 用vmware-hgfsclient列出当前识别到的共享名称 vmware-hgfsclient执行vmware-hgfsclient是关键一步它会输出宿主机侧所有共享目录的名称。如果输出为空说明VMware Tools和宿主机的连接有问题多半是Tools安装不完整重新安装一次。如果输出了共享名称但/mnt/hgfs下仍然看不到那就是挂载的问题手动执行挂载命令再验证。5.2 挂载报错No such device or address这个报错的根源通常是共享名称写错或者挂载参数不对。先检查.host:/后面的名称是否和vmware-hgfsclient输出一致大小写敏感。挂载点目录是否存在。文件系统类型是否写对是vmhgfs还是fuse.vmhgfs-fuse。如果以上都没问题可能是内核模块没加载执行sudo modprobe vmhgfs手动加载试试。加载失败就说明VMware Tools内核模块没有编译成功回第2节重新处理依赖问题。5.3 Windows侧文件在Linux中无法读取或权限不足Windows和Linux文件权限体系完全不同共享文件夹里会出现一些看起来“不合常理”的情况。最常见的现象Linux用户能写文件但Windows里打开提示权限不足或者反过来Windows侧创建的文件在Linux里总是只读。解决思路归结为两类如果是用户映射问题挂载时显式指定uid和gid让共享目录归当前用户所有。如果是umask问题挂载时增加umask000可以让新文件默认对所有用户开放读写。但注意这个选项对已存在的文件不生效需要重新挂载才会应用。有时候Windows侧杀毒软件或者文件索引服务也会锁文件导致Linux侧写入失败。这种问题排查起来很难受因为Linux侧看挂载是正常的但写入动作会卡住。我的经验是如果共享目录写文件总是莫名其妙失败先检查Windows侧的实时保护是否对这个目录有拦截规则临时关闭再试一次。5.4 vmhgfs-fuse挂载后中文文件名乱码中文文件名乱码多半和字符集有关。Windows侧用NTFS编码是UTF-16Linux侧默认UTF-8。VMware本身会做编码转换但如果你挂载时指定了iocharset等参数反而可能引起问题。我的建议是除非你有很强的理由否则不要在挂载参数里加任何和字符集相关的选项。默认配置下我测试过Windows中文文件名、Linux中文文件名在共享目录里基本都能正常显示。真遇到乱码优先检查虚拟机的locale设置locale确保LANG是en_US.UTF-8或zh_CN.UTF-8而不是C或POSIX。5.5 常见问题速查表故障现象可能原因解决动作/mnt/hgfs 不存在VMware Tools未装或未生效重新安装VMware Tools并重启/mnt/hgfs 为空共享名称配置错误或挂载丢失执行vmware-hgfsclient核对名称手动挂载挂载报No such device共享名称拼写错误核对大小写和名称拼接格式写入文件报权限错误uid/gid映射不对挂载时指定uid$(id -u)Windows侧无法读取Linux创建的文件权限位不兼容挂载加umask022或umask000重启后共享目录消失未写入fstab或systemd按第4节配置永久挂载VMware Tools安装时编译内核模块失败缺少内核头文件或gcc安装build-essential和linux-headers共享目录性能极差文件数量太多或目录嵌套太深改用NFS或将数据放虚拟磁盘表格里每一行都是真实场景。我自己至少被其中四行坑过而且是反复坑。5.6 Kali和其他非主流Linux发行版的注意事项热词里出现了“kali共享文件夹”这里单独给Kali用户补充几点。Kali基于Debian整体流程和Ubuntu很像但有两个差异第一Kali默认不装FUSE相关组件直接挂载vmhgfs-fuse会提示找不到命令。先执行sudo apt install fuse。第二Kali的内核滚动更新比较频繁每次大版本升级内核后VMware Tools的模块可能需要重新编译。升级内核后共享文件夹失效第一反应别去重装Tools先试vmware-toolbox-cmd --version看Tools本身是否正常再看内核模块是否需要重新加载。如果Tools状态正常但共享目录失效执行sudo vmhgfs-fuse .host:/shared /mnt/hgfs手动挂载一次能成功的话问题基本就是模块在重启后没自动加载。检查fstab或者systemd配置即可。5.7 CIFS挂载重启后失效的排查思路热词里提到“cifs挂载共享文件夹重启后失效怎么办”虽然这属于SMB方案的范畴但和VM共享文件夹的fstab问题同宗同源。简单补充一下CIFS的排查要点CIFS挂在天生的重启失效问题主要是网络服务启动顺序导致的。fstab在挂载CIFS时网卡可能还没就绪所以挂载失败。解决办法是在fstab中加入_netdev选项。凭证管理也容易出问题。明文密码写在fstab里安全性和可用性都受影响推荐用credentials/etc/samba/cred文件来存账号密码并设置600权限。挂载时加vers3.0或更高版本协议避免老的SMB1协议兼容性问题。举例//192.168.1.100/share /mnt/share cifs usernameuser,passwordpass,_netdev,vers3.0,uid1000,gid1000 0 0如果重启后仍然失效用journalctl -u systemd-fstab-generator或者dmesg | grep cifs看具体报错。多数情况要么是认证失败要么是网络没有就绪。6. 一些想单独强调的实操心得文章写到这儿该讲的配置和排查都讲完了。最后还是想分享几条个人在多次折腾中沉淀下来的心得这些内容不一定写在官方文档里但能帮你少走不少弯路。6.1 共享目录的目录结构设计比想象中重要很多人一上来就把整个D:\dev分享给虚拟机狼奔豕突一阵之后发现性能差、权限乱、文件混杂。我的建议是单独建一个专用共享根目录比如D:\vm_shared然后在这个目录下按用途分子目录D:\vm_shared ├── code # 放项目代码 ├── installers # 放安装包、镜像文件 ├── logs # 虚拟机写回的日志 └── temp # 临时文件交换区这样划分的好处有三个权限控制粒度更细备份时能按目录单独处理虚拟机里挂载点清晰可读不会出现一个目录里既放代码又放系统镜像的混乱局面。6.2 共享文件夹和版本控制的配合如果你用Git做版本管理有个细节特别注意不要把.git目录和大量依赖目录直接放到共享文件夹里操作。我自己就吃过这个亏。Windows侧克隆一个仓库然后在Linux虚拟机里对同一个共享目录跑git status每次都要卡好几秒。原因在于Git在做状态检查时要遍历文件系统的inode等信息而共享文件系统在这方面的性能比原生文件系统差不少。项目文件一多卡顿非常明显。更好的做法是源码放在共享目录里做交换但在Linux侧复制一份到本地磁盘用于编译和Git操作完成后再把产物同步回共享目录。这样两边互不干扰又保留了共享文件夹的便利性。6.3 共享文件夹不是银弹数据可靠性要有预案这是我最想强调的一点。共享文件夹很方便但它的底层是一层文件系统翻译和网络中转无论是性能还是数据安全性都不如虚拟机的原生磁盘和宿主机原生磁盘。所以重要生产数据比如数据库文件、持续集成产物、关键配置文件备份就不要放在共享目录里了。万一宿主机磁盘出问题或者VMware Tools升级出了偏差共享目录里的数据恢复起来异常痛苦。我现在的工作习惯是共享目录只做临时数据交换和轻量级代码同步重要数据一定落盘到虚拟机原生磁盘并额外做备份。这个习惯是吃过亏之后养成的分享给正在折腾共享文件夹的你希望你不用踩同样的坑。整个流程走下来你会发现Windows和Linux之间的文件共享并不神秘无非是选对方案、装好Tools、配置挂载、写进开机项这几件事。把基础打扎实后面用起来就是顺手的事情。
返回列表