news 2026/9/29 14:22:25

Linux 装进 VMware 虚拟机:从选型、安装到网络与开发环境实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Linux 装进 VMware 虚拟机:从选型、安装到网络与开发环境实战

把 Linux 装进 VMware 虚拟机,几乎是每个后端、运维、嵌入式方向的人绕不开的第一课。我从最早在宿舍笔记本上折腾双系统,到后来习惯在 VMware Workstation 里开一台干净的 Linux 做实验,前后换过七八种组合:Ubuntu 桌面版、Debian 服务器版、CentOS Stream、Rocky、openEuler,还有专门用来做网络与安全练习的 Kali。踩过的坑从"装完没网"到"VMware Tools 报脚本未成功运行",基本都经历过一遍。这篇就把 VMware 配置 Linux 系统的完整链路摊开讲——从选型、建机、装系统,到换源、配网、装开发环境,再到出问题怎么查。刚接触虚拟化的新手可以照着走一遍;已经装过的,可以重点看排查表和那些文档里不写的细节。

1. 方案选型:为什么把 Linux 装进 VMware 而不是裸机

动手之前先想清楚"为什么这么选",比急着点下一步重要得多。很多人一上来就问装哪个发行版,其实真正该先回答的是:我到底需不需要一台完整的虚拟机。

1.1 虚拟机、双系统、容器三条路的边界

双系统是最"硬"的方案:直接把硬盘划一块装 Linux,开机时选引导。优点是性能无损,适合跑对 CPU 和 IO 敏感的任务;缺点是分区操作有风险,一旦引导写坏,宿主机也可能进不去,而且每次切换系统要重启,做实验的节奏会被打断。我早年用双系统学 Linux,最大的痛苦不是难学,而是"想查个资料还得重启回 Windows"。

容器方案(比如各类轻量级 Linux 运行环境)胜在启动快、占资源少,适合做纯应用层开发。但它默认和宿主机共享内核,涉及内核模块加载、文件系统挂载、网络协议栈细节、systemd 服务管理的实验,容器里做起来会打折扣。有些运行环境甚至默认不带完整的 init 系统,你systemctl一敲就报错。

VMware 虚拟机走的是中间路线:一台完整的、有独立内核的计算机,跑在宿主机的软件层里。它能做快照,装崩了一键回滚;能克隆,一台配好当模板复制出十台;出问题最多删掉重来,宿主机毫发无损。代价是要多占一份内存和磁盘,性能有 10% 到 20% 的损耗(具体看负载类型)。

我的经验判断很简单:

  • 只是想学 Linux 命令、跑跑服务、搭开发环境,虚拟机是性价比最高的选择。
  • 要长期跑高负载编译、数据库压测,考虑双系统或独立的物理机/服务器。
  • 只做应用层开发、不需要碰系统底层,轻量级运行环境更省事。

1.2 VMware Workstation 版本与授权这件小事

网上搜"vmware 下载",跳出来的结果一半是官网,一半是各种打包站。我的建议只有一句:从官方渠道下载安装包。第三方打包的安装包有可能被塞进额外组件,装完系统莫名其妙多出计划任务,排查起来非常费劲。

版本上,Workstation Pro 17 是目前主流,对 Windows 11 宿主机、NVMe 磁盘、虚拟化嵌套的支持都比较完善。至于"密钥"这件事,我想说得直接一点:网络上流传的各种来路不明的授权码,既容易失效,也可能带来合规风险。正规做法是用官方提供的试用期,或者走官方渠道获取授权,个人用户在部分地区还可以按官方政策申请免费使用许可。别为了省点事给后面的工作埋雷。

1.3 宿主机硬件预算:先把账算清楚再开机

虚拟机的资源是从宿主机身上"切"出来的,切多了两边都卡。给你一套我常用的估算方法。

内存是最先要算的。宿主机 16GB,Windows 或 macOS 系统自身吃 4 到 6GB,浏览器再吃 3 到 4GB,留给虚拟机的舒适区间是 4 到 6GB。想开两台虚拟机做集群实验(比如一台装数据库、一台跑应用),那宿主最好上 32GB。经验值:给 Linux 虚拟机的内存不要低于 2GB,桌面版最好 4GB 起,纯命令行服务器版 1GB 也能跑,但编译代码会很慢。

