核心概念层级图

为了清晰理解,我们可以将整个存储管理分为几个层级:

物理硬盘 → 分区/逻辑卷 → 文件系统 → 挂载点

下面我们自底向上解释。


1. 物理硬盘

在 Linux 中,硬盘设备被表示为 /dev/ 目录下的一个文件。

  • 命名规则

    • SATA / SAS / NVMe (SSD): sdX

      • 例如:第一块硬盘 /dev/sda,第二块 /dev/sdb

      • 分区则用数字表示:/dev/sda1/dev/sda2

    • NVMe (M.2 SSD): nvmeXnYpZ

      • X 是控制器编号,Y 是命名空间(通常为1),Z 是分区号。

      • 例如:第一个控制器的第一个分区:/dev/nvme0n1p1

    • 旧式 IDE: hdX (现在已较少见)。

  • 查看硬盘命令

    • lsblk:最常用,以树形显示所有块设备(硬盘、分区)。

    • fdisk -l 或 sudo fdisk -l:列出详细信息,包括分区表类型。

    • sudo blkid:显示设备的UUID和文件系统类型。

    • cat /proc/partitions:查看内核识别的分区信息。


2. 分区表

分区表是写在硬盘最开始扇区的“地图”,告诉系统硬盘是如何划分的。主要有两种类型:

  • MBR

    • 主引导记录,传统方案。

    • 限制:最多支持 4个主分区,或 3个主分区 + 1个扩展分区(扩展分区内可再分多个逻辑分区)。最大支持 2.2TB 硬盘。

    • 识别fdisk -l 会显示 Disklabel type: dos

  • GPT

    • GUID 分区表,现代标准。

    • 优势:几乎无分区数量限制(通常支持128个以上),支持大于 2.2TB 的硬盘,更安全(有备份和CRC校验)。

    • 识别fdisk -l 会显示 Disklabel type: gpt

    • 需要 UEFI 固件支持(现代电脑都支持)。


3. 分区

硬盘被划分成独立逻辑区域,每个分区在 /dev/ 下表现为一个独立的设备文件(如 /dev/sda1)。

  • 分区类型

    • 主分区:MBR下可以直接使用的分区。

    • 扩展分区:MBR下的特殊容器,本身不能直接使用,用于包含逻辑分区

    • 逻辑分区:在MBR扩展分区内创建,编号从5开始(/dev/sda5)。

    • GPT分区:所有分区都是平等的,没有主/逻辑之分。

  • Linux下的常见分区方案

    • / (根分区):必需,包含操作系统核心文件。

    • /boot:存放系统启动所需文件(内核、initramfs)。在旧系统或使用LVM时推荐单独分区。使用UEFI/GPT时,必须有 EFI系统分区

    • /home:强烈建议单独分区,存放用户数据。系统重装时可以保留。

    • swap (交换分区):用作虚拟内存,现在也可以使用 交换文件

    • /var:存放经常变化的文件(日志、缓存)。对服务器建议独立。

    • /tmp:临时文件。


4. 文件系统

分区就像一块“空地”,文件系统则是上面的“建筑规则和道路规划”,决定了数据如何存储、索引。

  • 常见 Linux 文件系统

    • ext4: 最常用、稳定可靠的默认选择。

    • XFS: 高性能,特别适合大文件(如数据库、视频),在线调整大小(只能扩大)。

    • Btrfs: 高级功能(写时复制、快照、子卷、数据去重),但仍在发展中。

    • ZFS: 企业级,功能极其强大(快照、压缩、纠删码),但非原生Linux内核,许可问题需注意。

    • FAT32 / NTFS / exFAT: Windows文件系统,Linux通过内核驱动支持,常用于U盘或跨平台共享。

  • 创建文件系统(格式化)

    sudo mkfs.ext4 /dev/sdb1   # 格式化为ext4
    sudo mkfs.xfs /dev/sdb2    # 格式化为XFS

5. 挂载

将分区(及其上的文件系统)关联到目录树上的某个目录,这个目录称为 挂载点。只有挂载后,才能通过文件系统访问其中的数据。

  • 挂载命令

    sudo mount /dev/sdb1 /mnt/mydata
    • 将设备 /dev/sdb1 挂载到目录 /mnt/mydata/mnt/mydata 目录必须已存在。

  • 卸载命令

    sudo umount /mnt/mydata  # 或 sudo umount /dev/sdb1
    • 重要:卸载前确保没有程序正在访问该挂载点。

  • 自动挂载 (/etc/fstab)

    • 系统启动时自动挂载的配置文件。

    • 每行格式:<设备> <挂载点> <文件系统> <挂载选项> <dump> <pass>

    • 设备推荐使用 UUID(全局唯一标识符),比 /dev/sda1 更稳定(因为设备名可能变)。

      blkid  # 查看UUID
    • 示例 /etc/fstab 条目:

      UUID=1234-abcd-5678 /home ext4 defaults 0 2

6. 进阶:逻辑卷管理器

LVM 提供了比物理分区更灵活的磁盘管理方式。

  • 核心概念

    • PV: 物理卷,就是一块硬盘或一个分区(/dev/sda1)。

    • VG: 卷组,由一个或多个PV组成的大存储池。

    • LV: 逻辑卷,从VG中划分出的“逻辑分区”,这才是最终被格式化和使用的部分。

    • 优势

      • 动态调整: LV可以轻松在线扩展、缩减。

      • 快照: 可以创建某个时间点的数据快照,用于备份或测试。

      • 条带化/镜像: 提升性能或可靠性。

  • 基本操作流程

    1. 创建PV: sudo pvcreate /dev/sdb

    2. 创建VG: sudo vgcreate myvg /dev/sdb

    3. 创建LV: sudo lvcreate -n mylv -L 100G myvg

    4. 格式化LV: sudo mkfs.ext4 /dev/myvg/mylv

    5. 挂载LV: sudo mount /dev/myvg/mylv /mnt/data


总结与实践建议

  1. 新手/桌面用户

    • 使用图形化分区工具(如安装程序中的 gparted)。

    • 简单的 GPT 分区方案:/ + swap + /home

    • 文件系统用 ext4 即可。

  2. 服务器/高级用户

    • 根据用途选择文件系统:通用用 ext4 或 XFS,需要高级功能考虑 Btrfs 或 ZFS。

    • 考虑使用 LVM 以获得灵活性,特别是当未来存储需求可能变化时。

    • 规划好分区,将日志(/var)、数据(/home/srv)与系统分离。

  3. 通用命令速查

    lsblk                        # 查看设备树
    sudo fdisk -l /dev/sda       # 查看分区表
    sudo blkid                   # 查看UUID和文件系统类型
    df -h                        # 查看已挂载文件系统的使用情况
    sudo mount                   # 查看当前挂载信息
    sudo fdisk /dev/sdb          # 对sdb进行分区操作(MBR/GPT)
    sudo gdisk /dev/sdb          # 对sdb进行GPT分区操作(更推荐)
    sudo parted /dev/sdb         # 功能强大的分区工具

理解这些概念后,你将能更从容地管理 Linux 系统的存储,无论是添加新硬盘、调整分区大小还是规划复杂的存储架构。

Logo

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

更多推荐