
Linux 磁盘管理补充与网络基础实战RAID、inode、fsck 与 TCP/IP 全链路上一期《Linux 磁盘管理与 LVM 实战》我们把存储链路打通了分区、LVM、文件系统、挂载。这一期先补三个磁盘深水区话题——RAID 到底怎么保护数据、挂载点已有内容怎么搬家、空间满了却发现 inode 爆了外加两个救火技能文件系统只读体检、已删除文件仍占空间。然后正式进入网络同网段怎么通、跨网段怎么通、OSI/TCP-IP 分层与 PDU、一个数据包跨网段的完整旅程最后落到ip命令与 Netplan 实战。全程命令可复制建议边看边敲。文章目录Linux 磁盘管理补充与网络基础实战RAID、inode、fsck 与 TCP/IP 全链路一、RAID 工作原理数据到底是怎么被保护的1.1 五种 RAID 级别对比1.2 各级别详解1.3 软件 RAID 实战mdadm二、挂载时遇到有内容的目录怎么办2.1 先说清楚为什么不能直接挂2.2 正确做法临时目录搬家法三、空间满了别只看 df -h还有 inode 这个坑3.1 block 和 inode 是两个东西3.2 两个命令分清是谁满了3.3 inode 满了会怎样四、文件系统只读检查e2fsck 与 xfs_repair4.1 ext4e2fsck4.2 XFSxfs_repair4.3 铁律与解读五、已删除文件仍占空间lsof 抓鬼5.1 灵异现象5.2 原理5.3 揪出元凶并释放六、网络基础从分层到一个数据包的旅程6.1 网络到底是怎么传输的6.2 OSI 七层与 TCP/IP 四层6.3 一个数据包跨网段的完整旅程6.4 查看接口与 MAC 地址6.5 临时启停接口重启网络不丢配置6.6 地址、前缀与同网段判断6.7 配置主机地址NetplanUbuntu 22.046.8 配置主机名总结一、RAID 工作原理数据到底是怎么被保护的RAIDRedundant Array of Independent Disks独立磁盘冗余阵列的核心思想一句话把多块物理磁盘拼成一个逻辑磁盘用条带化换性能用冗余换安全。先建立三个概念后面所有级别都绕不开条带化Striping把一份数据切成小块轮流写到不同盘上多盘并行读写 → 快镜像Mirroring同一份数据写两遍到两块盘 → 安全但费容量校验Parity用异或算法算出校验块某块盘挂了能用其余盘校验把数据算回来 → 折中方案1.1 五种 RAID 级别对比级别最少盘数可用容量容错读性能写性能一句话原理RAID 02100%N无很快很快纯条带化一块坏全盘丢RAID 1250%N/2坏 1 块快一般纯镜像两盘一模一样RAID 53(N-1)/N坏 1 块快一般写要算校验分布式单校验RAID 64(N-2)/N坏 2 块快更慢双校验开销分布式双校验RAID 10450%N/2每组坏 1 块很快很快先镜像再条带1.2 各级别详解RAID 0只要快不要命磁盘1: [数据块A][数据块C][数据块E] 磁盘2: [数据块B][数据块D][数据块F] ↑ 一份文件被切成条带轮流写优点读写速度约等于单盘 × 盘数容量也不浪费缺点没有任何冗余任何一块盘损坏 整个阵列数据全毁适用临时盘、编译缓存、可随时重建的数据。生产重要数据别用RAID 1安全第一磁盘1: [A][B][C][D] 磁盘2: [A][B][C][D] ← 一模一样优点坏一块盘另一块顶上数据零丢失业务不中断缺点容量利用率只有 50%两块 1T 只能用 1T适用系统盘、数据库日志盘、小容量但高可靠的场景RAID 5容量与安全的折中最常用磁盘1: [D1][D4][D7][P3] 磁盘2: [D2][D5][P2][P4] 磁盘3: [D3][P1][D6][D8] ↑ 校验块 P 轮流放不固定占一块盘3 块盘能存 2 块的量(N-1)/N坏任意一块都能用剩余盘校验算回来缺点写性能有开销读-改-写校验重建期间再坏一块就全完适用文件服务器、通用存储RAID 6RAID 5 的加强版两组独立校验允许同时坏两块盘大容量盘时代重建慢RAID 5 重建窗口风险高所以大容量阵列推荐 RAID 6代价可用容量再少一块写开销更大RAID 10先组镜像再拼条带镜像组1: 盘1 盘2 镜像组2: 盘3 盘4 [A1][A2][A3][A4] 条带化横跨两个镜像组先两两做 RAID 1再把镜像组做 RAID 0 条带优点读飞快、写也快坏盘最多坏每组一块重建快只需同步组内一块缺点容量利用率 50%盘数要求偶数且 ≥4适用数据库、虚拟化等高并发随机读写场景口诀0 是速度、1 是保险、5 是折中、6 是双保险、10 是既要又要。1.3 软件 RAID 实战mdadm生产上可能是硬件 RAID 卡系统看到的是一块逻辑盘但云主机/物理机没有 RAID 卡时用 Linux 内核自带的mdadm做软件 RAID。# 先看现有阵列状态cat/proc/mdstat lsblk# 用 3 块盘组 RAID 5演示环境请确认 /dev/sdb1 等无重要数据sudomdadm--create/dev/md0\--level5--raid-devices3\/dev/sdb1 /dev/sdc1 /dev/sdd1# 创建是后台异步的看同步进度等待 sync 完成再用watch-n2cat/proc/mdstat格式化、挂载、持久化sudomkfs.ext4 /dev/md0sudomkdir-p/datasudomount/dev/md0 /data# 把阵列配置写进配置文件重启不丢sudomdadm--detail--scan|sudotee-a/etc/mdadm.conf# fstab 持久挂载echo/dev/md0 /data ext4 defaults 0 2|sudotee-a/etc/fstab模拟坏盘与恢复演练必备# 标记一块盘故障sudomdadm/dev/md0--fail/dev/sdb1# 热拔出sudomdadm/dev/md0--remove/dev/sdb1# 物理换一块新盘后加回阵列自动开始重建sudomdadm/dev/md0--add/dev/sdb1watch-n2cat/proc/mdstat# rebuild 进度注意RAID 不是备份RAID 防的是磁盘损坏防不了误删、逻辑错误和勒索病毒。重要数据仍要异地备份。二、挂载时遇到有内容的目录怎么办2.1 先说清楚为什么不能直接挂mount 只是把新文件系统盖在挂载点上。原来目录里的文件并没有被删只是被遮住了——卸载后它们还在。问题是只要挂着原内容就访问不到业务大概率出错。错误做法# 假设 /srv/ruoyi/data 里已有应用数据sudomount/dev/vg_ruoyi/lv_data /srv/ruoyi/data# 原内容被遮住2.2 正确做法临时目录搬家法思路先把新文件系统挂到一个临时空目录 → 把原目录内容整体搬进去 → 再卸下临时挂载正式挂到目标点。# ① 建一个临时挂载点sudomkdir-p/srv/ruoyi/data_old# ② 新文件系统先挂到临时点sudomount/dev/vg_ruoyi/lv_data /srv/ruoyi/data_old# ③ 把原目录内容整体拷进去. 结尾 含隐藏文件-a 保留权限/属主/时间戳sudocp-a/srv/ruoyi/data/. /srv/ruoyi/data_old/ 或sudorsync-a/srv/ruoyi/data/. /srv/ruoyi/data_old/# ④ 人工核对内容无误、且已有备份后再清空原目录sudorm-rf/srv/ruoyi/data/*# ⑤ 卸下临时点正式挂到目标点sudoumount/srv/ruoyi/data_oldsudomount/dev/vg_ruoyi/lv_data /srv/ruoyi/data# ⑥ 验证ls-la/srv/ruoyi/data findmnt /srv/ruoyi/data几个容易踩的坑cp -a 源/. 目标/.结尾才能连隐藏文件如.env一起拷cp -a 源/*会漏掉隐藏文件不要跳过核对直接rm -rf先ls、diff -r或du -sh两边对比确认搬家成功再删原内容原内容只是被遮住不是消失所以哪怕操作错了umount之后数据还能捞回来——但别赌动手前备份如果原目录内容极大临时挂载点所在盘要放得下三、空间满了别只看 df -h还有 inode 这个坑磁盘空间报满99% 的人第一反应是df -h看 block 用量。但有一种诡异情况df -h显示还有好几个 G却提示 “No space left on device”新文件死活建不了。这时候多半是inode 满了。3.1 block 和 inode 是两个东西一个文件在磁盘上由两部分组成inode文件的身份证记录权限、属主、时间戳、数据块位置指针。每个文件不管多大都占 1 个 inodeblock数据块真正存文件内容的地方常见 1K/2K/4K 一块格式化时这两者的总量就固定了。正常情况下 block 先满但海量小文件的场景缓存目录、会话文件、邮件池会先把 inode 耗尽。3.2 两个命令分清是谁满了# block 使用率看 Use%df-Th# inode 使用率看 IUse%df-i文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/vg_data-lv_data 50G 48G 2G 96% /data 文件系统 Inode IUse% 已用(I) 可用(I) 挂载点 /dev/mapper/vg_data-lv_data 3276800 3276800 100% 0 /data第二个输出就是典型inode 100% 爆满——block 明明还有 2G但 inode 一个不剩。3.3 inode 满了会怎样创建新文件 → 报No space left on device哪怕 block 富余往已有文件里追加内容 → 正常老文件的 inode 已分配追加只是补数据块表现很分裂老日志还能继续写新文件一个建不了服务半死不活口诀block 满用df -Thinode 满用df -i新建不行、追加可以九成是 inode。四、文件系统只读检查e2fsck 与 xfs_repair文件系统偶尔会因为掉电、强制关机出现不一致表现是分区变成只读、日志里刷I/O error/EXT4-fs error、或者启动卡在emergency mode。这时要用文件系统专属工具体检。4.1 ext4e2fsck# 目标/dev/vg_ruoyi/lv_dataext4sudoumount/srv/ruoyi/data# -n 只检查不修改对每个要修吗都回答 no先摸清伤情sudoe2fsck-fn/dev/vg_ruoyi/lv_data# 确认检查结果可接受、且已备份后真正去修sudoe2fsck-f-y/dev/vg_ruoyi/lv_data# 修完再挂回去sudomount/srv/ruoyi/data4.2 XFSxfs_repairXFS 的工具叫xfs_repair没有-f它默认全量检查只读模式用-nsudoumount/var/log/ruoyisudoxfs_repair-n/dev/vg_ruoyi/lv_logsudomount/var/log/ruoyi4.3 铁律与解读检查必须 umount或系统未挂载该分区对已挂载的文件系统跑 fsck 等于边跑边改神仙难救-n只读体检先看报告清不清楚Inode ... block bitmap differs、Checksum ... does not match这类条目心里有数再决定修不修ext4 元数据干净时默认跳过检查想强制全量要加-f根分区出问题进不了系统开机 GRUB 界面按elinux行尾加init/bin/bash或rd.break进救援mount -o remount,rw /后再跑工具——启动恢复专题单独讲修之前备份、修之前备份、修之前备份五、已删除文件仍占空间lsof 抓鬼5.1 灵异现象# 造一个 64M 的日志文件sudoddif/dev/zeroof/var/log/ruoyi/deleted-lab.logbs1Mcount64statusprogress# tail -f 后台持续持有这个文件模拟写日志的应用进程sudotail-f/var/log/ruoyi/deleted-lab.log/dev/null# 删掉文件sudorm/var/log/ruoyi/deleted-lab.log# 诡异的事情发生了空间没释放df-h/var/log5.2 原理Unix 删除文件的本质是断开目录项引用unlink。只要还有进程打开着这个文件持有 fd内核就不会真正释放它的数据块——文件从目录里消失了但块还挂在进程身上直到进程关闭句柄或退出。5.3 揪出元凶并释放# lsof L1列出链接数小于 1的已删除文件sudolsofL1|grepdeleted-lab# 输出示例# tail 1234 root 3w REG 253,0 67108864 12345 /var/log/ruoyi/deleted-lab.log (deleted)# ↑ PID ↑ fd# 处理方式一重启/杀掉持有进程sudokill1234# 处理方式二进程不能杀就手动清空它的内容# sudo truncate -s 0 /proc/1234/fd/3 # Linux 可行# 或 /proc/1234/fd/3# 处理完再看空间回来了df-h/var/log常见场景应用写日志运维按老习惯rm删日志腾空间但应用还开着句柄继续写——空间永远不降。正确姿势是轮转/truncate或者重启应用。所以上一期讲的 logrotatecopytruncate/postrotate才那么重要。误删文件想恢复ext 系列可以提一句debugfs/extundelete但生产环境别乱试——备份才是正经出路。六、网络基础从分层到一个数据包的旅程前面磁盘告一段落。接下来正式进入网络。先建立世界观再动手敲命令。6.1 网络到底是怎么传输的网络通信的本质把数据切成小块封包每层协议往上面贴标签封装最后一层层撕掉解封装。同一网段相通两台主机 IP 前缀相同如都在192.168.1.0/24中间经过交换机就能直达。发送方先ARP广播问出对方 MAC 地址再把帧直接甩过去不同网段相通网络前缀不同如192.168.1.x找192.168.2.x必须借道网关路由器。数据先送到网关网关查路由表决定下一跳一跳一跳接力到对端# 看本机路由表默认走哪个网关一目了然iproute show# default via 192.168.1.1 dev ens33 ← 不同网段的数据都交给它6.2 OSI 七层与 TCP/IP 四层OSI 七层TCP/IP 四层典型协议PDU协议数据单元7 应用层应用层HTTP、SSH、DNS、FTP数据 Data6 表示层并入应用层TLS/SSL、编码加密数据 Data5 会话层并入应用层会话管理数据 Data4 传输层传输层TCP、UDP段 SegmentTCP/ 数据报UDP3 网络层网际层IP、ICMP、ARP包 Packet2 数据链路层网络接口层Ethernet、WiFi、PPP帧 Frame1 物理层网络接口层网线、光纤、电信号比特 Bit记忆锚点比特 → 帧 → 包 → 段 → 数据从下往上念一遍就顺了。排错时按层自检网线通不通物理→ MAC 通不通链路→ IP 通不通网络→ 端口通不通传输。6.3 一个数据包跨网段的完整旅程场景主机 A192.168.1.10/24访问主机 B192.168.2.20/24网关是192.168.1.1。① A 的应用层生成数据比如一个 HTTP 请求 ↓ 每往下走一层加一个头 ② 传输层加 TCP 头源端口:随机目的端口:80 → 段 Segment ③ 网络层加 IP 头源 192.168.1.10目的 192.168.2.20→ 包 Packet ④ A 判断192.168.2.0 ≠ 192.168.1.0不同网段 → 下一跳 默认网关 192.168.1.1 ⑤ 链路层ARP 问出网关的 MAC加帧头源MAC:A目的MAC:网关→ 帧 Frame ⑥ 网卡把帧变成比特流 → 交换机 → 网关路由器 ⑦ 网关撕掉帧头、拆开 IP 包查自己的路由表 去 192.168.2.0/24 从 2 号口出去下一跳是 ... 重新封装目标 MAC 换成 B 的 MAC 或下一跳 MAC继续转发 ⑧ B 收到逐层解封装 链路层MAC 是我→ 网络层IP 是我→ 传输层端口 80 → 应用层把数据交给 Web 服务 ⑨ B 的响应原路逆向返回 A关键理解MAC 地址每一跳都换变IP 地址从头到尾不变定。这就是逐跳寻址与端到端寻址的分工。6.4 查看接口与 MAC 地址# 简洁版一眼看所有接口和 IPip-bra# 看链路详情含 MAC 地址、状态、MTUiplinkshow ens33# 完整地址信息ipaddr show ens33[rootweb ~]# ip -br a lo UNKNOWN 127.0.0.1/8 ens33 UP 192.168.1.10/24 [rootweb ~]# ip link show ens33 2: ens33: BROADCAST,MULTICAST,UP,LOWER_UP mtu 1500 qdisc fq_codel state UP mode DEFAULT link/ether 00:0c:29:8f:2a:1b brd ff:ff:ff:ff:ff:ff ↑ 这就是网卡的 MAC 地址物理地址出厂烧录6.5 临时启停接口重启网络不丢配置# 关闭接口sudoiplinksetens33 down# 启动接口sudoiplinksetens33 up# 顺手配个临时 IP重启失效测试用sudoipaddradd192.168.1.100/24 dev ens33sudoiprouteadddefault via192.168.1.1⚠️SSH 远程操作千万别 down 自己的网卡down 的瞬间 SSH 就断了而且云主机 down 后你可能再也连不上。上面命令请在本地终端或带外管理口执行。6.6 地址、前缀与同网段判断IPv4 地址 32 位 网络位 主机位/24表示前 24 位是网络位、后 8 位是主机位掩码255.255.255.0。判断两台主机是否同网段各自算一遍网络地址IP 与掩码做按位与相等即同网段。A: 192.168.1.10/24 → 网络地址 192.168.1.0/24 B: 192.168.1.200/24 → 网络地址 192.168.1.0/24 → 同网段直连可达 C: 192.168.2.20/24 → 网络地址 192.168.2.0/24 → 不同网段必须走网关一个 /24 网段的构成192.168.1.0网络地址不可用~192.168.1.255广播地址不可用可用主机192.168.1.1 ~ 192.168.1.254。6.7 配置主机地址NetplanUbuntu 22.04Ubuntu 从 18.04 之后用Netplan管理网络配置写在/etc/netplan/下的 YAML 文件里。Netplan 只是翻译官底层交给systemd-networkd或NetworkManager执行。# 看现有配置文件文件名各机不同常见 01-netcfg.yaml / 50-cloud-init.yamlls/etc/netplan/sudovim/etc/netplan/01-netcfg.yaml配置静态地址network:version:2renderer:networkdethernets:ens33:dhcp4:no# 关掉 DHCP改静态addresses:-192.168.2.10/24# 静态 IP 前缀routes:-to:default# 默认路由via:192.168.2.1# 网关nameservers:addresses:[223.5.5.5,114.114.114.114]# DNS应用配置先用 try 再 applyYAML 写错能自动回滚sudochmod600/etc/netplan/01-netcfg.yaml# 权限不对 netplan 会拒绝执行# try应用后给 120 秒确认没确认自动回滚——防配错把自己关外面sudonetplan try# 确认没问题sudonetplan apply# 验证ip-braiproute showping192.168.2.1YAML 对缩进极其敏感只能空格不能 Tab。netplan generate可以先做语法检查不实际应用。6.8 配置主机名# 查看当前主机名hostnamehostnamectl status# 设置立即生效且持久化sudohostnamectl set-hostname ruoyi-prod-01# 顺手更新 /etc/hosts避免 sudo 执行时主机名解析慢sudovim/etc/hosts# 127.0.1.1 ruoyi-prod-01# 新开终端验证hostname集群/生产环境主机名要有规律如role-区域-序号日志排查、监控告警都靠它认机器。总结这一期补完磁盘、开完网络的头RAID0 条带要快、1 镜像要稳、5 单校验折中、6 双校验更稳、10 镜像条带软件 RAID 用mdadm管理坏了--fail/--remove/--add走一遍重建流程。RAID 不是备份。挂载有内容的目录别直接盖mkdir临时点 → 先挂临时点 →cp -a 原/. 临时/搬家 → 核对备份后清空原目录 → 卸临时点、正式挂载。空间满先分清楚block 用df -Thinode 用df -iinode 爆了会新建不行、追加可以定位小文件聚集地格式化时用-N/-i预留。文件系统只读检查ext4 用e2fsck -fnXFS 用xfs_repair -n必须 umount先-n体检、备份后再真修。已删除文件占空间rm只解引用进程持句柄块就不释放lsof L1抓出来杀进程或 truncate 释放。日志轮转/truncate 才是正确姿势。网络分层OSI 七层对 TCP/IP 四层PDU 从下到上比特→帧→包→段→数据同网段 ARP 直连跨网段交网关逐跳转发MAC 每跳变、IP 不变。网络命令ip -br a/ip link show看接口 MACip link set up/down启停接口同网段靠IP 与掩码判断Ubuntu 用 Netplan 配静态 IPnetplan try防翻车hostnamectl设主机名。本文命令在 Rocky 9 / Ubuntu 22.04 思路一致RAID 与网络部分各发行版通用。动手前对数据做备份生产操作先演练。