CPU 看物理核心数。8 核 16 线程的机器,给虚拟机分 2 核(对应 2 个虚拟 CPU)比较稳妥;分太多反而会因为调度竞争变慢。有一个坑必须提前确认:虚拟化需要 CPU 的硬件辅助虚拟化功能,Intel 平台叫 VT-x,AMD 平台叫 AMD-V,需要在 BIOS 或 UEFI 里打开。Windows 上还经常被 Hyper-V 及其相关功能(比如某些安全功能、WSL2、沙盒)抢占,装完发现 VMware 提示"已禁用虚拟化"就是这个原因,关掉对应功能重启即可。

磁盘方面,40GB 是够用的下限,做开发环境建议 60 到 80GB,要装数据库加大量镜像就 100GB 起。VMware 默认的"精简置备"意味着它不会立刻吃掉全部空间,而是用多少占多少,所以给大一点不吃亏。

2. 前期准备:镜像、网络与参数的确定

准备工作做扎实,安装过程能省一半时间。这一步的核心是三件事:镜像从哪来、网络怎么通、参数怎么定。

2.1 Linux 发行版怎么选,别被名字绕晕

发行版之争是个老话题,但对新手来说,判断依据其实很朴素:你要用它干什么。

  • 想学通用 Linux、生态最友好、遇到问题最好搜:Ubuntu 桌面版是首选,服务器场景用 Ubuntu Server。它的包管理和文档生态最厚,新手出错时最容易找到答案。
  • 想要稳定、干净、不折腾:Debian 的服务器版。软件版本偏保守,但极其可靠。
  • 企业环境、跟工作对齐:Rocky Linux、AlmaLinux 这类与 RHEL 生态兼容的发行版,很多公司的服务器就是这批。
  • 想了解国内自研发行版:openEuler、Anolis OS 这类可以试试,包管理和操作习惯跟主流发行版接近,学习成本不高。
  • 做网络与安全方向的练习:Kali Linux 预装了大量工具,适合放在隔离网络里做实验,但不要把它当成日常开发机,工具太多反而乱。

下载镜像时记得校验完整性。Ubuntu 官方会提供 SHA256 校验值,下载完执行一次比对:

# Linux / macOS sha256sum ubuntu-24.04.1-desktop-amd64.iso # Windows PowerShell Get-FileHash .\ubuntu-24.04.1-desktop-amd64.iso -Algorithm SHA256

校验值不一致说明文件下坏了或者被替换过,别硬装,重新下。这一步只要十秒,能帮你避开后面一堆莫名其妙的安装报错。

另外提醒一句:Ubuntu 的桌面版镜像大约 5GB,服务器版不到 3GB。如果你只是练命令,别下桌面版,光图形界面就吃掉 1.5GB 内存,2GB 内存的虚拟机装桌面版会卡到怀疑人生。

2.2 三种网络模式,选错了后面全是坑

这是新手最容易糊涂的地方。VMware 提供三种主要网络模式,本质区别在于"虚拟机的网卡挂在哪个虚拟交换机上"。

模式虚拟机能否上网宿主机能否访问虚拟机局域网其他机器能否访问典型场景
桥接(Bridged)能能能要把服务开放给同事访问,模拟真实服务器
NAT能能需要做端口转发只做开发、学习,最省心
仅主机(Host-Only)不能(除非另配网卡)能不能隔离实验、断网测试、安全练习

我的默认选择是 NAT,因为它在绝大多数网络环境(包括公司内网、公共网络)下都能用,不需要额外申请 IP,宿主机换个地方上网虚拟机也跟着走。缺点是外部设备访问虚拟机需要配置端口转发:在"编辑 - 虚拟网络编辑器"里选中 NAT 模式对应的网段,添加一条映射,把宿主机某个端口转发到虚拟机的指定端口,比如宿主 2222 映射到虚拟机 22,外部就能通过 SSH 连进来。

