Linux 存储基础知识

本文面向 Linux 初学者,用通俗易懂的方式介绍存储相关的基础概念。

一、电脑存储架构全景图

┌─────────────────────────────────────────────────────────────────┐
│                         CPU (处理器)                             │
│                      大脑,负责计算和执行                          │
└─────────────────────────────────────────────────────────────────┘
                                ↑↓ 数据交换
┌─────────────────────────────────────────────────────────────────┐
│                         RAM (内存)                               │
│                                                                 │
│   特点:极快、断电丢失、临时存放                                    │
│   作用:程序运行时的"工作台"                                       │
│   比喻:办公桌 - 正在处理的文件放这里                               │
└─────────────────────────────────────────────────────────────────┘
                                ↑↓ 数据交换(较慢)
┌─────────────────────────────────────────────────────────────────┐
│                         磁盘 (硬盘)                              │
│                                                                 │
│   特点:较慢、断电保留、永久存储                                    │
│   作用:存放所有文件、程序、系统                                    │
│   比喻:文件柜 - 所有资料长期保存在这里                             │
└─────────────────────────────────────────────────────────────────┘

二、RAM vs 磁盘

RAM (内存)磁盘 (硬盘)
作用运行程序时的临时工作区永久存储文件
速度纳秒级 (极快)毫秒级 (慢几万倍)
断电后数据丢失数据保留
价格便宜
容量小 (8-64G 常见)大 (几百G到几T)
比喻办公桌文件柜

三、磁盘基础知识

磁盘类型

类型全称特点适用场景
HDDHard Disk Drive (机械硬盘)便宜、容量大、速度慢、有噪音大容量存储、备份
SSDSolid State Drive (固态硬盘)速度快、抗震、静音、价格较高系统盘、常用程序
NVMe SSDNVMe 固态硬盘比普通 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)

四、分区与文件系统

为什么要分区?

  1. 隔离数据:系统崩溃时,数据分区不受影响
  2. 便于管理:不同用途的数据分开存放
  3. 性能优化:减少磁盘碎片,提高读写效率

常见文件系统

文件系统特点适用场景
ext4Linux 默认,稳定可靠大多数 Linux 系统
xfs高性能,适合大文件服务器、大数据
btrfs支持快照、压缩、校验需要高级特性时
ntfsWindows 默认与 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 的好处

  1. 动态调整大小:不用重新分区
  2. 跨多块硬盘:把多块盘合成一个大池子
  3. 快照备份:创建某一时刻的数据快照

LVM 常用操作

# 扩展逻辑卷(增加 10G)
sudo lvextend -L +10G /dev/卷组名/逻辑卷名

# 扩展文件系统(ext4)
sudo resize2fs /dev/卷组名/逻辑卷名

# 扩展文件系统(xfs)
sudo xfs_growfs /挂载点

六、根分区空间不足的影响

根分区 / 满了会导致:

  1. 日志无法写入 → 系统和程序的运行记录丢失
  2. 程序运行异常 → 很多程序需要写临时文件,写不了就崩溃
  3. 系统服务故障 → 数据库、Web 服务等可能停止工作
  4. 严重时无法登录 → 连登录都需要写文件

建议:根分区保持至少 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最新高性能协议,延迟极低追求性能
VirtioKVM 半虚拟化,性能接近原生Linux 虚拟机

十一、Swap 交换空间

什么是 Swap

Swap 是磁盘上的一块空间,当内存不够用时,系统会把内存中暂时不用的数据移到 Swap,腾出内存给正在运行的程序。

Swap 的作用

内存满了怎么办?

没有 Swap:程序直接被杀死 (OOM Killer)
有 Swap:  暂时不用的数据移到磁盘,程序继续运行(但会变慢)

Swap 的形式

  1. Swap 分区:专门的磁盘分区
  2. 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 02速度翻倍,无冗余,一块坏全丢追求性能,数据不重要
RAID 12镜像备份,一块坏不丢数据重要数据,如系统盘
RAID 53分布式校验,坏一块可恢复平衡性能和安全
RAID 64双重校验,坏两块可恢复高可靠性需求
RAID 104RAID 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-200100-200 MB/s
SATA SSD10,000-100,000500-600 MB/s
NVMe SSD100,000-1,000,0002,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

十五、最佳实践

分区建议

挂载点建议大小用途
/boot500MB - 1GB内核和启动文件
/20-50GB系统根目录
/home剩余空间用户数据
swap内存的 1-2 倍交换空间

日常维护建议

  1. 定期检查空间df -h 查看使用率
  2. 保持 10-20% 空闲:避免系统异常
  3. 定期清理:日志、缓存、临时文件
  4. 重要数据备份:磁盘可能损坏

总结

存储层次:CPU ↔ RAM (内存) ↔ 磁盘 (硬盘)
                 ↑              ↑
              临时存储       永久存储

磁盘组织:物理磁盘 → 分区 → 文件系统 → 文件/目录
                      ↓
                 (可选) LVM → 更灵活的空间管理

记住核心概念:

概念一句话解释
RAM快但小,断电丢失,程序运行用
磁盘慢但大,断电保留,存储文件用
分区把磁盘分成多个独立区域
文件系统决定数据如何在磁盘上组织
LVM让分区大小可以灵活调整
挂载把分区连接到目录树上使用
Swap内存不够时的临时救急空间
RAID多块硬盘组合提高性能或可靠性
inode存储文件元信息的数据结构

延伸阅读


Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