尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
Linux磁盘分区与NAT网络配置:从GPT/LVM到iptables/WSL实战
我干过几年服务器运维和嵌入式Linux开发最常被刚入行的朋友问到两件事磁盘怎么分才合理虚拟机NAT网络怎么配都不通。这两个问题看起来基础实际踩坑极多。比如新装了Ubuntu结果/home空间不够用又比如VMware里NAT模式能上网但Windows宿主机就是访问不到虚拟机里的服务。这篇文章就把这些年折腾Linux磁盘分区和NAT网络配置的经验完整梳理一遍从分区表选型、文件系统规划、LVM逻辑卷到虚拟机NAT原理、Linux网关iptables配置、WSL的NAT模式与镜像模式、Ubuntu netplan网络配置最后附上排查清单和常用命令。不管你是运维、网络工程师还是玩WSL和虚拟机开发的都能从里面找到可以直接抄的配置和避坑点。1. 磁盘分区方案设计先想清楚再动手很多人装Linux系统时安装界面一看到分区就随便点一下自动分区。等用了一段时间系统盘满了、/home不够用了、想单独扩展某个目录却发现当初没有用LVM那时候再来折腾就非常痛苦。所以分区这件事动手前一定要想清楚。1.1 分区表选型MBR还是GPT分区表是磁盘上用来记录分区信息的元数据目前主流就是MBR和GPT两种。MBR是BIOS时代就存在的格式分区表固定放在磁盘最前面最大只支持2TB容量、最多4个主分区。想要超过4个分区就得把其中一个设成扩展分区再在扩展分区里划逻辑分区麻烦得很。GPT是UEFI时代的标准支持超过2TB的大盘默认可以建128个分区而且每一块磁盘在开头和结尾各存一份分区表备份冗余比MBR强很多。特性MBRGPT最大容量2TB8ZB实际受系统限制主分区数量4个128个启动环境BIOS/UEFI兼容模式UEFI为主备份分区表无有适用场景老机器、特殊设备新服务器、虚拟机、电脑现在的电脑和服务器基本都是UEFI启动新装Linux系统我建议一律选GPT。如果你是在虚拟机里装Linux除非有特殊兼容性要求也是选GPT更省心。嵌入式设备上很多开发板用GPT来管理eMMC或SD卡分区多、命名清晰烧写脚本也更好维护。需要注意的一点是如果机器上同时装了Windows和Linux双系统分区表格式必须统一否则另一个系统可能直接认不到磁盘。1.2 文件系统与挂载点规划选完分区表就要选文件系统。Linux下最常用的是ext4、XFS和Btrfs。ext4是老牌稳定派绝大多数发行版默认就是它兼容性好遇到问题资料最多。XFS擅长处理大文件和高并发读写很多服务器用XFS做数据盘。Btrfs则带快照、压缩、校验功能和容器、NAS场景比较搭。我的建议是系统盘用ext4普通数据盘用XFS如果你喜欢折腾快照再考虑Btrfs。至于swap可以用swap分区也可以用swap文件现在很多安装工具默认用swap文件灵活度更高调整大小也方便。挂载点的规划更考验经验。常见做法是单独分/boot、/、/home、/var等。举一个实际可用的分区方案挂载点建议大小用途与说明/boot/efi512MBUEFI引导文件不可省/boot1GB存放内核镜像太大会遇到内核更新放不下的问题/100GB以上系统根目录安装软件、系统运行都在这/home按需用户数据独立重装系统时保留数据/var50GB以上日志、数据库文件防日志撑满根目录swap内存的1~2倍或16GB内存不足时的兜底有些人会说我不分/home全给/不就行了吗其实也可以但系统重装时/home数据就很尴尬。单独分/home重装系统时只要挂载好数据基本原封不动。另外很多老教程建议/boot只给200MB那是以前内核小的时代。现在内核加initramfs动辄一二十分钟200MB真不够用建议给到1GB能避免不少升级灾难。2. 从头实操给Linux做分区与格式化这块我以虚拟机里添加一块新虚拟磁盘为例演示全流程。实际服务器上换新硬盘的操作一样就是步骤更谨慎一点。开始前先说明这属于高危操作选磁盘时一定要看清楚设备名搞错盘符会导致数据丢失。2.1 用parted和fdisk完成分区先执行lsblk确认新磁盘的设备名比如目标是/dev/sdb。然后使用parted或fdisk创建分区表。parted对GPT支持更友好单位也直观建议优先用。# 查看所有块设备找到新磁盘 lsblk -o NAME,SIZE,MODEL,SERIAL # 用parted创建GPT分区表并划分一个200G的ext4分区 parted /dev/sdb mklabel gpt mkpart primary ext4 1MiB 200GiB print quit解释一下这条命令的核心点。mkpart里的起始位置写1MiB而不是0MiB这是为了让分区对齐到现代硬盘的4K扇区边界。如果从0开始新分区没有对齐性能会明显下降。写200GiB表示新分区从1MiB处开始到200GiB处结束剩下没有分配的空间以后还可以再建分区。quit之后系统会自动通知内核刷新分区表如果没生效就执行一次partprobe /dev/sdb。如果你更习惯fdisk新版本也已经支持GPT操作fdisk /dev/sdb # 输入 g 创建新的GPT分区表 # 输入 n 新建分区 # 分区号默认1起始扇区直接回车用默认Last sector输入 200G # 输入 w 写入并退出这里最容易犯的错误是起始扇区直接用默认值。新版fdisk默认起始位置通常是2048扇区也就是1MiB对齐没问题。但如果你手动指定了2048s之类的值要确保语义正确。分区之前再强调一次确认/dev/sdb是你要操作的盘而不是/dev/sda特别是生产环境和有多个磁盘的机器。实操时我习惯先把所有磁盘的UUID和型号列出来对不上号就不动手。2.2 文件系统创建、自动挂载与开机配置分区建好后下一步是格式化并挂载。格式化就是要往分区上写入文件系统这一步会清空这个分区的所有数据。先执行partprobe /dev/sdb让内核识别新分区然后创建文件系统# 创建ext4文件系统 mkfs.ext4 /dev/sdb1 # 查看分区的UUID后面写fstab要用 blkid /dev/sdb1 # 建挂载点并临时挂载 mkdir -p /data mount /dev/sdb1 /data # 验证挂载结果 df -h /datablkid输出的UUID要记下来。为什么不用/dev/sdb1写/etc/fstab因为设备名在重启后可能变化。比如拔掉一块盘原来的/dev/sdb1可能变成/dev/sdc1用UUID就不会漂移。接着把新分区写入/etc/fstab确保开机自动挂载# 编辑 /etc/fstab在末尾添加一行 vim /etc/fstab # 内容示例 UUIDxxxx-xxxx-xxxx /data ext4 defaults 0 2这一行六个字段的含义要搞清楚。第一个是设备第二个是挂载点第三个是文件系统类型第四个是挂载选项defaults表示默认权限和读写属性第五个数字表示要不要被dump备份一般写0第六个数字表示开机自检顺序根目录写1其他分区写2。写完先执行mount -a检查语法再重启一次确认fstab没有问题。如果fstab写错系统会卡在紧急模式或直接启动失败后面第5章我会专门讲怎么救援。2.3 LVM实践前面分区方案如果直接划分固定大小之后想扩容会很麻烦。服务器和数据盘场景我更推荐用LVM逻辑卷管理。LVM把物理分区包装成物理卷PV再合并成卷组VG最后从VG里切割出逻辑卷LV。这样容量管理就变成了动态分配空间不够时可以直接扩。基本流程# 把已经建好的 /dev/sdb1 做成物理卷 pvcreate /dev/sdb1 # 创建卷组 vg_data vgcreate vg_data /dev/sdb1 # 从卷组里创建逻辑卷 lv_data大小200G lvcreate -L 200G -n lv_data vg_data # 在逻辑卷上建文件系统并挂载 mkfs.ext4 /dev/vg_data/lv_data mount /dev/vg_data/lv_data /data后面如果虚拟机磁盘扩容了比如原来200G扩到300G操作顺序是先在宿主机层面扩大虚拟磁盘然后在虚拟机里用parted或fdisk扩大分区大小再执行pvresize /dev/sdb1让LVM感知新空间最后用lvextend -l 100%FREE /dev/vg_data/lv_data扩展逻辑卷根据文件系统类型执行resize2fsext4或xfs_growfsXFS。注意一点XFS只支持在线扩大不支持缩小ext4可以缩小但缩小时必须离线操作。能不动就不动没有把握的情况不要轻易缩分区。3. NAT网络配置虚拟机与容器网络的核心NAT这个缩写拆开是Network Address Translation网络地址转换。它的作用很直白让一堆设备共用同一个公网或外部网络出口。你在家里用宽带上网也是这个原理光猫把局域网里的手机、电脑统一转成一个公网地址发出去。放到Linux和虚拟机场景里NAT同样是绕不开的配置。3.1 NAT原理与虚拟机NAT模式理解NAT最简单的类比是公司前台。你要出去办事前台会在访客单上把来访者信息换成公司统一对外的联系方式事情办完后回来还要“销账”。内网设备用私有IP访问外部网络时Linux主机就是那个前台把私有源地址改写成外部接口的IP再把回包按记录转回原来的内网设备。所以维基百科或者面试题里面常问“NAT和PAT区别”实际上日常说的NAT大多包含了端口级转换。VMware虚拟机的NAT模式用的是虚拟交换机VMnet8。虚拟机把Windows宿主机当作NAT网关宿主机负责把虚拟机的流量转出去。这样虚拟机不需要占用局域网IP宿主机能上网虚拟机就能上网非常省事。与此同时WSL2默认也用类似的NAT机制。WSL2跑在Hyper-V虚拟机里虚拟网络设备通过NAT访问Windows的外部连接但与VMware相比WSL2的NAT做得更“隐式”你直接看到的可能就是WSL2里IP和Windows IP不同网段。Windows 11 22H2之后WSL新增了镜像模式与NAT模式区别如下表特性WSL2 NAT模式WSL2 镜像模式网络接口独立虚拟网卡共享Windows网络接口localhost访问需要配置端口转发双向直接访问IPv6支持有限更好对开发调试需要netsh转发省去转发打开即用兼容性稳定部分公司网络环境可能受限镜像模式开启的方式是在Windows用户目录下创建.wslconfig写入networkingModemirrored然后执行wsl --shutdown重启WSL。如果你是做Web开发整天要在Windows浏览器里看WSL里启动的服务镜像模式体验真的好很多。不过如果遇到公司网络限制或者特定认证环境镜像模式可能反而连不上网这时改回NAT模式是最快的解决路径。3.2 Linux主机做NAT网关很多时候你不只是用虚拟机软件而是真的想把一台Linux服务器当作局域网出口网关。场景大概是这样的Linux服务器有两块网卡eth0连外部网络eth1接交换机连接内网机器内网机器统一把网关指向Linux服务器的eth1地址。配置步骤如下首先给内网网卡配置IP比如eth1设为192.168.100.1/24。然后开启内核的IP转发功能# 临时开启 sysctl -w net.ipv4.ip_forward1 # 写入配置文件永久开启 echo net.ipv4.ip_forward 1 /etc/sysctl.conf sysctl -p接着配置iptables NAT规则# 让从eth1进入的流量经过eth0出去时源地址改成eth0的IP iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 允许内网转发到外网 iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT这里MASQUERADE和普通SNAT有点区别。MASQUERADE适合出口IP动态变化的情况比如拨号上网或DHCP获取地址它会自动根据出口网卡的当前IP做转换。如果外部IP是静态的也可以用SNAT --to-source x.x.x.x性能稍好一点。规则里必须加上FORWARD链的放行否则即使NAT配了流量也不转发。内网需要DHCP分配地址时我习惯用轻量的dnsmasq。配置文件/etc/dnsmasq.conf里关键几行interfaceeth1 dhcp-range192.168.100.100,192.168.100.200,12h dhcp-optionoption:router,192.168.100.1这个配置会在eth1网段里提供100到200的地址池同时把默认网关自动指到192.168.100.1。内网机器接上就能上网。这套东西在华为、华三的网络实验里经常配合使用路由器上配好NAT策略Linux服务器作为内网客户端或外部服务器用tcpdump在出口一侧抓包能很直观地看到源地址被转换。理解原理后无论是硬件设备的NAT实验还是纯Linux网关排查思路都是一样的。4. Ubuntu网络管理与实战配置Ubuntu从18.04开始默认用netplan管理网络。以前改/etc/network/interfaces的习惯已经过时了现在看到有人还在改interfaces文件部分系统可能完全不认。netplan用YAML格式描述网络逻辑清晰但YAML缩进比较严格一个多余空格都可能导致配置不生效。4.1 netplan配置静态IP与默认网关假设要给一块网卡配置静态IP并设置默认网关先找到配置文件在/etc/netplan/目录下一般是01-netcfg.yaml或50-cloud-init.yaml。修改成类似这样network: version: 2 ethernets: eth0: dhcp4: no addresses: - 192.168.1.100/24 routes: - to: default via: 192.168.1.1 nameservers: addresses: - 223.5.5.5 - 114.114.114.114写完执行sudo netplan apply立即生效。这里的缩进全是空格而且必须严格对齐。routes下面那个to: default是关键它表示默认路由如果没有这一条系统可能只有网段内的路由访问外网就不通。nameservers配的是DNS我习惯写两个公共DNS实际公司内网环境要填内网DNS。执行netplan apply前最好打开一个后台会话比如SSH连接时就别直接改IP万一格式写错或者IP写错你连远程都断了。我有次帮客户改配置没仔细检查直接apply结果IP写错远程连接当场断掉人又不在机房折腾了半天。netplan也支持网络管理工具比如networkmanager:和renderer: NetworkManager。桌面版Ubuntu经常用NetworkManager管理网络如果netplan和NetworkManager抢控制权会出现“设置了静态IP但重启后又变回DHCP”的怪问题。解决办法就是明确只在netplan里管理避免混用。4.2 端口转发与NAT规则持久化很多时候你配了NAT虚拟机或WSL里的服务需要被宿主机外部访问。比如WSL里跑了个8080端口的Web服务Windows宿主机上想用http://localhost:8080访问默认NAT模式下WSL的IP对Windows不可见需要在Windows上做端口转发。这是Windows的命令netsh interface portproxy add v4tov4 listenport8080 listenaddress0.0.0.0 connectport8080 connectaddressWSL的IP如果开启了WSL镜像模式这条命令基本可以省略因为WSL和Windows共享回环地址。不过在纯Linux防火墙场景中更常用的是DNAT。比如要让外网访问Linux网关的8080端口转发到内网服务器192.168.100.10的80端口iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.100.10:80 iptables -A FORWARD -p tcp -d 192.168.100.10 --dport 80 -j ACCEPT还需要配合前面提到的MASQUERADE规则不然内网服务器回包时不知道往哪里走。配置NAT后最重要的一件事就是持久化。iptables规则默认只存在内存里重启就丢。Debian/Ubuntu可以用iptables-persistent保存规则到/etc/iptables/rules.v4CentOS/RHEL则推荐直接使用firewalld或nftables用firewall-cmd --permanent持久化。别嫌这个步骤麻烦我就是踩过重启之后所有NAT规则全消失的坑才养成了配完就持久化、再reboot验证的习惯。4.3 VMware虚拟机网络配置与WSL镜像模式实战VMware Workstation的NAT配置核心在“虚拟网络编辑器”。打开后可以看到VMnet8默认网段类似192.168.222.0/24勾选“NAT”和“DHCP”即可。虚拟机网卡选择“NAT模式”启动后就能自动获得IP上网。如果只是想虚拟机访问外网这套默认配置基本零改动。但如果你需要宿主机访问虚拟机里的服务VMware默认只做NAT没做端口转发那就要在虚拟网络编辑器里点击“NAT设置”添加一个端口转发规则把宿主机的某个端口映射到虚拟机IP的端口。WSL镜像模式是另一个很常用的配置。先看Windows版本是不是11 22H2以上然后在%UserProfile%目录下新建文件.wslconfig内容如下[wsl2] networkingModemirrored dnsTunnelingtrue保存后执行wsl --shutdown再重新进入WSL。此时执行ip addr会看到WSL网卡用的IP已经和Windows一致回环地址也通。实测下来镜像模式对本地Web开发体验提升非常大不需要再敲netsh interface portproxy。但如果你所在网络环境有特殊的准入控制镜像模式可能会遇到DHCP失败或者DNS解析异常回退到NAT模式即可。这类网络配置无论怎么调本质都是在“隔离-共享”之间找平衡点。5. 常见问题排查与避坑手册做运维和开发不怕出问题就怕没排查思路。这里我把这几年经常踩的坑和排查路径整理一下直接对照着看。5.1 网络不通排查清单当虚拟机、WSL或者配置好的Linux网关突然上不了网时按顺序检查排查步骤命令说明查看网卡状态ip a网卡是否UP有没有IP地址查看路由表ip route默认网关是否指向正确查默认网关ping 192.168.1.1网关不通多半是二层或物理问题查外部网络ping 223.5.5.5通了说明NAT和路由正常问题在DNS查DNS解析nslookup www.example.com解析失败就检查nameserver抓包确认tcpdump -i eth0 host 192.168.1.1看请求和回包到哪一步中断比如VMware里NAT模式能ping同网段但上不了网多半是宿主机防火墙把VMware相关进程拦了或者DNS配置有问题。我遇到过一个更隐蔽的客户服务器上有个管理系统一直报“获取接收配置失败请检查网络设置”排查半天发现是服务器防火墙拦了管理端口白名单没放行。这种软件层面的“网络设置错误”90%都是端口不通、DNS解析错误、防火墙拦截这三类原因按照上面表格一步步排就行。5.2 分区与挂载故障救援分区和挂载的故障往往出现得比较急。最常见的要数fstab写错导致开不了机。启动时系统会提示你进入维护模式输入root密码后执行mount -o remount,rw /让根目录变成可写状态然后编辑/etc/fstab注释掉错误行reboot即可。关键点在于此时根目录可能是只读的不先remount就改不了文件。磁盘满也是高频事故。df -h看一眼哪个分区满了再用du -sh /目录/*找大文件。值得注意的坑是/var/log/journal日志目录systemd-journald会一直积累日志好几年不清能占几十GB。顺手加一个日志大小上限可以这样配置在/etc/systemd/journald.conf里设SystemMaxUse500M再执行systemctl restart systemd-journald。还有一种情况是虚拟机扩容后系统看不到新空间这是分区表没刷新先确认lsblk里磁盘大小变了然后按顺序执行parted扩展分区、pvresize刷新PV、lvextend扩展LV、最后resize2fs扩展文件系统。顺序错了或者漏一步就会看到空间“卡”在奇怪的地方。5.3 常用命令速查表这里整理一份磁盘和网络排查时最常敲的命令面试前也适合过一遍命令用途lsblk/blkid查看设备与UUIDdf -h/du -sh *查看磁盘空间与目录占用fdisk -l/parted -l查看分区表pvdisplay/vgdisplay/lvdisplay查看LVM状态ip a/ip route查看IP与路由ss -lntp检查监听端口iptables -t nat -L -n -v查看NAT规则sysctl net.ipv4.ip_forward检查内核转发开关tcpdump -i eth0抓包分析netplan apply应用Ubuntu网络配置面试时如果被问到“怎么给Linux做NAT网关”一般就考察三个点内核转发要不要开、iptables的MASQUERADE怎么配、规则怎么持久化。把前面配置内容理解透回答逻辑就顺畅了。最后再分享一个我自己养成的习惯每次配完分区和网络都会把关键输出存成笔记尤其是blkid里的UUID和iptables规则文件然后主动reboot一次验证fstab和持久化是否生效。很多看似顽固的问题一重启就原形毕露——不是规则没保存就是挂载点消失。这个操作很简单但能帮你避免90%的返工也让我在各类环境里折腾Linux时少掉了很多头发。
RELATED