桥接模式看起来更"真实",但有个常见坑:公司网络通常用 DHCP 分配地址,如果做了 MAC 地址绑定或者地址池很小,桥接的虚拟机可能拿不到 IP,表现就是"网络图标正常但 ping 不通任何东西"。遇到这种情况别急着改系统配置,先切回 NAT 试试,大概率能通。

只主机模式我一般这么用:宿主机的虚拟网卡和虚拟机在同一个网段,但虚拟机不能出外网。做隔离测试、观察程序在无网络环境下的行为、或者避免某些软件偷偷联网时非常合适。

2.3 磁盘类型与文件组织方式的实际影响

创建虚拟机时会问磁盘类型,主要选项是 SCSI 和 NVMe。现在都建议选 NVMe,配合 SSD 宿主,随机 IO 表现明显更好;老系统或者需要兼容旧内核的,选 SCSI。

还有一个选项是"将虚拟磁盘存储为单个文件"还是"拆分成多个文件"。单个文件性能略好、拷贝方便;拆分文件在复制到 FAT32 移动硬盘时不会因为超过 4GB 而失败,也便于分段管理。我的做法是本地 SSD 上用单个文件,需要搬来搬去时用拆分。

3. 虚拟机创建与系统安装实操

准备工作做完,真正的安装就二十来分钟。但这个阶段有几个默认选项必须手动改掉,否则后面要返工。

3.1 新建向导里那几个必须改的选项

打开"新建虚拟机",会问你用典型还是自定义。选自定义。典型的默认值太粗糙,尤其是它可能直接把 ISO 挂上并尝试简易安装。

关键的一步是:在"客户机操作系统"选择界面之后,选"稍后安装操作系统"。原因是选了这个,VMware 才把所有决定权交给你——分区方案、用户创建、软件包选择。如果你直接挂 ISO 让它自动装,某些发行版会用预设的 LVM 布局和最小化软件集,装完发现连中文输入法、网络工具都没有,还得回头补。

接下来逐项:

  • 客户机操作系统类型:选 Linux,版本按实际选。选错了不会装不上,只是默认参数(内存、磁盘、显卡)可能给得不合适。
  • 处理器:按前面算的给,比如 2 核。
  • 内存:桌面版 4GB,服务器版 2GB。
  • 网络:先用 NAT。
  • 控制器:NVMe。
  • 磁盘:60GB 起,精简置备。
  • 最后在"自定义硬件"里,把 CD/DVD 指向你下载好的 ISO,并确认"启动时连接"被打勾。

虚拟机配置全部记录在.vmx文本文件里,同目录下还有.vmdk磁盘文件、.nvram固件变量文件。以后遇到"虚拟机起不来",可以直接打开.vmx看参数,比在图形界面里翻菜单快得多。

3.2 安装界面里的分区与用户设置

启动虚拟机,进入安装程序。语言选中文或英文都行,服务器环境我建议直接用英文,避免中文文件名和日志编码带来的麻烦。

分区是这一步的核心。Ubuntu 可以选择"清除整个磁盘并安装",对于虚拟机来说完全够用,因为整块磁盘都是它的,不用担心误删宿主机数据。但如果你想练手,用"手动分区":

  • EFI 引导分区:512MB,格式 EFI 系统分区。UEFI 启动必须有。
  • 交换分区 swap:内存 2GB 给 2GB,内存 8GB 以上给 4GB 就够。它的作用是内存不够时临时顶一下,以及休眠时存放内存内容。
  • 根分区/:剩下的全部,格式 ext4。

老式 BIOS 引导不需要 EFI 分区,但建议单独分一个/boot给 1GB,方便内核更新时不会因为根分区满而失败。这个坑我踩过:根分区塞满到 100%,新内核装不进去,apt upgrade直接卡死报错。

用户设置上有个细节。Ubuntu 安装时会让你创建一个普通用户,同时可以选择是否给 root 设置密码。我的习惯是普通用户 + sudo 提权,不给 root 设密码。这样所有危险操作都会被 sudo 拦一下,多一次思考,少一次事故。

