一、硬盘基本存储单位(硬件层级)
1.1 扇区 Sector(硬件最小单位)
-
定义:硬盘出厂默认的最小物理存储单元
-
默认大小 :512字节
-
特点:硬件读写最小颗粒,操作系统不直接以扇区为单位读写
1.2 块 Block(操作系统最小读写单位)
-
定义:Linux系统读写磁盘的最小单位
-
默认大小 :4KB
-
组成关系 :1个Block = 8个连续扇区(512*8=4096B=4K)
-
数据存储特点:文件数据在硬盘扇区中是无序分散存储的,由Block统一管理、系统统一调度
二、文件的两大核心组成:数据块 + 元数据
Linux中所有文件由两部分构成:
-
数据信息(Block):真正的文件内容、文字、代码、数据
-
元数据信息(Inode):文件属性信息
-
文件大小、权限、属主、属组、修改时间
-
最重要:记录文件数据所在的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删除文件的两个必要条件(缺一不可):
-
文件硬链接数为 0
-
没有任何进程正在调用/打开该文件
场景还原: 文件被日志进程、服务进程持续占用,手动删除只是删除文件名,进程内存中依然持有文件句柄、持续写入数据,系统会重新生成占用空间,磁盘永远不释放。
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级,优先级从高到低)
数字越小,级别越高、问题越严重
-
0 emerg 系统崩溃级(最高)
-
1 alert 必须立即处理
-
2 crit 严重错误
-
3 err 普通错误
-
4 warn 警告信息
-
5 notice 普通提示
-
6 info 正常运行信息(最常用)
-
7 debug 调试日志(最详细)
-
8 none 不记录日志
6.4 日志配置实操案例
需求:所有服务的错误及以上级别日志,单独存入/var/log/error.log
vi /etc/rsyslog.conf *.err /var/log/error.log # 重启日志服务生效 systemctl restart rsyslog
七、全篇核心总结(背诵提纲)
-
硬件最小单位扇区512B,系统最小读写单位Block4K(8扇区)
-
Inode存属性+数据指针,Block存真实文件内容
-
四级寻址:48K→4M→4G→4T,覆盖所有文件大小
-
硬链接绑inode、不删数据;软链接绑路径、删源失效
-
文件真正删除条件:链接数为0 + 无进程占用
-
rsyslog通过 服务.级别 规则精准控制日志存放