Linux 存储基础知识
·
Linux 存储基础知识
本文面向 Linux 初学者,用通俗易懂的方式介绍存储相关的基础概念。
一、电脑存储架构全景图
┌─────────────────────────────────────────────────────────────────┐
│ CPU (处理器) │
│ 大脑,负责计算和执行 │
└─────────────────────────────────────────────────────────────────┘
↑↓ 数据交换
┌─────────────────────────────────────────────────────────────────┐
│ RAM (内存) │
│ │
│ 特点:极快、断电丢失、临时存放 │
│ 作用:程序运行时的"工作台" │
│ 比喻:办公桌 - 正在处理的文件放这里 │
└─────────────────────────────────────────────────────────────────┘
↑↓ 数据交换(较慢)
┌─────────────────────────────────────────────────────────────────┐
│ 磁盘 (硬盘) │
│ │
│ 特点:较慢、断电保留、永久存储 │
│ 作用:存放所有文件、程序、系统 │
│ 比喻:文件柜 - 所有资料长期保存在这里 │
└─────────────────────────────────────────────────────────────────┘
二、RAM vs 磁盘
| RAM (内存) | 磁盘 (硬盘) | |
|---|---|---|
| 作用 | 运行程序时的临时工作区 | 永久存储文件 |
| 速度 | 纳秒级 (极快) | 毫秒级 (慢几万倍) |
| 断电后 | 数据丢失 | 数据保留 |
| 价格 | 贵 | 便宜 |
| 容量 | 小 (8-64G 常见) | 大 (几百G到几T) |
| 比喻 | 办公桌 | 文件柜 |
三、磁盘基础知识
磁盘类型
| 类型 | 全称 | 特点 | 适用场景 |
|---|---|---|---|
| HDD | Hard Disk Drive (机械硬盘) | 便宜、容量大、速度慢、有噪音 | 大容量存储、备份 |
| SSD | Solid State Drive (固态硬盘) | 速度快、抗震、静音、价格较高 | 系统盘、常用程序 |
| NVMe SSD | NVMe 固态硬盘 | 比普通 SSD 更快,直连 PCIe | 高性能需求 |
磁盘设备命名规则
所有磁盘设备都在 /dev/ 目录下。
命名规则
| 类型 | 命名格式 | 示例 |
|---|---|---|
| SATA/SAS 硬盘 | sd + 字母 | /dev/sda, /dev/sdb |
| NVMe 固态硬盘 | nvme + 数字 + n + 数字 | /dev/nvme0n1 |
| 虚拟机 virtio 磁盘 | vd + 字母 | /dev/vda, /dev/vdb |
分区编号
/dev/sda # 整块硬盘
/dev/sda1 # 第一个分区
/dev/sda2 # 第二个分区
/dev/nvme0n1 # 整块 NVMe 硬盘
/dev/nvme0n1p1 # 第一个分区(注意有 p)
四、分区与文件系统
为什么要分区?
- 隔离数据:系统崩溃时,数据分区不受影响
- 便于管理:不同用途的数据分开存放
- 性能优化:减少磁盘碎片,提高读写效率
常见文件系统
| 文件系统 | 特点 | 适用场景 |
|---|---|---|
| ext4 | Linux 默认,稳定可靠 | 大多数 Linux 系统 |
| xfs | 高性能,适合大文件 | 服务器、大数据 |
| btrfs | 支持快照、压缩、校验 | 需要高级特性时 |
| ntfs | Windows 默认 | 与 Windows 共享数据 |
| fat32/exfat | 兼容性好 | U盘、移动硬盘 |
挂载的概念
Linux 中,磁盘分区需要"挂载"到目录才能使用:
# 将分区挂载到目录
sudo mount /dev/sdb1 /mnt/data
# 卸载
sudo umount /mnt/data
# 查看当前挂载情况
mount | grep "^/dev"
五、LVM 逻辑卷管理
什么是 LVM
LVM(Logical Volume Manager)让磁盘空间管理更灵活,像搭积木一样可以随时调整。
三层结构
物理卷 (PV) 卷组 (VG) 逻辑卷 (LV)
Physical Volume → Volume Group → Logical Volume
硬盘/分区 → 存储池 → 虚拟分区
LVM 的好处
- 动态调整大小:不用重新分区
- 跨多块硬盘:把多块盘合成一个大池子
- 快照备份:创建某一时刻的数据快照
LVM 常用操作
# 扩展逻辑卷(增加 10G)
sudo lvextend -L +10G /dev/卷组名/逻辑卷名
# 扩展文件系统(ext4)
sudo resize2fs /dev/卷组名/逻辑卷名
# 扩展文件系统(xfs)
sudo xfs_growfs /挂载点
六、根分区空间不足的影响
根分区 / 满了会导致:
- 日志无法写入 → 系统和程序的运行记录丢失
- 程序运行异常 → 很多程序需要写临时文件,写不了就崩溃
- 系统服务故障 → 数据库、Web 服务等可能停止工作
- 严重时无法登录 → 连登录都需要写文件
建议:根分区保持至少 10-20% 的空闲空间。
七、常用命令
查看磁盘信息
lsblk # 列出所有磁盘和分区
df -h # 查看磁盘使用情况
du -sh /path # 查看目录大小
fdisk -l # 查看分区信息
查看 LVM 信息
sudo pvs # 查看物理卷
sudo vgs # 查看卷组
sudo lvs # 查看逻辑卷
清理磁盘空间
# 查看大文件
sudo du -sh /* 2>/dev/null | sort -hr | head -20
# 清理 apt 缓存
sudo apt clean
sudo apt autoremove
# 清理 Docker
sudo docker system prune -a -f --volumes
# 清理 snap 旧版本
sudo snap list --all | awk '/disabled/{print $1, $3}' | \
while read snapname revision; do
sudo snap remove "$snapname" --revision="$revision"
done
八、Linux 目录结构(FHS 标准)
/ # 根目录,所有目录的起点
├── bin # 基本命令(ls, cp, mv 等)
├── boot # 启动文件、内核
├── dev # 设备文件
├── etc # 系统配置文件
├── home # 用户主目录
├── lib # 共享库文件
├── mnt # 临时挂载点
├── opt # 第三方软件
├── proc # 进程和内核信息(虚拟文件系统)
├── root # root 用户主目录
├── tmp # 临时文件
├── usr # 用户程序和数据
│ ├── bin # 用户命令
│ ├── lib # 库文件
│ └── local # 本地安装的软件
└── var # 可变数据(日志、缓存等)
├── log # 系统日志
└── tmp # 持久临时文件
九、数据流动过程
理解程序如何使用存储:
举例:打开并编辑一个文件
1. 文件存在磁盘上
/home/user/document.txt (在硬盘里)
↓
2. 打开文件时,加载到内存
RAM: [document.txt 的内容...]
↓
3. CPU 处理你的编辑操作
↓
4. 保存时,写回磁盘
磁盘: document.txt (更新后的内容)
这就是为什么:
- 未保存就断电 → 数据丢失(只在内存里)
- 保存后断电 → 数据安全(已写入磁盘)
十、虚拟机存储控制器
如果你使用虚拟机,了解存储控制器类型也很有用:
| 控制器 | 特点 | 推荐场景 |
|---|---|---|
| IDE | 最传统,兼容性好,性能低 | 老旧系统 |
| SATA | 比 IDE 更现代,支持热插拔 | 普通桌面虚拟机 |
| SCSI | 企业级,支持更多设备 | 服务器虚拟机 |
| NVMe | 最新高性能协议,延迟极低 | 追求性能 |
| Virtio | KVM 半虚拟化,性能接近原生 | Linux 虚拟机 |
十一、Swap 交换空间
什么是 Swap
Swap 是磁盘上的一块空间,当内存不够用时,系统会把内存中暂时不用的数据移到 Swap,腾出内存给正在运行的程序。
Swap 的作用
内存满了怎么办?
没有 Swap:程序直接被杀死 (OOM Killer)
有 Swap: 暂时不用的数据移到磁盘,程序继续运行(但会变慢)
Swap 的形式
- Swap 分区:专门的磁盘分区
- Swap 文件:普通文件,更灵活
常用命令
# 查看 Swap 使用情况
free -h
swapon --show
# 创建 Swap 文件(2G)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
# 永久生效(添加到 /etc/fstab)
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Swap 大小建议
| 内存大小 | 建议 Swap |
|---|---|
| ≤ 2GB | 内存的 2 倍 |
| 2-8GB | 与内存相等 |
| 8-64GB | 至少 4GB |
| > 64GB | 至少 4GB |
十二、RAID 磁盘阵列
什么是 RAID
RAID(Redundant Array of Independent Disks)把多块硬盘组合起来,提高性能或可靠性。
常见 RAID 级别
| 级别 | 最少硬盘 | 特点 | 适用场景 |
|---|---|---|---|
| RAID 0 | 2 | 速度翻倍,无冗余,一块坏全丢 | 追求性能,数据不重要 |
| RAID 1 | 2 | 镜像备份,一块坏不丢数据 | 重要数据,如系统盘 |
| RAID 5 | 3 | 分布式校验,坏一块可恢复 | 平衡性能和安全 |
| RAID 6 | 4 | 双重校验,坏两块可恢复 | 高可靠性需求 |
| RAID 10 | 4 | RAID 1+0,兼顾速度和安全 | 数据库服务器 |
图解
RAID 0 (条带化):
磁盘A: [1][3][5] 速度快,但一块坏全丢
磁盘B: [2][4][6]
RAID 1 (镜像):
磁盘A: [1][2][3] 完全相同,一块坏另一块还有
磁盘B: [1][2][3]
RAID 5 (分布式校验):
磁盘A: [1] [4] [P]
磁盘B: [2] [P] [7] P=校验数据,可恢复
磁盘C: [P] [5] [8]
十三、inode 与文件系统原理
什么是 inode
inode(索引节点)存储文件的元信息,不包含文件名和内容。
文件 = 文件名 + inode + 数据块
inode 包含:
- 文件大小
- 所有者 (UID/GID)
- 权限 (rwx)
- 时间戳 (创建/修改/访问)
- 数据块位置
为什么要了解 inode
# 查看 inode 使用情况
df -i
# 可能出现的问题:
# 磁盘空间还有,但 inode 用完了 → 无法创建新文件
# 常见于大量小文件的场景(如邮件服务器)
硬链接与软链接
# 硬链接:共享同一个 inode
ln file1 file2
# 软链接(符号链接):类似快捷方式
ln -s file1 file2
# 区别
硬链接:删除原文件,链接仍可用
软链接:删除原文件,链接失效
十四、磁盘 I/O 与性能
I/O 基本概念
| 术语 | 含义 |
|---|---|
| IOPS | 每秒 I/O 操作数,衡量随机读写能力 |
| 吞吐量 | 每秒传输数据量 (MB/s),衡量顺序读写能力 |
| 延迟 | 完成一次 I/O 的时间 |
性能对比
| 设备类型 | IOPS | 顺序读取 |
|---|---|---|
| HDD (7200rpm) | 100-200 | 100-200 MB/s |
| SATA SSD | 10,000-100,000 | 500-600 MB/s |
| NVMe SSD | 100,000-1,000,000 | 2,000-7,000 MB/s |
性能监控命令
# 实时查看磁盘 I/O
iostat -x 1
# 查看哪些进程在读写磁盘
iotop
# 测试磁盘速度
# 写入测试
dd if=/dev/zero of=testfile bs=1G count=1 oflag=direct
# 读取测试
dd if=testfile of=/dev/null bs=1G count=1 iflag=direct
十五、最佳实践
分区建议
| 挂载点 | 建议大小 | 用途 |
|---|---|---|
| /boot | 500MB - 1GB | 内核和启动文件 |
| / | 20-50GB | 系统根目录 |
| /home | 剩余空间 | 用户数据 |
| swap | 内存的 1-2 倍 | 交换空间 |
日常维护建议
- 定期检查空间:
df -h查看使用率 - 保持 10-20% 空闲:避免系统异常
- 定期清理:日志、缓存、临时文件
- 重要数据备份:磁盘可能损坏
总结
存储层次:CPU ↔ RAM (内存) ↔ 磁盘 (硬盘)
↑ ↑
临时存储 永久存储
磁盘组织:物理磁盘 → 分区 → 文件系统 → 文件/目录
↓
(可选) LVM → 更灵活的空间管理
记住核心概念:
| 概念 | 一句话解释 |
|---|---|
| RAM | 快但小,断电丢失,程序运行用 |
| 磁盘 | 慢但大,断电保留,存储文件用 |
| 分区 | 把磁盘分成多个独立区域 |
| 文件系统 | 决定数据如何在磁盘上组织 |
| LVM | 让分区大小可以灵活调整 |
| 挂载 | 把分区连接到目录树上使用 |
| Swap | 内存不够时的临时救急空间 |
| RAID | 多块硬盘组合提高性能或可靠性 |
| inode | 存储文件元信息的数据结构 |
延伸阅读
更多推荐


所有评论(0)