安装过程中还会问要不要装第三方软件和更新,桌面临时用可以勾上,服务器环境建议不勾,装完换源再统一更新,速度快很多。

3.3 装完第一件事:打快照 + 装 VMware Tools

系统装完、还没做任何配置时,先打一个快照。这是我这十年里最省钱的一个习惯。快照名字写成"01-系统初始安装完成",后面每完成一个阶段再打一个。装崩了直接回滚,比重新装一遍快十倍。

快照占磁盘空间,别打太多,也不要在有大量写入的数据库运行状态下打。我的策略是保持三到四个关键节点快照,定期清理旧的。快照文件是.vmsn和.vmsd,存在虚拟机目录下,删快照要在界面里删,别手动删文件,会破坏磁盘链。

然后装 VMware Tools。这一步决定了你能不能全屏、能不能复制粘贴、能不能用共享文件夹。新版本发行版推荐用开源的 open-vm-tools:

sudo apt update sudo apt install -y open-vm-tools open-vm-tools-desktop sudo systemctl restart open-vm-tools

桌面版要装open-vm-tools-desktop,服务器版只装open-vm-tools就行。装完重启,分辨率应该能自适应窗口,剪贴板也能互通了。

如果系统提示"VMware Tools 继续运行脚本未能在虚拟机中成功运行",先别慌。这个报错通常不是 Tools 坏了,而是它挂载 ISO 后执行安装脚本时因为你已经有 open-vm-tools 而中断。检查一下:

# 看服务状态 systemctl status open-vm-tools # 看内核模块是否加载 lsmod | grep vmw

模块在、服务是 running 状态,功能正常,报错可以忽略。如果功能真不正常,先sudo apt remove open-vm-tools卸干净再重装,或者临时手动挂载 Tools 的 ISO 走一遍安装。

4. 系统初始化:换源、网络、中文环境与远程连接

装好的系统只是个毛坯房,这一步是装修。我把这段时间分成四块,每块都有几个必踩的坑。

4.1 换源与系统更新的正确姿势

默认软件源在国外,更新速度可能慢到你想放弃。换成国内镜像站点是标配动作。以 Ubuntu 24.04 为例,配置写在/etc/apt/sources.list.d/ubuntu.sources(旧版本在/etc/apt/sources.list)。

动手前先备份:

sudo cp /etc/apt/sources.list.d/ubuntu.sources /etc/apt/sources.list.d/ubuntu.sources.bak

然后把地址替换成清华、中科大或者阿里云的镜像站点。注意要跟你的发行版代号严格对应,Ubuntu 24.04 是 noble,22.04 是 jammy,写错了会报 404。

# 查看系统代号 lsb_release -cs # 更新索引并升级 sudo apt update sudo apt upgrade -y

关于网上流传的各种"一键换源脚本"和第三方源聚合配置工具,我的态度是谨慎。它们确实省事,但引入了你无法核实的源地址和签名密钥。软件源本质上是把系统安装软件的权限交给了对方,一旦源被替换,风险很大。能用官方镜像站解决的问题,不要用来源不明的脚本。如果确实要加第三方源,至少自己打开配置文件看一眼地址和签名密钥是否来自可信机构。

另外提醒:apt upgrade如果升级了内核,需要重启才会生效。重启后如果出现新内核起不来,在 GRUB 菜单里选旧内核进去,把新内核包卸载掉,再查原因。

4.2 网络与 DNS:ping 通 IP 却打不开网页怎么办

虚拟机的网络问题九成出在 DNS。判断方法很简单:

ping -c 3 223.5.5.5 # 通,说明链路没问题 ping -c 3 www.baidu.com # 不通,基本就是 DNS 的问题

Ubuntu 桌面版用 NetworkManager,服务器版从 18.04 起默认用 netplan 配置。netplan 的配置文件在/etc/netplan/下,YAML 格式对缩进极其敏感,必须用空格缩进,绝不能用 Tab,这是新手最容易犯的错。

一个静态 IP 的配置示例:

