一、块设备与分区
块设备是以固定大小数据块(通常 4KiB)为读写单位的存储设备文件,位于 /dev/ 下:/dev/sda(SATA/SCSI)、/dev/nvme0n1(NVMe SSD)、/dev/vda(虚拟化)。
查看块设备:
| 命令 | 说明 |
|---|---|
lsblk | 树形展示所有块设备及分区层级 |
lsblk -f | 带文件系统类型和 UUID |
fdisk -l /dev/sda | 查看指定设备的详细分区表 |
parted /dev/sda print | 查看分区表(支持 GPT,输出更标准) |
blkid | 列出所有设备的 UUID 和文件系统类型 |
cat /proc/partitions | 内核视角下的分区列表(原始数据) |
分区表类型:
- MBR(Master Boot Record):传统格式,支持最多 4 个主分区(或 3 主分区 + 1 扩展分区),最大 2TiB 磁盘,兼容性广但老旧。
- GPT(GUID Partition Table):现代标准,支持 128+ 分区、>2TiB 磁盘,自带 CRC 校验,UEFI 引导的强制要求(但 BIOS 也可引导 GPT)。
分区工具:
| 工具 | 适用场景 |
|---|---|
fdisk | MBR/GPT 通用,交互式,适合命令行手动分区 |
gdisk | GPT 专用,比 fdisk 对 GPT 支持更完整 |
parted | 脚本化分区,支持高级操作(如分区大小调整、对齐),语法稳定 |
cfdisk | 交互式 TUI,对新手更友好 |
fdisk /dev/sda # 交互式分区(m 帮助,w 写入,q 退出)
parted /dev/sda # 进入 parted 交互界面
parted -s /dev/sda mklabel gpt
parted -s /dev/sda mkpart primary ext4 1MiB 100%二、文件系统创建
分区完成后需格式化——即在分区上创建文件系统。文件系统是组织文件在存储介质上存放方式的数据结构。
常见文件系统:
| 类型 | 特点 | 适用场景 |
|---|---|---|
ext4 | Linux 默认,成熟稳定,日志型,向后兼容 ext2/ext3 | 通用,桌面/服务器首选 |
XFS | 高性能,支持大文件(PB 级),扩容方便 | 大数据、媒体存储(RHEL 默认) |
Btrfs | 支持快照、子卷、压缩、数据校验、在线扩容缩容 | 需要高级特性的场景(openSUSE 默认) |
F2FS | 针对闪存优化(Flash-Friendly) | SD 卡、UFS、SSD |
vfat/exFAT/NTFS | Windows 兼容 | 与 Windows 双启动、U 盘交换数据 |
tmpfs | 基于内存的文件系统,重启清零 | /tmp、/run、/dev/shm |
创建命令:
mkfs.ext4 /dev/sda1 # 格式化为 ext4
mkfs.xfs /dev/sda1 # 格式化为 XFS
mkfs.btrfs /dev/sda1 # 格式化为 Btrfs
mkfs.vfat /dev/sda1 # FAT32
mkfs.ntfs /dev/sda1 # NTFS(需安装 ntfs-3g)警告:格式化会销毁分区上所有原有数据,操作前务必确认目标分区无误。
三、挂载与持久化
挂载是将块设备附加到根目录树某个空目录(挂载点)的过程,使设备内容在指定路径下可访问。
| 命令 | 说明 |
|---|---|
mount /dev/sda1 /mnt | 将 /dev/sda1 挂载到 /mnt |
mount -t ext4 /dev/sda1 /mnt | 指定文件系统类型 |
umount /mnt 或 umount /dev/sda1 | 卸载(需无进程在使用该路径) |
mount | 无参数查看当前所有挂载 |
findmnt | 树形展示挂载关系(比 mount 更清晰) |
lsblk -f | 查看挂载点与文件系统对应关系 |
挂载选项示例:
mount -o rw,noatime /dev/sda1 /data # 读写,不更新访问时间(提升性能)
mount -o ro /dev/sda1 /backup # 只读挂载开机自动挂载:写入 /etc/fstab(File System Table)。
/etc/fstab 每行格式(空格/Tab 分隔):
设备 挂载点 文件系统类型 挂载选项 dump备份 fsck检查顺序
示例:
UUID=1234-5678 /boot vfat defaults,noatime 0 2
UUID=abcd-efgh / ext4 defaults,noatime 0 1
/dev/sda3 /home ext4 defaults,noatime 0 2
| 字段 | 说明 |
|---|---|
| 第 1 列 | 设备标识,强烈建议使用 UUID(blkid 查看),而非 /dev/sdX(设备名可能在重启后变化) |
| 第 2 列 | 挂载点路径 |
| 第 3 列 | 文件系统类型(ext4、xfs、vfat、swap、auto 自动检测) |
| 第 4 列 | 挂载选项(defaults、noatime、ro 等,多个选项用逗号分隔) |
| 第 5 列 | dump 备份(0=不备份,1=备份,通常设为 0) |
| 第 6 列 | fsck 启动检查顺序(0=不检查,1=根分区,2=其他分区) |
永久挂载与目录名无关——将挂载信息写入
/etc/fstab即为永久挂载,写在/mnt、/data还是/srv下都可以。
四、交换分区与文件
交换空间是磁盘上的一块区域,充当“慢速扩展内存”——内存压力大时,将不活跃的内存页换出到交换空间,释放物理内存。
| 命令 | 说明 |
|---|---|
swapon -s | 查看当前交换分区/文件使用情况 |
swapon /dev/sda2 | 启用交换分区 |
swapoff /dev/sda2 | 停用交换分区 |
mkswap /dev/sda2 | 格式化为交换空间 |
交换文件(无需单独分区):
fallocate -l 4G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile在 /etc/fstab 中添加:/swapfile none swap defaults 0 0
认知:
vm.swappiness(默认 60)控制内核使用交换的倾向——值越低越倾向使用物理内存,值越高越积极换出。服务器可调至 10~20 以减少磁盘 I/O 干扰。
五、存储层次完整认知
完整的数据路径:
应用程序 → 文件系统(ext4/XFS/Btrfs)→ 块设备层(I/O 调度)→ 磁盘驱动 → 物理存储介质
| 概念 | 位置 | 说明 |
|---|---|---|
| 文件系统 | 用户态 | 将文件名、权限、目录树映射到物理块(inode 与数据块),通过 VFS(虚拟文件系统)抽象层统一接口 |
| 块设备 | 内核态 | 以固定大小块为单位的读写接口,通过 major:minor 设备号标识 |
| 分区表 | 磁盘最前端 | MBR(512B 第一扇区)或 GPT(前 34 个 LBA),记录分区起始地址和大小 |
| UUID | 文件系统元数据 | 文件系统创建时生成的唯一标识,存储在文件系统超级块中,不受设备名变化影响 |
| 挂载 | VFS 层 | 将块设备上的文件系统附加到根目录树,形成统一命名空间 |
| inode | 文件系统内部 | 存储文件元数据(大小、权限、时间戳、数据块指针),文件名仅存储在目录项中,与 inode 分离 |
笔记结语
存储与文件系统的核心认知:
- 设备在
/dev/,信息在/proc/partitions和/sys/block/—— 内核视角的块设备信息亦可从此获取。 - 分区表决定磁盘划分,文件系统决定数据组织 —— 分区是物理边界(MBR/GPT),文件系统是逻辑结构(ext4/XFS/Btrfs)。
- UUID 挂载比
/dev/sdX更可靠 —— 设备名可能因内核检测顺序变化。 - 挂载点只是个目录,永久性由
/etc/fstab决定 —— 无论挂在/mnt还是/data,只要写入 fstab 就是永久的。 - Linux 存储栈:应用 → VFS → 文件系统 → 块设备层 → 硬件。理解这条路径,所有存储相关操作都能找到对应的层级。