Linux 存储基础:区分磁盘、分区、文件系统与挂载
磁盘是提供块存储的设备,分区是设备中划分出的区域,文件系统则负责组织文件与目录。挂载把文件系统接入目录树。理解 Linux 存储时,应分别确认设备、分区、文件系统和挂载点,不能把这四者当成同一对象。
本课区分存储层次,并用可丢弃的镜像文件练习创建文件系统。将它连接到目录并检查实际来源的方法,见挂载与存储空间管理(英语)。配置练习以常规 Ubuntu 26.04 LTS 或 Rocky Linux 9 系列虚拟机为参考;容器、WSL 和其他版本的能力与工具可能不同。先按虚拟机环境准备(英语)核对版本并准备控制台恢复方式。
把存储结构分成几个层次
| 层次 | 检查对象 | 常用工具 |
|---|---|---|
| 块设备 | 容量、类型、父子关系 | lsblk |
| 分区或逻辑卷 | 划定区域或逻辑存储分配 | lsblk、分区或 LVM 工具 |
| 文件系统 | ext4、XFS 等格式及 UUID | lsblk -f、blkid |
| 挂载 | 访问路径和挂载选项 | findmnt、df |
常见关系是“磁盘 → 分区 → 文件系统 → 挂载点”,实际系统也可能插入逻辑卷管理(LVM,Logical Volume Manager)、加密或软件独立磁盘冗余阵列(RAID)等层次。LVM 可以组合物理空间并分配逻辑卷;文件系统也可以直接放在整个设备上。没有分区,不代表设备为空。
文件系统的 UUID 是用于识别它的通用唯一标识符,和设备名称、分区 UUID 并非同一概念。克隆镜像还可能复制 UUID,因此不能只凭一个字段就认定实际设备身份。
结合设备名称与实际用途检查
lsblk -o NAME,TYPE,SIZE,FSTYPE,UUID,MOUNTPOINTS
findmnt -T /
df -hT /
sda、vda、nvme0n1 等名称受设备类型及发现顺序影响,NVMe 的分区通常显示为 nvme0n1p1。不要只看名称就判断哪个是系统盘或新盘,应同时比较容量、挂载位置和云平台卷标识。旧版 lsblk 若不支持 MOUNTPOINTS,可改用 MOUNTPOINT,但它通常只显示一个挂载点。
lsblk 展示块设备关系,findmnt -T / 查找包含根路径的挂载,df -hT / 显示该路径所在文件系统的类型和空间使用情况。保留空间、元数据、计量单位和存储层次可造成数字差异。df 没有显示的设备,也可能属于交换空间、LVM 或其他用途,不能直接当作未使用设备。
分区表与文件系统格式是不同概念
GUID 分区表(GPT,GUID Partition Table)和主引导记录(MBR,Master Boot Record)描述分区布局,ext4 与 XFS 则是文件系统格式。GPT 磁盘上的一个分区可以包含 ext4,两者不是替代选择。重建分区表可能使原有数据区域失去可访问的布局信息,本课不改动真实磁盘的分区表。
ext4 与 XFS 的管理、扩展和修复工具不同,缩放能力和离线要求也不同。应依据发行版支持、维护要求及备份恢复流程选择,而非只看默认格式。不要因为命令名称相似,就把某一文件系统的工具强行用于另一格式。
用一次性镜像文件代替真实磁盘练习
下面在当前普通账号的主目录下创建唯一临时目录及一个 128 MiB 文件,即 134217728 字节。truncate -s 128M 使用二进制倍数,扩展部分通常可表现为稀疏区,逻辑大小不等于立即实际占用的磁盘空间。mkfs.ext4 和 dumpe2fs 通常由 e2fsprogs 提供;缺少工具时应先按发行版包管理方式准备,再重新开始实验。
mkfs.ext4 会初始化目标内容。仅对下面新建的普通镜像文件操作,不要把路径改成真实 /dev/... 设备,也不需要为此加 sudo。以下 exit 1 使创建目录、调整文件大小或格式化失败时立即停止,避免继续对空变量拼出的错误路径操作;若直接粘贴到交互 Shell,失败时该 Shell 会退出。
lab=$(mktemp -d "$HOME/linux-storage-lab.XXXXXX") || exit 1
truncate -s 128M "$lab/disk.img" || exit 1
test -f "$lab/disk.img" && test ! -b "$lab/disk.img" && mkfs.ext4 -F "$lab/disk.img" || exit 1
file "$lab/disk.img"
dumpe2fs -h "$lab/disk.img" 2>/dev/null | head -n 15
printf "lab=%s\n" "$lab"
test -f 与 test ! -b 检查普通文件及非块设备条件,唯一临时目录则避免复用已有文件。这里的 -F 用于允许在普通文件内创建文件系统,不能因此忽略目标检查。一般文件测试也不能替代对来历不明或共享路径的核实。
预期 file 能识别 ext 系列文件系统,dumpe2fs -h 显示超级块信息,例如文件系统 UUID 和块信息;前 15 行未必含全部字段。其标准错误被重定向,且管道末端 head 的成功不等于 dumpe2fs 成功。若没有输出或格式不符,直接运行 dumpe2fs -h "$lab/disk.img" 阅读错误,不要盲目重复格式化。
文件系统此时存在于镜像内部,但尚未挂载,不能作为普通目录写入文件。镜像逻辑大小与内部可用空间也不相同,因为文件系统需要元数据并可能保留部分空间。
核对结果并只清理实验数据
实验重点是识别层次:这个普通文件不含分区表,而是直接容纳 ext4。它也不会仅因创建成功就作为独立块设备出现在 lsblk 中。若继续做挂载练习,保留最后打印的临时目录路径;否则用文件管理器核对路径与内容,仅删除这次创建的镜像和临时目录。
真实设备变更前,需要可恢复的备份、准确的设备身份,以及对挂载、交换空间、LVM、RAID 使用情况的检查。状态不明确时,先保留证据并制定恢复计划,再考虑格式化或重写分区。
官方参考
ext4 说明见 Linux 内核 ext4 文档。具体选项见 mke2fs(8) 手册和 dumpe2fs(8) 手册;设备与路径查询见 lsblk(8) 手册和 findmnt(8) 手册。分区表与文件长度语义分别见 GNU Parted 手册和 GNU truncate 手册。