network: version: 2 ethernets: ens33: dhcp4: false addresses: - 192.168.10.100/24 routes: - to: default via: 192.168.10.2 nameservers: addresses: [223.5.5.5, 119.29.29.29]

写完执行:

sudo netplan try # 带 120 秒自动回滚的试运行,强烈推荐 sudo netplan apply

netplan try这个命令值得单独夸一句:它应用配置后如果 120 秒内没确认,会自动回滚。远程改网络配置时,用它可以救命——配置写错导致断连,它会自动改回来。

如果改完/etc/resolv.conf里的 DNS,重启又变回去了,那是被systemd-resolved覆盖了。别直接改这个文件,正确做法是在 netplan 或 NetworkManager 里配置 DNS。要临时调试可以:

resolvectl status resolvectl query www.example.com

排查网络链路我习惯按这个顺序走:ip a看网卡有没有地址,ip r看默认路由在不在,ping网关,ping外部 IP,dig域名。每步定位一层,比瞎试快得多。

4.3 中文显示、时区与解压乱码

"linux 解压文件乱码"是个高频搜索词,根源在于压缩包是用 GBK 编码打包的,而 Linux 默认 UTF-8 解码。

先用locale确认语言环境,如果输出里有LANG=C或POSIX,说明没启用 UTF-8。生成并设置:

sudo locale-gen zh_CN.UTF-8 en_US.UTF-8 sudo update-locale LANG=zh_CN.UTF-8

重启后中文文件名就能正常显示了。服务器环境我建议同时保留en_US.UTF-8,因为很多程序的英文日志比中文翻译更好搜。

解压乱码的几种解法:

# unzip 指定编码(部分版本支持) unzip -O CP936 archive.zip # 用 7z,兼容性更好 7z x archive.zip # 用 unar,自动探测编码 unar archive.zip

unar是我最推荐的,它会自动判断压缩包编码并转成 UTF-8,省心。如果系统没有,sudo apt install unar装上。

ZIP 里的文件名其实有编码标记位,只是很多打包工具不写。真要彻底避免,打包时就用 UTF-8,跨平台传文件尽量用 tar.gz。

时区也要设对,不然日志时间对不上:

timedatectl set-timezone Asia/Shanghai timedatectl status

4.4 SSH 与终端体验优化

服务器版系统默认可能没装 SSH 服务,先装上:

sudo apt install -y openssh-server sudo systemctl enable --now ssh

然后改/etc/ssh/sshd_config:

  • PermitRootLogin no:禁止 root 直接登录,攻击面小很多。
  • PasswordAuthentication:内网练习可以开着,一旦要暴露到更大范围,改成no并用密钥登录。
  • Port:改默认端口能减少自动化扫描的噪音,但别指望它是安全手段。

配置免密登录,三行搞定:

ssh-keygen -t ed25519 -C "vm-dev" ssh-copy-id user@192.168.10.100 ssh user@192.168.10.100

防火墙记得放行,Ubuntu 用 ufw:

sudo ufw allow 22/tcp sudo ufw enable sudo ufw status

终端体验上,我建议至少装 tmux。远程连接断开时,tmux 里的任务不会跟着死掉,这个价值在跑长时间编译或部署时非常明显。想更舒服就换 zsh 加 oh-my-zsh,但要记住:换了 shell 之后,原来的环境变量文件和脚本可能不生效,排查问题时要意识到这一层。

5. 开发环境落地:JDK、Maven、Node、Git、MySQL、VS Code

系统配好了,接下来按实际项目需要装环境。这一节的顺序是按"从底层到应用"排的,你可以按需跳着看。

5.1 JDK 与 Maven:环境变量那点事

装 JDK 最省事的方式是用发行版仓库:

sudo apt install -y openjdk-17-jdk java -version

如果要多个版本共存,用 update-alternatives 管理:

sudo update-alternatives --install /usr/bin/java java /usr/lib/jvm/java-17-openjdk-amd64/bin/java 100 sudo update-alternatives --config java

环境变量别直接写在~/.bashrc里,尤其是需要给服务用的。写在/etc/profile.d/java.sh更规范:

export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-amd64 export PATH=$JAVA_HOME/bin:$PATH

