LVM添加挂载磁盘的全过程——通过实践了解 Linux 文件系统

LVM添加挂载磁盘的全过程——通过实践了解 Linux 文件系统

引言

因为服务器的空间不太够用。我需要在服务器上需要扩展存储空间,将硬盘挂载到文件系统上使用。

首先使用下面这条命令查看服务器上的存储设备情况

lsblk -d -o NAME,SIZE,TYPE,MODEL

结果如下:可以看见这台服务器上有两块磁盘,sdasdb

NAME  SIZE TYPE MODEL
sda  893.8G disk MR9361-8i    
sdb  49.1T disk MR9361-8i 

我首先观察df -h命令输出:总共发现只有800多G,因此可以判断出是sdb没有挂载到文件系统上。

Filesystem                 Size  Used Avail Use% Mounted on
devtmpfs                   252G     0  252G   0% /dev
tmpfs                      252G     0  252G   0% /dev/shm
tmpfs                      252G   22M  252G   1% /run
tmpfs                      252G     0  252G   0% /sys/fs/cgroup
/dev/mapper/centos-root     50G   11G   40G  21% /
/dev/sda2                 1014M  259M  756M  26% /boot
/dev/sda1                  200M   12M  189M   6% /boot/efi
/dev/mapper/centos-home    839G  1.6G  837G   1% /home
tmpfs                       51G   36K   51G   1% /run/user/1000
tmpfs                       51G     0   51G   0% /run/user/1001

首先来详细讲解上面命令输出的filsystemmount on列都是什么意思。

1. Filesystem列

先区分两类文件系统:

  • 磁盘文件系统:磁盘文件系统为数据在磁盘上的存储提供了结构和规则,它定义了如何在磁盘分区内分配和管理数据块,如何命名和访问文件,如何保护数据(例如通过权限控制、冗余存储等)。常见的磁盘文件系统有:
    • Ext4: 成熟、稳定、功能全面的日志文件系统,曾是许多发行版的默认选择。/boot 分区 (/dev/sda5) 可能是 ext4。
    • XFS: 高性能日志文件系统,特别擅长大文件和并行 I/O,非常适合存储大量数据。
    • 其他如 Btrfs, ZFS 等,具有更高级特性。
  • 虚拟文件系统(VFS):操作系统内核的一部分,用于提供不同文件系统的统一接口。VFS使得操作系统可以透明地访问各种不同类型的文件系统(无论是磁盘文件系统、网络文件系统、内存文件系统等),为用户和应用程序提供一致的文件访问接口。

