ARTICLE DETAIL

资讯详情

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

虚拟机搭建Linux环境全指南:从选型配置到开发排错

虚拟机搭建Linux环境全指南:从选型配置到开发排错 很多朋友一听到“搭建虚拟机环境Linux”脑子里第一个动作就是去下载VMware、拉一个ISO镜像然后一路下一步。等你真正装完开始用才会发现里面的细节多到让人头疼镜像选哪个版本、磁盘怎么分、网络配不通、宿主机蓝屏、虚拟机连不上。这篇我用实际经验把整条路再走一遍从选型到安装再到日常开发和排错一次性捋清楚。我做这套环境主要服务两类需求一类是学习Linux命令、熟悉服务部署另一类是在Windows宿主机上跑一个贴近生产环境的开发机用来调Nginx、编译代码、跑脚本。如果你也是其中一种那这篇内容大概率能帮你省下不少折腾时间。1. 用虚拟机跑Linux先想明白这三件事1.1 需求决定选型你到底是哪种用法虚拟机这个东西本质上就是在你的物理机上模拟出一整套计算机硬件让Linux以为自己在独立机器上运行。它和我们常说的双系统不一样双系统每次只能进一个虚拟机则可以在Windows窗口里随时启动、暂停、快照两个系统互相不打扰。但这个“不打扰”是有代价的虚拟化有性能损耗同时宿主机还得持续供电和供资源。所以第一个要解决的问题是弄清楚自己属于哪一类用户刚入门想学命令行和Shell脚本这种情况不需要太高的性能VirtualBox或者VMware Player足够重点是系统要稳定、资料多。后端开发调试业务代码要跑在Linux服务器上本地虚拟机就要尽量接近生产环境网络模式、端口转发、目录挂载都得认真配。运维测试人员经常要在干净的系统里验证部署脚本、软件包、配置文件这时候快照和克隆能力最值钱改坏了立刻回滚。嵌入式或内核方向这类需求不只看系统能不能跑起来还要看能否加载内核模块、直通USB调试器、访问串口。虚拟机里做嵌入式很多坑源自虚拟化设备与真实硬件驱动的差异。我身边一个真实的例子有朋友听说Ubuntu好用直接装了最新桌面版结果他要跑的中间件只提供CentOS版本的安装包折腾半天最后全部推翻重来。所以在动手前先回答一个问题——你要在这个虚拟机环境里跑什么这个答案会直接决定后续所有选择。1.2 主机系统与虚拟机软件的组合考量虚拟机软件选型常年纠结在VMware Workstation和VirtualBox之间。我把实际使用的对比放在这里对比项VMware Workstation ProVirtualBox付费模式商业软件但历史上有过免费个人版开源免费图形性能3D加速较好跑桌面Linux更流畅桌面体验弱一些做服务环境够用网络管理NAT、桥接、仅主机三模式直观可靠支持完整网络模式配置稍繁琐快照克隆操作方便面板清晰支持但界面和导出略老资源占用偏高更轻量我自己长期用VMware因为它的网络配置和快照管理确实省心。但如果你只是要一个能跑命令的LinuxVirtualBox完全够用而且少了很多授权上的顾虑。这里还要提一个目前很常见的替代品Windows Subsystem for Linux。WSL的启动速度快、资源占用少做一个命令行环境很舒服。但它和完整虚拟机有本质区别——没有完整虚拟硬件、不模拟BIOS引导、systemd行为不标准跑网络服务、内核模块这类场景会和真实Linux有偏差。你要是想深入学习Linux或者要复现服务器环境还是老老实实用完整虚拟机。1.3 BIOS里那个被忽略的开关很多人装虚拟机卡在“系统无法启动”“CPU不兼容”这类问题上翻来覆去找原因最后发现是BIOS里的虚拟化开关没开。Intel平台的叫Intel Virtualization TechnologyAMD平台叫SVM Mode。有些品牌机默认是关闭的需要在开机按Del或F2进入BIOS在Advanced或者Security菜单里找到并开启。这个操作特别基础但影响特别大。不开虚拟化的情况下VMware启动虚拟机经常直接黑屏或报错VirtualBox更是会明确提示“VT-x is not available”。你在安装虚拟机软件之前可以先打开任务管理器切到“性能”标签看“虚拟化”那一项是否显示“已启用”。如果显示“已禁用”大概率是BIOS层面的问题而不是软件设置能解决的。2. 环境准备镜像下载、虚拟化开关和虚拟机创建参数2.1 镜像版本选择与软件源的关系Linux发行版那么多选型逻辑其实就两条目标生态和更新周期。开发环境偏Debian/Ubuntu资料多、软件新、遇到问题容易搜索服务端生产环境则很多沿用RHEL系比如Rocky Linux、AlmaLinux它们可以兼容过去CentOS的运维习惯。镜像下载别去官网硬磕国内环境用阿里云镜像、清华TUNA、中科大镜像站速度差距非常明显。下载的时候注意区分桌面版和Server版还要注意架构普通PC选x86_64Apple芯片的机器做ARM虚拟机又是另一套玩法。另外一个特别容易踩的坑很多人只在下载镜像时想到了“换源”装完系统以后才发现apt或者yum装个包慢得像爬这才意识到软件源还没换。安装介质用的镜像源和系统内部包管理器的软件源是两个概念要在系统里把/etc/apt/sources.list或/etc/yum.repos.d/下的配置一并换成国内源后面的体验才会顺畅。至于银河麒麟这类面向特定场景的产品官方会提供适配虚拟化平台的镜像或安装文档。装这类系统我建议直接查官方资料不要完全依赖论坛碎片教程因为版本匹配要求比社区发行版更严格自己乱试容易浪费时间。2.2 虚拟机硬件分配的逻辑创建虚拟机的参数设置看似简单其实暗含一套资源分配逻辑。用通俗的话讲你是在跟宿主机的操作系统“合租”这台电脑你不能把所有资源都抢走。内存分配是我见过问题最多的地方。总的原则是宿主机至少留2GB给自己其余再考虑虚拟机。16GB内存的机器给虚拟机4GB是比较稳妥的数值如果直接分出12GB一旦编译或跑服务宿主机先卡死虚拟机也跟着遭殃。CPU分配也常见误区。物理机如果只有4核8线程那分配给虚拟机的逻辑处理器数量不宜超过4个给2到4个都比较合理。有些人觉得核数越多编译越快拉到8个去跑结果调度的开销比收益还大性能反而变差。磁盘设置同样有讲究。创建虚拟磁盘时通常会让选择“拆分成多个文件”还是“单个文件存储”。拆分模式方便复制和迁移单个文件性能略优如果你不需要频繁搬动虚拟机选单个文件更顺畅。动态分配磁盘适合大多数人空间用多少占多少但如果你对磁盘I/O有较高要求固定大小磁盘会更稳代价是创建时就占满空间。还有一个小细节创建向导里让你选择客户机操作系统的类型和版本别随便选也别选错了。它会影响虚拟机固件、驱动适配和后续增强工具的安装方式。拿Debian的模板去装Ubuntu一般能跑但一些小毛病会让人摸不着头脑。3. 安装过程全实录引导、分区、系统初始化3.1 从镜像启动到分区安装的关键动作安装Linux的过程现在绝大多数发行版都图形化了难度比几十年前低太多。难点往往集中在两处ISO挂载方式和磁盘分区。先说明一下挂载方式VMware中可以直接把下载好的ISO文件配置到“CD/DVD驱动器”勾选“启动时连接”然后启动虚拟机。虚拟机能不能从ISO引导和虚拟机固件类型有关传统BIOS和UEFI的引导流程不一样。如果你的物理机用了UEFI建议虚拟机选择UEFI固件装一些较新的发行版更省心。进入安装界面以后语言、键盘、时区这类选项没什么好说的。重点说分区。如果你不想因为分区问题卡住最稳的方案是选择整个磁盘自动分区。很多人看教程喜欢手动分/boot、/、/home和swap但对初学者来说手动分区最容易出现的问题是根分区空间不够。比如有人分给/只有20GB装完系统、再装一两个开发环境磁盘直接见底。我的建议是如果不是有明确的生产要求就选“使用整个磁盘并配置LVM”或者“使用整个磁盘”。系统自己管理磁盘布局后续要扩容也有余地。LVM概念不复杂可以把它理解成一块可以动态调节分区大小的空间池比传统固定分区灵活值得优先考虑。swap分区的大小不必像老教程说的“内存两倍”。如果虚拟机内存分配了4GB以上swap给2GB足够如果跑编译任务可以考虑给4GB但不要舍本逐末去追求所谓“标准值”。安装过程中还会让你创建用户和密码建议创建一个普通用户用于日常操作不要直接用root。很多发行版安装器会询问“是否使用root登录”生产习惯和练习习惯不同我倾向于默认禁止root直接登录用sudo提权就够了。3.2 安装后第一件事网络打通与SSH配置系统装完重启第一件事不是打开桌面东点西点而是确认网络通不通。先用几个命令快速判断ip addr # 查看网卡和IP地址 ip route # 看网关 ping -c 4 223.5.5.5 # 测试外网连通性 ping -c 4 baidu.com # 测试DNS解析如果 ping IP 通、ping 域名不通那基本是 DNS 配置问题。临时测试可以用echo nameserver 223.5.5.5 | sudo tee /etc/resolv.conf先顶上但要注意很多系统里这个文件会被系统服务接管重启后可能被覆盖。想固化配置Debian系和RHEL系改法不一样一个是/etc/network/interfaces或 Netplan另一个是/etc/sysconfig/network-scripts/下的网卡配置文件。开SSH也很关键毕竟虚拟机里操作窗口再方便也比不上从Windows终端直接SSH进去顺手。Ubuntu Server默认可能不装SSH服务端需要手动执行sudo apt update sudo apt install -y openssh-server sudo systemctl enable --now sshd之后在Windows端用ssh 用户名虚拟机IP就能连了。如果连不上优先查两件事一是虚拟机防火墙是否放行22端口二是虚拟机的网络模式是不是NATNAT模式下宿主机访问虚拟机需要额外的端口转发配置这个下一节详细说。创建一个日常使用的用户也很基础sudo useradd -m -G sudo dev sudo passwd dev这样你就有一个带管理员权限的日常账号而不是一直顶着root干活。4. 真正好用的虚拟机环境网络、文件共享与开发环境4.1 三种网络模式与IP规划VMware和VirtualBox都提供三种网络模式很多人只知道其一不知道三种模式在什么时候该用哪个其实这个决定了你能不能顺利访问到虚拟机里的服务。NAT模式是最省心的选择宿主机和虚拟机之间通过一个虚拟NAT设备通信虚拟机能上网宿主机能访问虚拟机虚拟机对外不可见。适合绝大多数开发场景。桥接模式则是让虚拟机和宿主机一样直接在局域网里拿一个真实IP外部设备也能直接访问虚拟机适合部署测试服务。仅主机模式则是一个完全隔离的虚拟网络虚拟机之间和宿主机之间互通但默认上不了外网。搞清楚模式之后修改IP就顺理成章了。Debian系用Netplan的配置文件写法大概是sudo vim /etc/netplan/01-network-manager-all.yamlnetwork: version: 2 ethernets: ens33: dhcp4: no addresses: - 192.168.100.128/24 routes: - to: default via: 192.168.100.2 nameservers: addresses: - 223.5.5.5然后执行sudo netplan apply。注意别把网关地址写错NAT模式下VMware的默认网关通常是192.168.x.2VirtualBox是10.0.2.2具体以实际为准。很多朋友改完IP重启失效原因往往是在用DHCP的机器上手动改IP却没有阻止DHCP客户端的覆盖行为。要么在配置里去掉dhcp4要么直接改成静态地址。顺便提一句挂载NAS存储或远程目录也是虚拟机环境里很常见的需求。Linux下用mount.cifs挂载Windows共享sudo apt install -y cifs-utils sudo mkdir -p /mnt/nas sudo mount -t cifs //192.168.1.10/share /mnt/nas -o usernamedev,uid1000,gid1000这样虚拟机里的开发目录就能和物理机共享不用每次拷来拷去。4.2 端口转发与Nginx多站点自定义域名“本地虚拟机 多端口Nginx 开发环境多站点自定义域名配置”这个场景很典型。需求是这样的你在Windows宿主机上开发代码跑在虚拟机里的Nginx上希望通过自定义域名myproject.test来访问而且虚拟机里有多个站点。先把主流程拆解一下虚拟机里装好Nginx配置多个服务站点监听不同端口或用不同server_name区分设置VMware NAT端口转发把宿主机端口映射到虚拟机端口Windows hosts文件里把域名指向本机地址实现“免部署”的本地开发体验。Nginx配置多站点核心是虚拟主机。假设虚拟机IP是192.168.100.128站点A监听8081站点B监听8082server { listen 8081; server_name projecta.test; root /var/www/projecta; index index.html index.php; } server { listen 8082; server_name projectb.test; root /var/www/projectb; index index.html index.php; }然后在VMware的“虚拟网络编辑器”里选中NAT模式的网卡点击“NAT设置”添加端口转发宿主机端口虚拟机IP虚拟机端口8081192.168.100.12880818082192.168.100.1288082最后修改Windows的hosts文件添加两条记录127.0.0.1 projecta.test 127.0.0.1 projectb.test这样访问projecta.test:8081就会通过宿主机端口转发把请求送到虚拟机Nginx再按域名路由到对应站点。整个过程对浏览器是透明的调起接口和配置代理时非常舒服。踩过的小坑是Windows有些程序会劫持hosts或者浏览器端走系统代理绕过本地解析导致自定义域名不生效。排查时可以先ping projecta.test看解析结果是否指向127.0.0.1再确认浏览器没有开启“绕过本地地址的代理”。4.3 用虚拟机搭C、Python与Shell开发环境很多人装完虚拟机下一步就是配开发环境。这里有一个高效做法不要APTon软件一个个手动装直接用构建工具链一把梭。Ubuntu/Debian系安装基础开发环境的命令sudo apt update sudo apt install -y build-essential sudo apt install -y python3 python3-pip python3-venv sudo apt install -y gdb git curl wget vimbuild-essential包含gcc、g、make等编译工具是C/C开发的地基。Python这边不要直接污染系统Python建议创建虚拟环境sudo apt install -y python3-venv mkdir -p ~/projects/myapp cd ~/projects/myapp python3 -m venv venv source venv/bin/activate pip install flask requestsShell脚本开发不需要刻意装什么但建议装shellcheck做静态检查sudo apt install -y shellcheck平时写脚本顶部的 shebang、变量引用加双引号、set -euo pipefail 这几个习惯比任何工具都重要。虚拟机里做开发还有一个好处你可以在里面随便折腾配坏了快照回滚不用像物理机那样小心翼翼。如果做嵌入式方向可能还会涉及交叉编译链和USB设备直通虚拟机的USB过滤器可以指定直通某个USB设备但宿主机和设备驱动之间可能有冲突必须注意别让Windows同时抢占设备。5. 高频问题排查与运维小技巧5.1 蓝屏与“无法启用虚拟机平台”我见过最多的报错就是Windows下VMware虚拟机启动蓝屏以及提示“无法启用虚拟机平台”。这两个问题表面看是不同故障但实际上经常是同一根源Windows的虚拟化平台与VMware冲突或者CPU虚拟化本身没开。先说CPU虚拟化前面提过BIOS里的Intel VT-x或AMD SVM必须开启。任务管理器“性能”页如果显示虚拟化“已禁用”其他配置再怎么弄都白搭。再来看Windows自身的冲突。Win10/11会默认启用基于虚拟化的安全功能比如内核隔离和内存完整性。有些安全软件也会依赖Hyper-V导致VMware无法使用。遇到VMware启动蓝屏优先尝试关闭“内存完整性”打开Windows安全中心进入“设备安全性”选择“内核隔离”并关闭“内存完整性”重启后再试。另一个常见操作是在“启用或关闭Windows功能”里把“虚拟机平台”和“Windows虚拟机监控程序平台”取消勾选重启后看VMware是否恢复正常。如果这两项必须保留那就可以考虑改用Hyper-V或VirtualBox不是死磕就一定赢。还有一类蓝屏源于VMware驱动和Windows更新的不兼容升级VMware到较新版本基本能解决。一般情况下优先排查虚拟化开关其次是内核隔离。5.2 VMware连接失败与虚拟机目录清理“VMware Workstation 无法连接到虚拟机。请确保您有权运行该程序、访问该程序使用所有配置文件”是很多人会遇到的拦路虎。这个提示的常见原因是VMware Authorization Service服务没起来或者当前用户对虚拟机目录没有权限。先在Windows服务管理器里找到VMware Authorization Service把启动类型设为“自动”然后手动启动。如果还不行检查虚拟机所在目录的权限右键属性里给当前用户添加完整控制权限。很多项目目录放在某个受保护路径下权限问题会直接导致连接失败。删除虚拟机目录也是看上去简单、实际上有暗坑的操作。不要直接去文件夹里ShiftDelete正确的做法是先在VMware里把虚拟机从库中移除然后选择“从磁盘删除”。如果不经过这一层残留的.vmdk映射信息和.vmx配置会在控制台报错或者让你下次新建虚拟机时撞上不可用的文件锁。遇到残留锁文件找到虚拟机目录下以.lck结尾的文件夹和文件删掉就行。5.3 快照克隆与磁盘瘦身快照功能是虚拟机最值钱的特性之一。安装完系统、打好基础环境之后打一个快照后面随便折腾出了故障直接恢复。但快照不是说打得越多越好。每个快照都是一组增量文件快照链越长虚拟机运行需要回溯的数据越多性能越差占用的磁盘空间也会越滚越大。做个实验、确认环境没问题就可以删掉中间快照保留一个干净的基础快照就够了。磁盘瘦身有两个小技巧。一个是在虚拟机关机状态下用VMware自带的磁盘碎片整理和压缩工具另一个是Linux内部先做清理apt autoremove、删除/var/cache/apt/archives下的无用deb包再关机压缩。顺序一定是先在客户机里删再去宿主机侧压缩否则只是把空洞也跟着打包了。还有一类场景是把虚拟机镜像迁移成U盘启动很多人想直接拿DiskGenius这类工具把虚拟磁盘转换到物理U盘。这个做法我已经看人踩坑无数次了虚拟机的磁盘控制器驱动和物理机的不同引导方式也可能不同转换完往往无法启动。如果你不是为了应急恢复数据而是想“把虚拟机变成物理机系统”大概率会浪费时间。5.4 外设共享与剪贴板互通很多人觉得虚拟机隔离性好但用到外设时又希望两者互通。VMware Tools或VirtualBox增强工具装好以后剪贴板、拖拽文件都比较顺滑。如果你发现文件夹共享不生效先检查增强工具是否安装成功再检查共享目录权限。USB设备直通也很实用比如在虚拟机里用OpenOCD连接调试板或者给虚拟机插U盘去烧录镜像。VMware的USB控制器可以选2.0/3.0兼容插上设备后弹出“连接虚拟机”即可。但记住物理机如果正在占用这个设备虚拟机是抢不过来的必须先让物理机“断掉”对设备的占用。6. 分享几个让虚拟机用得更顺手的习惯走到这一步你的虚拟机Linux环境已经能跑能用了但我还是想补充几个实践下来很有用的操作习惯。第一个习惯是“开机关前确认快照点”。每次要做系统级变更比如换内核、装大型软件、改网络配置先确认当前快照还在或者手动打一个新快照。我吃过亏调试网络时手滑改了防火墙结果SSH把自己关在门外想恢复才发现上次快照是三天前的。从那以后凡是动关键配置快照必先打。第二个习惯是“把虚拟机IP固化下来”。DHCP在NAT模式下分配的IP每次重启都可能变化对开发环境来说非常痛苦。建议直接改成静态IP或者到路由器/虚拟网络编辑器里把IP与MAC绑定这样SSH配置、DNS指向、端口转发都稳定。第三个习惯是“在虚拟机里也用版本管理”。Git在虚拟机上装好以后项目代码不要只存在虚拟机本地磁盘因为虚拟磁盘损坏或误删快照都会造成损失。可以把代码仓库直接放在共享目录里或者定期推到远程仓库。“虚拟机也是电脑”这句话归根到底还是数据的鲁棒性问题。第四个习惯是“善用克隆而不是重复安装”。如果你需要多个Linux环境比如一个跑数据库、一个跑缓存、一个跑测试从基础模板克隆是最快的。VMware的克隆可以创建链接克隆共享基础镜像节省磁盘完整克隆隔离性好适合独立测试。两条路都比你重新装三四遍系统省事得多。还有一个容易被忽略的点虚拟机里跑图形桌面会吃掉大量内存如果你的场景不需要图形界面安装时直接选Server版或安装时不要选桌面组件。工作效率反而更高也更接近真实服务器的使用体验。虚拟机折腾到一定程度你可能会越来越觉得它像一台独立的服务器只是恰好跑在你的笔记本里。Nginx多站点、SSH远程管理、防火墙规则、快照回滚这些在实体服务器上要做的事情在虚拟机里全部能练一遍。把这里当作一个低成本试错场后面不管换什么环境心里都有底。
返回列表