JAVA_HOME配错的典型症状是 Maven 报"找不到 javac"或者 Tomcat 起不来。注意JAVA_HOME要指向 JDK 根目录,不是bin目录,这是最常见的错误。

Maven 用压缩包安装比较灵活:

sudo tar -zxvf apache-maven-3.9.9-bin.tar.gz -C /opt/ sudo ln -s /opt/apache-maven-3.9.9 /opt/maven

然后配/opt/maven/conf/settings.xml,主要是两件事:本地仓库位置和镜像站点。国内网络环境下不加镜像,拉依赖会等到天荒地老。

<localRepository>/data/maven-repo</localRepository> <mirror> <id>aliyun</id> <mirrorOf>central</mirrorOf> <url>https://maven.aliyun.com/repository/public</url> </mirror>

把localRepository放到数据盘是个好习惯,虚拟机磁盘不够时可以直接扩数据盘,不影响根分区。

5.2 Node.js:别用系统自带的老版本

系统仓库里的 Node 版本往往很旧,前端项目直接报错。推荐用 NodeSource 仓库装:

curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - sudo apt install -y nodejs node -v && npm -v

或者用版本管理工具,方便在多个版本间切换。npm 的镜像也要换,否则装依赖同样慢:

npm config set registry https://registry.npmmirror.com npm config get registry

一个高频坑是全局安装时权限不足。有些人直接sudo npm install -g,长期下来会把~/.npm里的文件权限搞乱。正确做法是配置用户级的全局目录:

mkdir -p ~/.npm-global npm config set prefix ~/.npm-global echo 'export PATH=~/.npm-global/bin:$PATH' >> ~/.bashrc source ~/.bashrc

5.3 Git:装完必做的三项配置

sudo apt install -y git git config --global user.name "your-name" git config --global user.email "you@example.com" git config --global core.autocrlf input

core.autocrlf这个配置很容易被忽略。跨 Windows 和 Linux 协作时,换行符不一致会让整个文件在 diff 里显示为全改。Linux 端设成input比较合适。

如果提交要免密,配 SSH 密钥:

ssh-keygen -t ed25519 -C "you@example.com" cat ~/.ssh/id_ed25519.pub

把公钥内容加到代码托管平台的 SSH 设置里。验证一下连通性,看到欢迎信息就说明成了:

ssh -T git@github.com

凭证存储用git config --global credential.helper store可以让 HTTPS 方式记住一次输入,但它是明文存在家目录的,共享机器上别用。

5.4 MySQL:装完必须改的三处配置

sudo apt install -y mysql-server sudo systemctl enable --now mysql sudo mysql_secure_installation

mysql_secure_installation会引导你设置 root 密码策略、删除匿名用户、禁止 root 远程登录、删除测试库。这几步全都建议选是。

然后改字符集,默认的字符集处理中文和特殊符号容易出问题。在/etc/mysql/mysql.conf.d/mysqld.cnf里加:

[mysqld] character-set-server=utf8mb4 collation-server=utf8mb4_unicode_ci bind-address = 127.0.0.1

utf8mb4而不是utf8,因为 MySQL 里的utf8其实是不完整的实现,存某些字符会失败。bind-address设成127.0.0.1表示只监听本机,这是虚拟机里跑数据库的默认安全姿势。如果宿主机上的客户端要连,改成虚拟机网卡的实际地址,同时创建只允许特定来源 IP 访问的账号:

CREATE USER 'dev'@'192.168.10.%' IDENTIFIED BY 'strong-password'; GRANT ALL PRIVILEGES ON dev_db.* TO 'dev'@'192.168.10.%'; FLUSH PRIVILEGES;

千万别图省事用'dev'@'%'加弱密码,虚拟机一旦切到桥接模式,整个局域网都能试你的密码。

忘了 root 密码也不用重装,停掉服务,用--skip-grant-tables方式启动,改完再正常重启即可。

5.5 VS Code 与 C/C++、Python 环境配置

写代码不必在虚拟机里开图形界面。用 VS Code 的远程开发功能,宿主机的编辑器直接连虚拟机的文件系统,体验是本地级的。