这一列显示的是各种文件系统的名称。例如:

  • /dev/mapper/centos-root: 这是一个LVM(逻辑卷管理器)创建的文件系统。见下文什么是LVM?
  • /dev/sda1, /dev/sda2: 这些是物理硬盘的分区
  • devtmpfs: 内核用于管理 /dev 目录下的设备文件,是动态的。
  • tmpfs: 基于内存的文件系统,速度快但数据易失(重启丢失)。用于 /dev/shm (共享内存)、/run (运行时数据)、/sys/fs/cgroup (cgroups 接口)、/run/user/* (用户运行时数据)。它们的大小通常与内存相关,实际占用按需分配。

2. Mounted on

这是文件系统挂载点,表示文件系统在系统中被挂载到的路径。例如:

  • /dev/mapper/centos-root挂载在根目录 / 上,表示它是系统的主要文件系统。
  • /dev/sda2挂载在 /boot 目录,用于存放启动文件。
  • /dev/sda1挂载在 /boot/efi 目录,用于存放EFI启动所需的文件。
  • /dev/mapper/centos-home挂载在 /home 目录,表示用户的个人文件和数据存放在这里。

挂载的目录结构是将不同存储介质和文件系统整合到一个统一的文件系统树中的方式。通过挂载,Linux 操作系统可以透明地管理不同设备和文件系统,用户和应用程序通过统一的目录路径访问不同的存储资源。

Linus的目录结构形式如下:

根目录 (/):Linux 系统中的起始点,所有其他文件和目录都从根目录开始。

/home:存放所有用户的个人文件和配置。

/etc:系统的配置文件。

/dev:包含设备文件,表示硬件和虚拟设备。

/proc:虚拟文件系统,存放系统的运行时信息

什么是LVM?

  • LVM通过在物理存储(硬盘、分区)和文件系统之间引入一个抽象层,提供了更灵活的磁盘管理能力。

  • PV -> VG -> LV 的层级结构是理解LVM的关键。

  • 主要优势:动态调整大小、跨物理磁盘创建卷、快照等

LVM 是 Linux 下对磁盘分区进行管理的一种机制。它不是一个文件系统,而是一个在物理存储设备和文件系统之间建立的逻辑层。其核心组件包括:

  • 物理卷 (Physical Volume, PV): 指底层的物理存储单元,可以是整个硬盘(如 /dev/sdb)、硬盘分区(如 /dev/sdb1)或其他块设备。通过 pvcreate 命令将这些设备初始化为 PV,使其能被 LVM 管理。在本次实践中,/dev/sdb 被创建为 PV。
  • 卷组 (Volume Group, VG): 一个或多个 PV 组合在一起形成一个存储池,称为卷组。卷组的总容量约等于其包含的所有 PV 的容量之和。VG 隐藏了底层 PV 的细节,为创建 LV 提供了一个统一的存储空间。通过 vgcreate 创建新的 VG,或像本次实践中使用 vgextend centos /dev/sdb 将 PV 加入现有 VG centos
  • 逻辑卷 (Logical Volume, LV): 从卷组中划分出来的逻辑存储单元。LV 就像传统意义上的分区,可以在其上创建文件系统。但与物理分区不同,LV 的大小可以动态调整(只要其所在的 VG 有足够空间),甚至可以跨越多个 PV。本次实践中,lvcreate -L 10T -n models centos 创建了一个名为 models 的 LV。

比如这台服务器的结构,

[root@localhost ~]# pvs
  PV         VG     Fmt  Attr PSize   PFree 
  /dev/sda3  centos lvm2 a--  892.55g     0 
[root@localhost ~]# vgs
  VG     #PV #LV #SN Attr   VSize  VFree 
  centos   1   3   0 wz--n- 892.55g 834.11g
[root@localhost ~]# lvs
  LV     VG     Attr       LSize   Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  home   centos -wi-ao---- 838.55g                                                    
  root   centos -wi-ao----  50.00g                                                    
  swap   centos -wi-ao----   4.00g    

可以看出:

  • /dev/sda3 (磁盘分区)被初始化为物理卷(PV)
  • 存在名为"centos"的卷组(VG),这个卷组使用1个PV,有3个LV
  • 在卷组的三个逻辑卷(LV)为:
    • root (50GB)
    • home (839GB)
    • swap (4GB)

由此我们可知整个文件系统的逻辑

  1. 物理磁盘(分区)通过LVM逻辑卷。

  2. LVM到文件系统:

    • root逻辑卷被格式化为xfs文件系统,挂载到/
    • home逻辑卷被格式化为xfs文件系统,挂载到/home
    • swap逻辑卷用作交换分区
  3. 文件系统使用:

    • /:存放系统文件和程序
    • /home:存放用户数据
    • swap:用作虚拟内存

LVM挂载磁盘的全过程

现在,我来详细回顾一下使用 LVM 添加并挂载新磁盘 /dev/sdb/models_shared 的完整流程,以此更好的理解其中的内容:

  1. 识别物理磁盘:

    • 背景: 首先需要确定要添加的磁盘设备名。在我的案例中是 /dev/sdb。可以使用 lsblkfdisk -l 查看系统中的块设备。
    • 命令: (检查命令) lsblk, fdisk -l
  2. 准备物理磁盘 (可选但建议):

    • 背景: 可以将整个磁盘用作 LVM,也可以先分区再使用分区。我这里直接使用了整个磁盘 /dev/sdb。在某些情况下(如RAID),可能需要配置(如使用storcli64 设置 JBOD)。
    • 命令: (分区) fdisk /dev/sdbparted /dev/sdb;
  3. 创建物理卷 (PV):

    • 背景: 将准备好的物理磁盘或分区标记为 LVM 可以使用的物理卷。这是 LVM 管理的最小物理单位。
    • 命令: pvcreate /dev/sdb
    • 验证: pvspvdisplay /dev/sdb
  4. 扩展卷组 (VG) 或 创建卷组:

    • 背景: 卷组是 LVM 的存储池,由一个或多个 PV 组成。下面将新的 PV 添加到现有的 centos 卷组中。如果系统没有合适的 VG,可以用 vgcreate 创建一个新的。
    • 命令: (扩展现有 VG) vgextend centos /dev/sdb;(创建新 VG) vgcreate /dev/sdb
    • 验证: vgsvgdisplay centos
  5. 创建逻辑卷 (LV):

    • 背景: 从卷组的可用空间中划分出逻辑存储单元,这才是最终用户使用的“分区”。在这里可以指定大小或使用卷组的全部剩余空间。
    • 命令: lvcreate -L 10T -n models centos (创建名为 models,大小为 10TB 的 LV,来自 centos VG)。-l 100%FREE 可以使用全部剩余空间。
    • 验证: lvslvdisplay /dev/centos/models (注意 LV 的路径通常是 /dev///dev/mapper/-)
  6. 创建文件系统:

    • 背景: 新创建的 LV 是一块原始的存储空间,需要格式化,在其上建立文件系统结构才能存储文件。脚本中选择了 XFS。
    • 命令: mkfs.xfs /dev/centos/models (或 mkfs.ext4 /dev/centos/models 等)
    • 注意: 格式化会清除该 LV 上所有数据!
  7. 创建挂载点:

    • 背景: 需要一个空目录作为访问这个新文件系统的入口。
    • 命令: mkdir /models_shared (这里创建了 /models_shared)
  8. 挂载文件系统:

    • 背景: 将格式化好的 LV 上的文件系统连接到挂载点目录。
    • 命令: mount /dev/centos/models /models_shared
    • 验证: df -h (此时应该能看到新挂载的文件系统)
  9. 配置自动挂载:

    • 背景: 为了让系统重启后自动挂载该文件系统,需要将挂载信息添加到 /etc/fstab 文件。
    • 命令: echo "/dev/centos/models /models_shared xfs defaults,noatime,nodiratime 0 0" >> /etc/fstab (脚本中的操作)
    • 解释:
      • /dev/centos/models: 设备(也可以用 UUID,更稳健 blkid 查看)
      • /models_shared: 挂载点
      • xfs: 文件系统类型
      • defaults,noatime,nodiratime: 挂载选项 (defaults 是一组常用选项, noatime/nodiratime 用于性能优化,不更新访问时间戳)
      • 0: dump 选项 (基本不用)
      • 0: fsck 检查顺序 (0 表示不检查,根分区通常是 1,其他是 2)
    • 验证: (重启后) df -h
  10. 设置权限 (可选但常见):

    • 背景: 根据需要调整挂载点目录的所有者和权限。
    • 命令: chown deepseek:deepseek /models_shared, chmod 775 /models_shared

df -h 输出与 LVM 实践的关联

现在再看 df -h 输出,我们可以更深刻地理解:

Filesystem                 Size  Used Avail Use% Mounted on
/dev/mapper/centos-root     50G   11G   40G  21% /
/dev/sda2                 1014M  259M  756M  26% /boot
/dev/sda1                  200M   12M  189M   6% /boot/efi
/dev/mapper/centos-home    839G  1.6G  837G   1% /home
  • /dev/mapper/centos-root/dev/mapper/centos-home 正是遵循上述 LVM 步骤 (1-5) 创建出来的逻辑卷,然后经过 步骤 6 (格式化),最终在系统启动时通过 /etc/fstab (类似 步骤 9) 被自动 挂载 (步骤 8) 到了 //home

  • /dev/sda1 和 /dev/sda2` 则跳过了 LVM 的步骤,直接对 物理分区 (步骤 2) 进行了 格式化 (步骤 6)挂载 (步骤 8, 9)

  • 我们挂载磁盘的全过程的结果就是在 df -h 的输出中,最终增加这样的一行:

    /dev/mapper/centos-models  10T     /models_shared
    

    (具体 used/avail/use% 取决于实际使用情况)。

结论

通过将 /dev/sdb 加入 LVM 并挂载到 /models_shared 的实践,不仅扩展了服务器的存储,更串联起了 Linux 文件系统的核心概念:从物理设备到 LVM 的抽象(PV, VG, LV),到在其上建立文件系统(如 XFS),再到通过挂载点将其融入统一的目录树。df -h 命令正是这个最终结果的可视化呈现,让我们清晰地看到各个存储单元如何被组织和使用。理解这个过程,是进行高效 Linux 系统管理的基础。

你可能感兴趣的:(#,服务器管理,linux,运维,服务器)