相关推荐

基于Java Web的人才招聘系统设计与实现文档撰写指南

基于Java Web的人才招聘系统设计与实现文档撰写指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/9 2:37:13
CodePilot Codex CLI 发现与刷新机制修复详解:从路径漏检到候选指纹缓存失效

CodePilot Codex CLI 发现与刷新机制修复详解:从路径漏检到候选指纹缓存失效

人工智能AI 应用AI Agent交互助手MCP Clients本地部署 【免费下载链接】CodePilot A multi-model AI agent desktop client — connect any AI provider, extend with MCP & skills, control from your phone. Built with Electron Next.js. 项目地址: https:/…

📅 2026/10/9 2:37:13
HN-F设计——Snoop Filter

HN-F设计——Snoop Filter

HNF作为CMN网络中管理和维护一致性的HomeNode,是最复杂的存在。接下来的一系列文章将逐步拆解HNF的设计要点。 HNF如何维护cache一致性?答案就是SF(snoop filter)。 在“write invalidate的系统架构中,如果一个RN需要更新某个地址的数据&…

📅 2026/10/9 2:37:13
MORE NEWS

更多资讯

📰

ChatGLM大模型微调实战:单卡LoRA从环境配置到部署避坑指南

简介:面向ChatGLM系列大模型微调需求的实践资源包,聚焦AI大模型应用与自然语言处理场景,适合正在学习或落地大模型微调的开发者、算法工程师与科研人员。压缩包内共148个文件,以58个Python脚本、36个Jupyter Notebook为核心&#…