流程是:装好 VS Code,安装远程开发相关扩展,配置 SSH 主机信息,然后连上去。连接成功后,扩展是装在远端虚拟机上的,所以编译器、调试器也都要在虚拟机里装:

sudo apt install -y build-essential gdb

C/C++ 的调试配置核心是两个文件:tasks.json描述怎么编译,launch.json描述怎么启动调试。最关键的是miDebuggerPath要指向正确的 gdb 路径,程序路径program要和编译输出一致。报"找不到调试器"基本都是这里写错了。

Python 环境我强烈建议用虚拟环境,不要往系统 Python 里装包:

sudo apt install -y python3-venv python3-pip python3 -m venv ~/venv/myproject source ~/venv/myproject/bin/activate pip install -r requirements.txt

系统 Python 被发行版用于自身工具链,装乱了可能连apt都用不了,这个坑不夸张,真有人遇到过。

6. 常见问题与排查速查表

这一节是整篇最实用的部分,全是实际操作中撞出来的。

6.1 高频故障现象与处置方法

现象常见原因处置方法
VMware Tools 提示"继续运行脚本未成功运行"已装 open-vm-tools,挂载 ISO 的安装脚本中断检查systemctl status open-vm-tools,功能正常则忽略
虚拟机无法全屏、分辨率固定未装桌面版 Tools 组件安装open-vm-tools-desktop并重启
复制粘贴在宿主机与虚拟机间失效Tools 服务未运行重启 open-vm-tools 服务,或重装
桥接模式拿不到 IP公司网络做了 MAC 绑定或地址池不足切 NAT 模式;或手动配静态 IP
宿主机 ping 不通虚拟机防火墙拦截检查 ufw / firewalld 规则,放行 ICMP 或对应端口
ping 通 IP 但域名解析失败DNS 配置被覆盖或写错用resolvectl排查,在 netplan 里配 DNS
netplan 应用后直接断网YAML 缩进用了 Tab 或字段写错用netplan try试运行,让其自动回滚
中文文件名显示为乱码系统 locale 不是 UTF-8生成并设置zh_CN.UTF-8
解压 ZIP 后文件名乱码压缩包为 GBK 编码用7z或unar解压
克隆后网络冲突MAC 地址、machine-id 重复重新生成 machine-id,重置网卡 MAC
磁盘空间不足日志、缓存、快照堆积清理日志,删旧快照,扩展虚拟磁盘
虚拟机时间与宿主机不一致Tools 时间同步未生效安装 open-vm-tools,开时间同步,配 NTP

6.2 克隆与快照的三个隐藏坑

克隆虚拟机做集群实验很方便,但有三个地方必须处理,否则会出现"两台机器互相打架"。

第一是 MAC 地址。VMware 克隆时可以选择重新生成 MAC,一般建议重新生成。如果保留原 MAC,同一网络里两台机器抢同一个地址,网络会时通时断,非常难查。

第二是 machine-id。Linux 的/etc/machine-id是系统唯一标识,克隆后会重复,影响 DHCP 行为和某些服务。处理方式:

sudo rm /etc/machine-id sudo systemd-machine-id-setup sudo hostnamectl set-hostname node2

第三是主机名。两台都叫同一个名字,SSH 连上去自己都分不清连的是哪台。

快照的坑则是空间。快照不是"备份",它是记录差异块,虚拟机跑得越久,快照文件越大。我见过有人开着快照跑了三个月,磁盘涨了 80GB。建议快照只保留关键节点,做完实验就删。

6.3 磁盘扩容的完整流程

根分区满了不想重装,可以扩容。先在 VMware 界面里把磁盘从 60GB 扩到 100GB,然后在系统里操作:

# 查看磁盘和分区 lsblk # 扩展分区(假设根分区在 /dev/sda3) sudo growpart /dev/sda 3 # 如果是 LVM,扩展逻辑卷 sudo pvresize /dev/sda3 sudo lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv # 扩展文件系统 sudo resize2fs /dev/ubuntu-vg/ubuntu-lv # 如果根分区不是 LVM 而是直接分区 sudo resize2fs /dev/sda3

