Linux磁盘存储原理(扇区/Block/Inode)+ 软硬链接 + 日志系统 完整版笔记(含案例+面试题)

一、硬盘基本存储单位(硬件层级)

1.1 扇区 Sector(硬件最小单位)

  • 定义:硬盘出厂默认的最小物理存储单元

  • 默认大小512字节

  • 特点:硬件读写最小颗粒,操作系统不直接以扇区为单位读写

1.2 块 Block(操作系统最小读写单位)

  • 定义:Linux系统读写磁盘的最小单位

  • 默认大小4KB

  • 组成关系 :1个Block = 8个连续扇区(512*8=4096B=4K)

  • 数据存储特点:文件数据在硬盘扇区中是无序分散存储的,由Block统一管理、系统统一调度

二、文件的两大核心组成:数据块 + 元数据

Linux中所有文件由两部分构成:

  1. 数据信息(Block):真正的文件内容、文字、代码、数据

  2. 元数据信息(Inode):文件属性信息

    1. 文件大小、权限、属主、属组、修改时间

    2. 最重要:记录文件数据所在的Block编号(索引指向)

三、Inode 索引节点核心原理(必考)

3.1 Inode作用

Inode = 文件索引目录,类似书本目录,记录文件属性 + 数据块Block的位置,系统通过Inode找到文件真实数据。

3.2 Inode寻址结构(12直接+1间接+1双间接+1三间接)

默认Block=4KB,Linux通过四级寻址支持不同大小文件,完美适配小文件、超大文件存储

核心公式:单个Block指针可记录1024个Block编号

1)12个直接指针(小文件)

  • 直接记录数据Block位置,无需中转

  • 最大容量:12 × 4K = 48KB

  • 适用:小于48K的极小文件

2)1个一级间接指针(中等文件)

  • 不存数据,存Block编号指针

  • 容量:1024 × 4K = 4MB

3)1个二级双间接指针(大文件)

  • 两次指针跳转寻址

  • 容量:1024 × 1024 × 4K = 4GB

4)1个三级三间接指针(超大文件)

  • 三次指针跳转寻址

  • 容量:1024 × 1024 × 1024 × 4K = 4TB

3.3 实操查看Inode与Block

复制代码

# 查看文件inode号 ls -i test.txt # 查看分区inode、block使用情况 df -i dumpe2fs /dev/sda1

四、硬链接 & 软链接(超全对比+案例)

4.1 核心定义

  • 硬链接 :文件的别名,绑定Inode号

  • 软链接(符号链接) :文件的快捷方式,绑定文件名与路径

4.2 创建命令实操

复制代码

# 1. 硬链接创建 ln test.txt test_hard # 2. 软链接创建 ln -s test.txt test_soft

4.3 软硬链接终极对比表(背诵版)

对比项 软链接 硬链接
指向对象 文件名/文件路径 Inode号
删除源文件 失效(红叉、报错) 不受影响,依旧可用
支持目录 可以对目录创建 不支持目录
跨文件系统 支持(可跨分区、跨磁盘) 不支持(只能同分区)
Inode号 与源文件不同 与源文件完全一致
文件类型 独立链接文件 文件别名,无独立文件

4.4 核心结论

  • 硬链接:多个文件名对应同一个Inode,链接数归零文件才真正删除

  • 软链接:记录路径,源文件删除,链接直接失效

五、企业经典面试题:删除文件磁盘不释放(必考)

5.1 问题现象

磁盘报警空间满,手动删除大文件后,磁盘空间依旧爆满,甚至文件反复生成。

5.2 根本原因

Linux删除文件的两个必要条件(缺一不可)

  1. 文件硬链接数为 0

  2. 没有任何进程正在调用/打开该文件

场景还原: 文件被日志进程、服务进程持续占用,手动删除只是删除文件名,进程内存中依然持有文件句柄、持续写入数据,系统会重新生成占用空间,磁盘永远不释放。

5.3 排查与解决实操案例

复制代码

# 查看已删除但未释放的文件 lsof | grep deleted # 方案1:重启对应服务/进程(推荐) systemctl restart rsyslog # 方案2:清空文件释放空间(不要直接rm) > /var/log/secure

六、Linux系统日志管理 rsyslog

6.1 核心文件路径

  • 日志服务配置文件:/etc/rsyslog.conf

  • 日志默认存放目录:/var/log/

6.2 日志配置文件标准格式

服务名.匹配规则 日志存储位置

匹配符号详解(带案例)

  • . :记录大于等于该级别所有日志 案例:*.info 记录 info、notice、warn、error、crit 所有高级别日志

  • .= :仅记录当前级别日志 案例:*.=debug 只记录debug级别,其他全部忽略

  • ! :排除该级别,其余全部记录 案例:*.!info 除了info级别,全部记录

  • -:异步写入,先缓存内存,攒量后写入硬盘,提升IO性能(有丢失风险)

6.3 日志级别(0-8 共9级,优先级从高到低)

数字越小,级别越高、问题越严重

  1. 0 emerg 系统崩溃级(最高)

  2. 1 alert 必须立即处理

  3. 2 crit 严重错误

  4. 3 err 普通错误

  5. 4 warn 警告信息

  6. 5 notice 普通提示

  7. 6 info 正常运行信息(最常用)

  8. 7 debug 调试日志(最详细)

  9. 8 none 不记录日志

6.4 日志配置实操案例

需求:所有服务的错误及以上级别日志,单独存入/var/log/error.log

复制代码

vi /etc/rsyslog.conf *.err /var/log/error.log # 重启日志服务生效 systemctl restart rsyslog

七、全篇核心总结(背诵提纲)

  1. 硬件最小单位扇区512B,系统最小读写单位Block4K(8扇区)

  2. Inode存属性+数据指针,Block存真实文件内容

  3. 四级寻址:48K→4M→4G→4T,覆盖所有文件大小

  4. 硬链接绑inode、不删数据;软链接绑路径、删源失效

  5. 文件真正删除条件:链接数为0 + 无进程占用

  6. rsyslog通过 服务.级别 规则精准控制日志存放

相关推荐
机汇五金_1 小时前
从钣金加工到成品装配,弱电箱是如何制造出来的?
网络·python·制造
牛油果子哥q1 小时前
【Redis分布式高阶篇】Redis分布式锁底层精讲:从裸锁缺陷到Redisson源码级落地,解决超时释放、锁失效、主从漏洞、锁续约难题
数据库·redis·分布式
辣椒思密达2 小时前
Python 数据采集中实现代理 IP 自动轮换:一个轻量级代理池设计
网络
键盘上的猫头鹰2 小时前
【Linux 基础教程(四)】文件内容查看、打包压缩与搜索、重定向管道及环境变量
linux·服务器·python
FenceRain2 小时前
Nginx 升级,平滑升级不停服务
服务器·网络·nginx
tellmewhoisi2 小时前
linux 基础知识(文件权限相关)
linux·运维·服务器
jiayong232 小时前
Claude Code 常见操作实战指南
linux·服务器·网络·ai·claude·claude code
lunzi_08262 小时前
《图解HTTP》--第6章-HTTP首部
网络·网络协议·http
BINGCHN2 小时前
CVE-2026-49975(HTTP/2 Bomb 远程拒绝服务漏洞)
网络·网络协议·http·cve