标签: 文件系统

  • Linux系统扩容分区及文件系统

    Linux系统扩容分区及文件系统

    扩容分区

    • 运行sudo lsblk,确认待扩容云盘设备名称及分区编号
    $ sudo lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda    253:0    0   50G  0 disk 
    ├─vda1 253:1    0    2M  0 part 
    ├─vda2 253:2    0  200M  0 part /boot/efi
    └─vda3 253:3    0 39.8G  0 part /
    vdb    253:16   0   40G  0 disk /data
    
    • 如果待扩容云盘不存在分区,则无需扩容分区,可直接扩容文件系统。示例中数据盘vdb不存在分区,无需扩容分区

    • 如果待扩容云盘容量大于分区总容量,需要扩容分区。示例中系统盘vda容量为50GiB,存在三个分区,分区总容量为40GiB,需对最后一个编号为3的分区vda3扩容。

    注:仅支持对单块云盘的最后一个分区扩容。

    常用设备命名及分区格式如下:

    设备类型 设备名称 分区编号
    非NVMe协议云盘 格式为vd[a-z],如vda(系统盘),vdb,vdc等,适用于大多数云盘和本地盘设备。 格式为vd[a-z]<分区编号>,如vda3分区编号为3。
    NVMe协议云盘 格式为nvmeXn1,如nvme0n1,nvme1n1,nvme2n1等。 格式为nvmeXn1p<分区编号>,如nvme0n1p1分区编号为1。
    • 执行分区扩容指令

    将命令中的<设备名称>与<分区编号>调整为上面获取到的设备名称与分区编号后执行命令。

    注:设备名称和分区编号之间有空格。命令中的LC_ALL=en_US.UTF-8是用于适配中文系统编码的环境变量,当回执内容中包含关键字CHANGED,表示指令执行成功

    sudo LC_ALL=en_US.UTF-8 growpart /dev/<设备名称> <分区编号>
    
    • 校验分区扩容结果。

    运行sudo lsblk命令,若分区总量等于设备容量,示例中设备vda容量大小与分区总量都为50GiB,表明分区扩容完成。接下来需要扩容文件系统,才能使新增空间可用。

    $ sudo lsblk
    NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    vda    253:0    0   50G  0 disk 
    ├─vda1 253:1    0    2M  0 part 
    ├─vda2 253:2    0  200M  0 part /boot/efi
    └─vda3 253:3    0 49.8G  0 part /
    vdb    253:16   0   40G  0 disk /data
    

    扩容文件系统

    • 运行命令sudo lsblk -f,记录待扩容云盘的目标设备名称、文件系统类型和挂载目录,后续执行扩容文件系统指令时需要使用。
    $ sudo lsblk -f
    NAME   FSTYPE LABEL UUID                                 MOUNTPOINT
    vda                                                      
    ├─vda1                                                   
    ├─vda2 vfat         7938-FA03                            /boot/efi
    └─vda3 ext4   root  33b46ac5-7482-4aa5-8de0-60ab4c3a4c78 /
    vdb    ext4         3d7a3861-da22-484e-bbf4-b09375894b4f /data                                     
    
    • 如果设备存在分区,目标设备名称为最后一个分区名称。示例中系统盘vda目标设备名称为vda3,文件系统类型为ext4,挂载目录为/。

    • 如果设备不存在分区,目标设备名称与设备名称一致。示例中数据盘vdb目标设备名称为vdb,文件系统类型为ext4,挂载目录为/data。

    执行扩容文件系统。

    • ext2/ext3/ext4文件系统。将命令中的变量<目标设备名称>替换为从上一步中获取的目标设备名称后执行
    sudo resize2fs /dev/<目标设备名称>
    
    • xfs文件系统。将命令中的<挂载目录>替换为从上一步中获取的挂载目录后执行。
    sudo xfs_growfs <挂载目录>
    
    • 检查文件系统扩容是否成功。

    运行sudo df -Th,确认文件系统大小(回执中Size字段对应的值)是否与云盘容量基本一致。

    文件系统创建时会占用部分容量用于存储元数据,因此文件系统大小可能小于实际容量。

  • Linux磁盘与文件系统管理

    Linux磁盘与文件系统管理

    磁盘分类与设备命名

    Linux如何识别和命名磁盘是所有磁盘管理操作的基础

    分类 设备名 描述
    IDE / ATA (PATA) 硬盘 /dev/hda, /dev/hdb 较早的硬盘接口标准,现在已不常见。a, b 代表主/从设备。分区名为 /dev/hda1, /dev/hda2
    SATA/SAS/SCSI 硬盘 /dev/sda, /dev/sdb 最常见的硬盘类型。a, b 代表第一块、第二块磁盘。分区名为 /dev/sda1, /dev/sda2。
    NVMe 固态硬盘 /dev/nvme0n1 高速 M.2 接口的SSD。nvme0是控制器,n1是命名空间(磁盘)。分区名为 /dev/nvme0n1p1。
    虚拟化磁盘 (VirtIO) /dev/vda, /dev/vdb 在KVM等虚拟化环境中常见的设备名。分区名为 /dev/vda1, /dev/vda2
    分区方案 MBR vs GPT MBR是传统方案,最大2TB,最多4主分区。GPT是现代方案,支持大容量,分区数多

    分区管理 (fdisk & gdisk)

    分区是将一块物理磁盘划分成多个逻辑区域的过程

    # 列出所有磁盘及其分区信息
    fdisk -l
    
    # 以树状结构清晰显示
    lsblk
    

    • 使用 fdisk (用于MBR分区),fdisk 是一个交互式的磁盘分区工具

    例如对新磁盘 /dev/sdb 进行分区

    # 启动fdisk交互模式,目标是/dev/sdb
    fdisk /dev/sdb
    

    格式化分区 (mkfs)

    分区后,必须创建文件系统 (格式化),才能存储数据。

    常用文件系统类型:

    • ext4: Linux最常用的日志文件系统,稳定可靠。

    • xfs: 高性能的日志文件系统,适合大文件和高性能计算

    # 将 /dev/sdb1 分区格式化为 xfs 文件系统
    mkfs.xfs /dev/sdb1
    
    #查看格式化类型
    blkid /dev/sdb1
    
    # 将 /dev/sdc1 分区格式化为 ext4 文件系统
    mkfs.ext4 /dev/sdc1
    

    逻辑卷管理 (LVM)

    LVM (Logical Volume Management) 提供了比传统分区更灵活的磁盘管理方式,可以动态调整大小。

    物理卷 (PV) -> 卷组 (VG) -> 逻辑卷 (LV),(将物理分区加入到存储池,再从存储池中划分出可用的逻辑分区)

    例如:将 /dev/sdb1 和 /dev/sdc1 组合成LVM

    # 1. 创建物理卷 (PV)
    pvcreate /dev/sdb1 /dev/sdc1
    
    # 2. 创建卷组 (VG),命名为 my_vg
    vgcreate my_vg /dev/sdb1 /dev/sdc1
    
    # 3. 从卷组 my_vg 中创建一个名为 my_lv 的逻辑卷 (LV),大小为15GB
    lvcreate -n my_lv -L 15G my_vg
    
    # 4. 格式化创建好的逻辑卷
    mkfs.ext4 /dev/my_vg/my_lv
    
    # 5. LVM逻辑卷可以被挂载和使用
    mkdir /mnt/lvm_data
    mount /dev/my_vg/my_lv /mnt/lvm_data
    

    挂载与卸载 (mount & umount)

    挂载 (mount)

    # 将 /dev/sdb1 分区挂载到 /data 目录
    mkdir /data
    mount /dev/sdb1 /data
    

    卸载 (umount)

    # 通过挂载点卸载
    umount /data
    # 或者通过设备名卸载
    umount /dev/sdb1
    

    永久挂载 (/etc/fstab) 为了系统启动时能自动挂载,需要修改 /etc/fstab 文件 fstab 文件格式: <设备> <挂载点> <文件系统类型> <挂载选项>

    # 首先获取 /dev/sdb1 的UUID
    blkid /dev/sdb1
    # 将获取到的UUID写入 /etc/fstab
    # 假设UUID为 "a1b2c3d4-..."
    # 在 /etc/fstab 文件末尾添加一行:
    UUID="a1b2c3d4-..."  /data  ext4  defaults  0  2
    

    验证 fstab 配置: sudo mount -a

    检查磁盘空间 (df & du)

    查看文件系统空间 (df)

    # 以易读格式显示所有挂载的文件系统的空间使用情况
    df -h
    

    查看文件/目录大小 (du)

    # 只显示 /var/log 目录的总大小
    du -sh /var/log