顺序很重要:先扩物理分区,再扩逻辑卷,最后扩文件系统。跳步会报错。growpart命令可能需要装cloud-guest-utils才有。

操作扩容前一定打快照,分区表操作失误可能导致整个系统起不来。

7. 一些长期使用后的经验判断

虚拟机跑 Linux 这件事,装一次是入门,用顺手了才是本事。分享几条我自己总结的判断标准。

关于快照策略:我始终保持"干净系统"和"环境配好"两个基础快照,中间阶段的实验随便造,出问题回到基础点。这样既有回滚能力,又不会让快照链长到影响性能。

关于资源分配:宁少勿多。给虚拟机分配过多内存,宿主机一卡,虚拟机也会跟着卡。CPU 核心同理,分 2 个核的虚拟机通常比分 4 个核跑得更稳。

关于共享文件夹:它的性能一般,不适合当工作目录。我一般只用它传文件,代码还是放在虚拟机本地磁盘。如果发现共享目录看不见,先确认 Tools 装的是桌面版,再检查vmhgfs-fuse挂载状态。

关于宿主机与虚拟机的网络连接方式:日常用 NAT,需要给同事演示服务时临时切桥接,用完切回来。切换后 IP 会变,记得更新 SSH 配置。

关于内核与驱动:更新内核后,重新编译过的模块可能需要重装。open-vm-tools 走的是发行版仓库,通常跟着内核一起更新,不用手动处理,这也是我推荐它而不是官方 ISO 的原因。

最后一条,我觉得最值钱:虚拟机最大的价值不是"能装 Linux",而是"能随便搞坏"。我很多关于分区、引导、内核参数的经验,都是在虚拟机里试出来的。别怕把它玩坏,怕的是你不敢动手。

如果你也在做类似的配置,从最简单的 Ubuntu Server + NAT 组合开始,一路装到能跑项目,大概两小时。之后每加一个组件,就打一个快照,这套流程滚一遍,基本就形成肌肉记忆了。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/29 14:17:39

Java赛车游戏源代码完整解析:Swing渲染、碰撞检测与课程设计实战

简介&#xff1a;这是一份面向Java初学者与游戏开发入门者的2D赛车游戏源代码&#xff0c;适合想通过完整项目理解面向对象编程与游戏循环机制的开发者练手。代码围绕赛车、赛道、障碍物等元素展开&#xff0c;涉及GUI绘制、键盘事件监听、碰撞检测、帧动画与游戏逻辑等核心环节…

作者头像 李华
网站建设 2026/9/29 14:16:23

多智能体系统生产落地:架构设计的关键决策与踩坑实录

这两年我接触了不少想上多智能体的团队&#xff0c;大家的起点几乎一样&#xff1a;先跑通一个Demo&#xff0c;让三五个Agent在测试环境里互相调用、写写总结、做做检索&#xff0c;效果确实能唬住人。但等到真的想把这些Agent放进生产环境&#xff0c;事情就变味了。最近一份…

作者头像 李华
网站建设 2026/9/29 14:16:13

R语言逻辑回归临床预测模型:从Lasso变量筛选到ROC与列线图

简介&#xff1a;这份资源面向医学统计与临床预测建模的初学者及进阶学习者&#xff0c;围绕R语言构建逻辑回归临床预测模型的完整链路展开&#xff0c;涵盖数据预处理、Lasso回归变量筛选、ROC曲线定制绘制以及Delong检验比较模型性能等核心环节&#xff0c;帮助读者掌握从建模…

作者头像 李华
网站建设 2026/9/29 14:11:46

前端转型AI Agent该如何学习?(前置篇)

1. 为什么前端要转型 AI Agent 这两年 AI 领域最热的关键词&#xff0c;除了大模型本身&#xff0c;就是 Agent&#xff08;智能体&#xff09;。很多前端同学会问&#xff1a;我一直在写页面、做交互&#xff0c;跟 AI Agent 有什么关系&#xff1f; 其实关系非常大。Agent 的…

作者头像 李华