一、块设备与分区

块设备是以固定大小数据块(通常 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)。

分区工具

工具适用场景
fdiskMBR/GPT 通用,交互式,适合命令行手动分区
gdiskGPT 专用,比 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%

二、文件系统创建

分区完成后需格式化——即在分区上创建文件系统。文件系统是组织文件在存储介质上存放方式的数据结构。

常见文件系统

类型特点适用场景
ext4Linux 默认,成熟稳定,日志型,向后兼容 ext2/ext3通用,桌面/服务器首选
XFS高性能,支持大文件(PB 级),扩容方便大数据、媒体存储(RHEL 默认)
Btrfs支持快照、子卷、压缩、数据校验、在线扩容缩容需要高级特性的场景(openSUSE 默认)
F2FS针对闪存优化(Flash-Friendly)SD 卡、UFS、SSD
vfat/exFAT/NTFSWindows 兼容与 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 /mntumount /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 列设备标识,强烈建议使用 UUIDblkid 查看),而非 /dev/sdX(设备名可能在重启后变化)
第 2 列挂载点路径
第 3 列文件系统类型(ext4xfsvfatswapauto 自动检测)
第 4 列挂载选项(defaultsnoatimero 等,多个选项用逗号分隔)
第 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 分离

笔记结语

存储与文件系统的核心认知:

  1. 设备在 /dev/,信息在 /proc/partitions/sys/block/ —— 内核视角的块设备信息亦可从此获取。
  2. 分区表决定磁盘划分,文件系统决定数据组织 —— 分区是物理边界(MBR/GPT),文件系统是逻辑结构(ext4/XFS/Btrfs)。
  3. UUID 挂载比 /dev/sdX 更可靠 —— 设备名可能因内核检测顺序变化。
  4. 挂载点只是个目录,永久性由 /etc/fstab 决定 —— 无论挂在 /mnt 还是 /data,只要写入 fstab 就是永久的。
  5. Linux 存储栈:应用 → VFS → 文件系统 → 块设备层 → 硬件。理解这条路径,所有存储相关操作都能找到对应的层级。