news 2026/10/9 2:37:11

Linux磁盘分区与NAT网络配置:从GPT/LVM到iptables/WSL实战

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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 /data

blkid输出的UUID要记下来。为什么不用/dev/sdb1写/etc/fstab?因为设备名在重启后可能变化。比如拔掉一块盘,原来的/dev/sdb1可能变成/dev/sdc1,用UUID就不会漂移。接着把新分区写入/etc/fstab,确保开机自动挂载:

# 编辑 /etc/fstab,在末尾添加一行 vim /etc/fstab # 内容示例 UUID=xxxx-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扩展逻辑卷,根据文件系统类型执行resize2fs(ext4)或xfs_growfs(XFS)。注意一点,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,写入networkingMode=mirrored,然后执行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_forward=1 # 写入配置文件永久开启 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里关键几行:

interface=eth1 dhcp-range=192.168.100.100,192.168.100.200,12h dhcp-option=option: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 listenport=8080 listenaddress=0.0.0.0 connectport=8080 connectaddress=<WSL的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.v4;CentOS/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] networkingMode=mirrored dnsTunneling=true

保存后执行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里设SystemMaxUse=500M,再执行systemctl restart systemd-journald。还有一种情况是虚拟机扩容后系统看不到新空间,这是分区表没刷新:先确认lsblk里磁盘大小变了,然后按顺序执行parted扩展分区、pvresize刷新PV、lvextend扩展LV、最后resize2fs扩展文件系统。顺序错了或者漏一步,就会看到空间“卡”在奇怪的地方。

5.3 常用命令速查表

这里整理一份磁盘和网络排查时最常敲的命令,面试前也适合过一遍:

命令用途
lsblk/blkid查看设备与UUID
df -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时少掉了很多头发。

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

DM-CK6025B是什么模块?杰理 AC2005B 芯片 DEMO 测试板怎么样?

# 杰理AC2005B芯片DEMO测试板开箱介绍&#xff1a;省晶振、13dBm、Auracast实测板做蓝牙方案选型的时候&#xff0c;光看规格书是不够的&#xff0c;必须拿DEMO板实际测一测。基于杰理AC2005B做的这款DEMO测试板&#xff0c;我们拿到手用了一段时间&#xff0c;今天把它的配置、…

作者头像 李华
网站建设 2026/10/9 2:36:26

自定义 robbyrussell 主题:打造高效 zsh 终端提示符

默认的 robbyrussell 主题&#xff0c;算是 oh-my-zsh 里很多人入坑的第一个主题。绿色的用户名、蓝色的路径、括号里的 git 分支&#xff0c;简单干净&#xff0c;启动也快。我用它当主力主题用了很长一段时间&#xff0c;一直没换&#xff0c;原因就是它足够轻量&#xff0c;…

作者头像 李华
网站建设 2026/10/9 2:36:23

基于SpringBoot+Vue的健身管理系统-附源码

温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/10/9 2:35:54

必应输入法纯净体验全攻略:从下载安装到设置排错

装输入法这件事&#xff0c;很多人的第一反应是&#xff1a;能用就行。但这几年“能用就行”反而变成了三个字&#xff1a;不敢用。右键一个没有名气的输入法&#xff0c;菜单里藏着好几个推广位&#xff1b;装完一个输入法&#xff0c;浏览器主页悄悄被改&#xff1b;多打几天…

作者头像 李华
网站建设 2026/10/9 2:35:52

Hadoop/Spark数据算法源码实战:从Top-N到二次排序

简介&#xff1a;这份资源包聚焦 Hadoop 与 Spark 两大框架的数据算法实现&#xff0c;主要面向大数据开发入门者、需要实战源码参考的工程师&#xff0c;以及正在准备大数据相关岗位面试的学习者&#xff0c;也适合用于课程设计与毕业设计参考。内容涵盖 MapReduce 的 Map/Red…

作者头像 李华