📰

Keras-Transformer中英翻译项目实操:模型原理、环境配置与避坑指南

简介:基于Python的中英机器翻译系统采用Keras-Transformer模型,面向深度学习初学者及毕业设计、课程设计场景,提供一套结构完整、可直接运行的机器翻译项目方案。资源共20个文件,压缩包7.42MB,包含核心Python脚本、Jup…

📰

开源商城前端选型指南:关键维度与避坑实录

先聊一个我这两年越来越坚定的判断:商城系统开发这事儿,选型前端项目比绝大多数人想象中更重要,甚至可以说,它在很大程度上决定了你后续三到六个月的开发状态是“顺风顺水”还是“拆东墙补西墙”。我自己见过太多团队,…

📰

多店铺管理如何用API集成实现自动化订单同步与库存联动

做电商的人都知道,店铺一多,运营就乱。以前我盯两家店的时候,靠Excel还能勉强撑住,商品改个价格两台电脑来回切,订单导出导入反复核对。等店铺数量到了五家以上,这套手工流程基本就崩了——不是某个环节出错…

📰

Spring Bean初始化必知:@PostConstruct原理、应用场景与避坑指南

1. 为什么我建议不要在构造函数里做初始化先说一个常见的场景:Spring Boot项目启动后,需要从数据库加载一批配置数据到内存缓存中,或者需要在应用启动时初始化一个线程池、连接池、加载敏感词库之类的资源。很多初学者会把这段初始化逻辑直接…

📰

微信小程序+PHP校友惠超市管理系统源码深度解析

1. 项目概述1.1 核心需求解析“师大校友惠超市管理系统”这个名字一出来,基本就能猜到它的定位:一个跑在微信小程序里的会员制超市购物平台,核心服务对象是高校校友这个特殊群体。所谓“校友惠”,说白了就是学校背书、校友专享的优…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