ARTICLE DETAIL

资讯详情

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

手把手搭建Linux虚拟机环境:选型、安装到实战配置

手把手搭建Linux虚拟机环境:选型、安装到实战配置 搭建Linux虚拟机环境说实话这些年我帮朋友和同事折腾过不少开发环境见过太多人一上来就拿着主力电脑装双系统结果grub引导崩了、分区表动错了、驱动炸了最后连Windows都进不去只能拿U盘连夜做PE修复。我个人的态度一直很明确想学Linux想搭服务想跑集群第一选择永远是虚拟机。它不用动你现有的系统文件都在一个镜像文件里玩坏了删掉重来连后悔药都不用买。今天这篇就把搭建Linux虚拟机环境的整个思路和实操步骤从头到尾捋一遍从选虚拟机软件、选镜像、创建虚拟机、装系统到配置网络、SSH、共享目录再到把常用的开发环境C语言、Nginx多站点跑起来最后聊几个我踩过无数次的坑。适合准备入门Linux的零基础读者也适合刚拿到新电脑想练手运维的后端开发。1. 为什么我坚决建议用虚拟机而不是物理机或云服务器先说一个很多人忽略的点你学Linux到底是想干什么是想跑起来看看界面还是想当运维练手还是想在里面写代码跑服务目标不一样环境搭建的方式完全不一样。我的经验是虚拟机在这三种场景下几乎通吃。1.1 虚拟机的真正优势快照和随时回滚在虚拟机里最值钱的功能其实是快照Snapshot。啥意思呢就是你装好系统、配好环境之后打一个快照相当于给整个系统拍个照片。之后你随便折腾改坏配置文件了、装错依赖了、把python版本搞乱了甚至把系统搞到起不来直接恢复到之前那个快照就行。这个过程和Windows系统还原类似但要彻底得多。我见过很多新手在物理机上装Linux就是因为一次rm -rf /var/lib这种误操作整个系统废掉又没备份只能从头重装软件、重配环境一个下午没了。在虚拟机里这是五秒钟的事。1.2 和云服务器对比为什么本地虚拟机不可替代云服务器确实方便一台2C4G的机器一年也就几百块但对于学习和练手它有个致命缺点你没法随便折腾底层的东西。改内核参数、重编内核、格式化数据盘、自己搭软路由、弄RAID这些操作很容易把整台云服务器弄到无法连接而云厂商的救援模式用起来又麻烦折腾一次的心情成本高得离谱。本地虚拟机的另一个优势是网络环境极灵活。你可以给它配NAT模式让它在宿主机背后上网可以切桥接模式让它跟你局域网内的其他设备平级还可以建一个仅主机网络让它和宿主机单独通信。这种网络拓扑的自由度云服务器很难复现。尤其是你想模拟内网环境、测试多机之间通信的场景本地虚拟机几乎是你唯一不花钱的方案。1.3 哪些场景根本不建议用虚拟机补盲点虚拟机不是万能的。如果是跑深度学习训练、3D渲染这类对GPU要求超高的负载虚拟机不划算除非你做GPU直通配置复杂且主板支持情况各异。如果只是临时跑一个脚本那直接用Docker资源占用比虚拟机小一个数量级启动按毫秒算。虚拟机适合的是重操作但需要隔离、需要系统级环境、需要反复试错的东西。所以结论很简单对于绝大多数Linux初学者和运维工程师来说本地虚拟机的边际价值是最大的既安全又可控还能随时删掉重来。2. 虚拟机软件和Linux发行版选型这块看起来简单其实很多人在这里就卡住了。虚拟机软件选哪个Linux系统下载哪个版本别说新手我见过用了两年Linux的人还在一台机器上同时装VirtualBox和VMware结果时不时冲突一下。2.1 VirtualBox、VMware和Hyper-V怎么选先说结论如果你用的是Windows系统追求稳定不折腾我推荐VirtualBox。理由有三条开源免费功能足够全快照、克隆、共享文件夹、USB直通这些关键功能都有社区用户基数大出任何问题一搜就有答案。对比项VirtualBoxVMware WorkstationHyper-V价格免费开源商业授权Player免费但功能阉割Windows自带系统级方案性能常规任务足够综合表现略优在Windows下性能不错快照支持支持支持3D加速基础支持更好依赖系统配置适用场景个人学习、测试首选追求性能且预算充足企业Windows环境顺手要用我为什么把VMware排后面因为它在个人学习场景下的免费版本功能受限比如Workstation Player没法直接创建自定义虚拟机配置很多功能要装完系统才能用。而VirtualBox从创建到运行全程傻瓜化没有任何收费陷阱。Hyper-V是Windows专业版自带的它的问题是虚拟机管理界面偏专业、网络配置理解成本高而且开Hyper-V之后宿主机本身也要占用一块虚拟化资源有些老电脑会感到明显的性能下降。2.2 镜像还在下载这几个选择真相Linux发行版很多但对虚拟机学习来说我建议优先选Ubuntu Server LTS版本比如22.04 LTS。为什么不是因为它是最正宗的Linux而是因为它的用户基数最大遇到问题搜解决方案最快软件源在国内也最流畅。特别是你以后要装Nginx、MySQL、Python那些东西Ubuntu系的APT包管理在体感上是所有发行版里最顺滑的。Debian是另一个好选择它比Ubuntu更克制、更稳适合逼自己理解Linux底层配置路径。如果你有国产替代的需求像统信UOS、麒麟做桌面办公体验也很成熟。但实话实说学习服务器运维、命令行操作我还是推荐先从Ubuntu Server开始。镜像下载渠道我习惯用清华的镜像站。注意不要下载成Desktop版学习服务器运维用Server版就够了少一个桌面环境能省下不少内存。2.3 一个被人忽略的问题32位还是64位ARM还是x86现在还在下载32位镜像的人基本是踩了老教程的坑。现在的主流虚拟机软件和操作系统都是64位了32位镜像只适合极老的环境。另外如果你用的是Apple Silicon的Mac那就得注意了VirtualBox对ARM架构的支持一直不怎么样这个场景下我更推荐UTM或者Parallels Desktop前者免费后者付费但顺手。如果你只是想在Intel/AMD处理器上搭环境以上的方案都没问题。3. 从创建虚拟机到装出第一个Linux系统选型完成之后开始动手。这一节我会按完整的顺序拆解每个步骤尽量说清楚为什么这么配免得你照做完了还是一头雾水。3.1 创建虚拟机内存、CPU和磁盘怎么给以VirtualBox为例打开软件点新建。名称随意比如ubuntu-dev文件夹保持默认类型选Linux版本选Ubuntu 22.04 LTS64-bit。然后进入内存设置。这里有个关键原则虚拟机吃的是宿主机资源所以分配多少要看宿主机剩余资源而不是越大越好。我的参考方案宿主机16G内存的笔记本分配4G给虚拟机CPU给2-4核磁盘空间给40G动态分配刚开始只占几个G。如果你要跑编译任务CPU给4核内存给6G如果只是练习命令2G内存都够用。磁盘有个动态分配和固定大小的选择。我建议选动态分配它按需占用宿主机空间不浪费缺点是性能稍微差一丁点但练习场景根本感觉不到。文件放到SSD上就对了。3.2 挂载镜像和设置启动项在虚拟机设置里找到存储给光驱挂载下载好的Ubuntu Server ISO镜像。然后启动虚拟机理论上它会自动从光驱引导。如果黑屏卡住多半是没进BIOS设置启动顺序——让VirtualBox在启动时按F2进BIOS把光驱或UEFI启动调到最前面。引导方式这里有个小知识点新版Ubuntu默认走UEFI较老教程让你调成Legacy BIOS但如果你用的是22.04以上版本用默认的EFI就行别乱改。3.3 安装Ubuntu Server的正确姿势启动之后你看到的是纯文本安装界面别慌这很正常。选Try or Install Ubuntu Server一路选语言、键盘布局默认英语就行别折腾中文以后用apt装中文语言包也容易。网络那块如果你的虚拟机用的是NAT模式直接让它自动DHCP别手动改IP。要点来了安装时让你选安装类型选Use an entire disk但要留意别选错磁盘——它显示的分区名多半是类似/dev/sda的虚拟磁盘。你宿主机上的物理盘在虚拟机里是看不到的这一点相对安全但要确认你没接到任何直通存储。然后设置用户名和主机名。主机名我建议直接用ubuntu-dev这种有语义的名字别用默认的ubuntu以后你多台虚拟机起SSH连接时能省很多事。安装完成后系统会提示你重启并移除光盘。3.4 装完之后的第一件小事更新系统和软件源重启后登录先跑一条命令sudo apt update sudo apt upgrade -y这一步的目的是把系统软件源索引和软件包更新到最新。但这里我要多说一句经验如果你在安装时用的是默认的archive.ubuntu.com源在国内这个更新的速度可能慢到你想骂人。解决办法是换源改成阿里云或清华的镜像源sudo sed -i s//.*archive.ubuntu.com//mirrors.aliyun.comg /etc/apt/sources.list sudo apt update之后你再用apt装东西速度会有一个质的飞升。如果你装的是Ubuntu 22.04源文件路径可能已经变成/etc/apt/sources.list.d/ubuntu.sources新版24.04也类似用ls /etc/apt/sources.list.d/看一下再做修改。4. 网络、SSH和共享目录让虚拟机融入你的日常使用装好系统只是开始新生儿的会说话还得靠网络和外部连接。没有这一步你只能在虚拟机窗口里敲命令几乎谈不上开发效率。4.1 NAT、桥接和仅主机模式该选谁VirtualBox默认给虚拟机的是NAT模式。这个模式下虚拟机可以上网但宿主机和虚拟机之间通信要特别注意虚拟机的IP不是局域网IP而是虚拟网段的地址通常类似10.0.2.x。当你以后要从Windows上SSH进虚拟机NAT模式需要做端口转发稍微麻烦一点。桥接模式则让虚拟机直接出现在你的局域网里相当于它是一台独立的机器。它的好处是IP地址和宿主机在同一个网段可以直接用SSH连接也方便和其他设备互通。缺点是你的局域网里多了一个占用IP的设备公司网络下可能受限。我的建议是学习阶段直接用桥接模式。这样你从Windows控制台执行ssh ubuntu-dev192.168.x.x直接就连上去了而不用折腾端口转发。怎么切在虚拟机设置里把网络方式改成桥接网卡然后在虚拟机的/etc/netplan/下配置静态IP或继续用DHCP。Ubuntu Server默认用DHCP所以切完桥接重启网络就能自己拿到IPsudo netplan apply查看IP地址用ip addr show找状态为UP且带IP的那个网卡比如enp0s3。4.2 启用SSH服务并做免密登录Ubuntu Server装完默认没装SSH服务端。你直接用sudo apt install openssh-server -y sudo systemctl enable ssh --now然后从宿主机验证ssh 用户名虚拟机IP连接成功后我建议立刻配置SSH密钥免密登录别老输密码。在宿主机上ssh-keygen -t ed25519 ssh-copy-id 用户名虚拟机IP之后ssh进去就是秒连。这一步对多台虚拟机尤其值因为你以后大概率会同时管理两三台机器输密码的时间加起来很可观。4.3 共享文件夹宿主机和虚拟机之间传输文件的最优选临时传文件用scp、rsync都行但日常开发最舒服的还是共享文件夹。VirtualBox的设备菜单里选共享文件夹添加一个宿主机路径比如D:\vm_share在虚拟机里挂载到一个本地目录。重点来了如果直接挂载完发现权限不对别急着怀疑系统问题。共享文件夹的挂载指令一般长这样sudo mount -t vboxsf vm_share /mnt/share开机自动挂载的话写进/etc/fstabvm_share /mnt/share vboxsf defaults,uid1000,gid1000 0 0sudoless那个小坑如果你用的是普通用户加uid1000,gid1000来指定挂载后的属主否则文件写进去全变成root的你在虚拟机里操作起来又是权限地狱。想在Windows和虚拟机之间快速传小文本共享文件夹是最省心的方案。5. 在虚拟机上把开发环境跑起来C语言和Nginx多站点环境搭好了接下来就该让它干活了。我拿两个最常见的场景来示范一个是在Ubuntu虚拟机上配置C语言编译环境一个是本地虚拟机配合用Nginx做多端口多站点自定义域名配置。前者是学计算机基本功后者是实际开发会遇到的典型需求。5.1 Ubuntu虚拟机配置C语言编译环境这个步骤没什么花活就一句话sudo apt install build-essential gdb -ybuild-essential是元包里面包含gcc、g、make等核心编译工具。gdb是调试器写C程序调试时离不开。验证一下gcc --version然后写一个helloworld测试编译cat main.c EOF #include stdio.h int main() { printf(hello from linux virtual machine\n); return 0; } EOF gcc -o hello main.c ./hello能看到输出就说明环境没问题。这时候我多说一句C语言编译的潜规则gcc命令的常用参数-Wall一定要养成习惯它会打开几乎所有的常见警告很多潜在的bug在编译阶段就暴露了远比运行时查段错误来得实在。练习命令也别偷懒从vim开始写别看教程里那些图形化IDE命令行下的C开发才是最贴合Linux服务器场景的。5.2 本地虚拟机协同Nginx多端口多站点自定义域名配置这个场景我在实际项目中经常用本地Windows上跑个前端调试服务虚拟机上跑Nginx作为入口通过不同端口或不同域名转发到不同的本地服务。第一次配的时候我也踩了不少坑这里把核心操作讲清楚。首先装Nginxsudo apt install nginx -yNginx的配置核心在于/etc/nginx/sites-available/下新建配置文件然后用软链接启用它。很多人直接去改/etc/nginx/nginx.conf那样做很容易把主配置搞乱。我推荐这种方式新建一个站点配置比如/etc/nginx/sites-available/myappserver { listen 8080; server_name app1.local; root /mnt/share/app1; index index.html; }再新建一个/etc/nginx/sites-available/otherappserver { listen 8081; server_name app2.local; root /mnt/share/app2; index index.html; }启用站点sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/ sudo ln -s /etc/nginx/sites-available/otherapp /etc/nginx/sites-enabled/ sudo nginx -t sudo systemctl reload nginx关键点自定义域名app1.local不是真实域名怎么让它生效在你Windows宿主机上修改C:\Windows\System32\drivers\etc\hosts加两行192.168.1.100 app1.local app2.localIP改成你虚拟机的IP。这样你在Windows浏览器访问http://app1.local:8080请求会指向虚拟机IP的8080端口Nginx接住后从共享目录取文件。整个链路就通了。我在这个环节踩过的最大坑是文件夹权限。Nginx进程默认以www-data用户运行如果共享文件夹或HTML文件的权限不对浏览器打开就是403。解决办法是确保目录的可读权限开放sudo chmod -R or /mnt/share/或者更细粒度地调整目录权限这样只对网站目录开读权限不会影响其他文件。6. 快照、故障排查和杂项经验搭建环境你最该学会的不是怎么装而是坏了怎么救。虚拟机环境的核心价值就在这——坏了可以拿快照回来。但快照也不是万能的这块我详细说一下。6.1 快照怎么打、怎么回滚、怎么删除才不心疼创建快照的时机推荐三个系统刚装好并完成基础配置之后打一个开发环境全部配好之后打一个遇到重大变更比如升级内核之前打一个。在VirtualBox里机器菜单选生成备份命名像base-config-2024这样带日期和用途的名字别叫备份1“备份2”以后恢复时你会感谢自己。恢复快照时直接恢复备份它会问你是保存当前状态还是丢弃除非你确定当前状态没用否则一般保留。快照占用磁盘空间是递增的——每次快照只是记录差异部分但打多了磁盘占用还是会上涨定期删除不需要的旧快照是习惯性问题。6.2 虚拟机蓝屏或启动失败怎么抢救虚拟机安装Linux蓝屏这个热搜词不是没有原因的。VirtualBox在某些机型上如果开启了嵌套虚拟化VT-x/AMD-V或者BIOS设置里虚拟化开关没打开就可能蓝屏。遇到蓝屏先做这几步排查进宿主机BIOS确认虚拟化技术Intel VT-x或AMD SVM已开启。在虚拟机设置里把系统-加速-启用VT-x/AMD-V勾上。如果安装时选了糖浆式的一路下一步导致UEFI不匹配试试把虚拟机的EFI模式关掉换成BIOS。还有一个低频事件Windows更新之后虚拟机启动异常。这是VirtualBox版本太老和新版本Hyper-V冲突导致的。解决办法是升级VirtualBox到最新版或者在Windows功能里关闭Hyper-V如果你没在用。但注意关闭Hyper-V可能影响WSL2两者取舍要看你的主要用途。6.3 磁盘空间不够怎么扩展动态分配的磁盘有上限用的是真实物理磁盘空间。一旦用满虚拟机很难启动。扩容思路先在VirtualBox里把虚拟磁盘的大小调大然后进虚拟机用fdisk新建分区、resize2fs扩展文件系统。这个过程如果没做过容易出错我的建议是优先检查有没有大文件可以清理du -sh ~/* 2/dev/null | sort -rh | head日常习惯上把临时文件和下载包清干净比扩容实在得多。真要扩容先打快照再操作别跟自己过不去。6.4 宿主机资源占用高几个调优技巧虚拟机吃CPU和内存宿主机卡顿是常态。我的调整思路虚拟机的显示设置里显存调低因为你不跑桌面界面显存就是个摆设关掉3D加速在系统设置里取消勾选启用软驱之类用不到的硬件模拟。另一个技巧是在虚拟机里装Linux时选择安装Server版而不要装Desktop版上面已经提过了这一步可以把内存占用直接从500MB压到150MB左右。7. 写在最后我踩过的坑和给你的建议搭建虚拟机这件事本质上不是装个系统这么简单而是在为你将来在真实服务器上的操作做一个安全演练场。越是能在虚拟机上大胆尝试、放肆折腾的人真上了生产环境越会小心翼翼这两种状态正好互补。最后再分享几个实用经验第一我强烈建议你在虚拟机里用命令行操作别装图形桌面你会发现自己的进步速度比整天点鼠标快得多。第二时刻记着打快照哪怕只是改一行配置文件要养成变更前快照、出错马上回滚的习惯尤其在做运维相关练习的时候这个习惯能救你大命。第三如果你以后要同时管理多台虚拟机优先学一下SSH密钥和ssh config的配置方式定义好别名之后切换机器真的是一秒都不用等。搭建Linux虚拟机环境这块其实没有太多高深的东西关键是每一步都踩稳了、明白了为什么这么做。照着上面这套流程走下来你手里就有一台随时可以折腾、坏了可以一键恢复的Linux开发机了。以后不管你是想学运维、搞嵌入式、折腾服务集群还是写脚本这台虚拟机就是你最忠实的试验田。
返回列表