言成言成啊 | Kit Chen's Blog

CentOS7硬盘扩容以及内存文件系统

发布于2023-01-06 23:19:53,更新于2025-01-19 21:11:23,标签:devops  文章会持续修订,转载请注明来源地址:https://meethigher.top/blog

针对硬盘扩容,我总结了两种情况。

  1. 新增硬盘扩容。
  2. 拆东补西扩容。即不新增硬盘扩容

新增硬盘扩容,可以无感扩容。

拆东补西扩容,需要关闭正在使用中的,还要涉及到数据迁移。

一、Linux硬盘基础

1.1 硬盘命名规则

Linux对硬盘分区命名的规则

  1. IDE硬盘
    • IDE硬盘以 “HD” 开头。第一块硬盘命名为 HDA,第二块为 HDB,依此类推。
    • IDE硬盘一般都是机械硬盘(HDD)
  2. SATA/SCSI硬盘
    • SATA 或 SCSI 硬盘以 “SD” 开头。第一块硬盘命名为 SDA,第二块为 SDB,依此类推。
    • SATA 和 SCSI 都是硬盘接口规范,并不直接限定硬盘是固态硬盘(SSD)还是机械硬盘(HDD)
  3. 虚拟化硬盘
    • 虚拟化的硬盘设备以 “VD” 开头。第一块硬盘命名为 VDA,第二块为 VDB,依此类推。

硬盘的类型(可以通过lsblk查看)

  1. disk
    • 完整的物理硬盘
  2. part
    • 物理硬盘上的分区
    • 分区通常会格式化成文件系统,并挂载到系统中
  3. lvm
    • LVM逻辑卷管理器
    • 逻辑卷提供比part更灵活的存储管理功能,例如动态调整大小、跨多盘建/扩卷等
  4. rom
    • 只读设备
    • 通常是光驱(CD-ROM/DVD-ROM)或其他只读存储设备

1.2 文件系统分类

Linux中文件系统的分类(可通过df -Th查看)

  1. ext2

  2. ext3

  3. ext4

    • Fourth Extended File System

    • 广泛用于桌面、服务器等环境。

  4. xfs

    • X File System

    • 适合大数据存储、视频编辑、数据库等需要高吞吐量的应用。

  5. btrfs

    • B-Tree File System

    • 适用于对数据完整性、压缩、快照有需求的环境。正在逐步取代 ext4 在一些场合的应用

  6. vfat

    • Virtual File Allocation Table

    • 可用于与其他操作系统(如 Windows)交换文件的场景

  7. tmpfs

    • Temporary File System
    • 基于内存的文件系统,可用于任何目录
  8. devtmpfs

    • Device Temporary File System
    • 专用于 /dev,不适用于其他目录。自动由内核创建和管理,通常无需用户干预

二、新增硬盘扩容

2.1 新增硬盘

用VMWare模拟新增一块硬盘。

2.2 创建分区

先简单介绍两个硬盘相关工具

  • lsblk:用于查看硬盘和分区信息,如精确的大小、类型(物理盘、逻辑卷、分区等)、挂载点等。
  • fdisk:用于创建和修改分区的工具。查看的硬盘大小不够准确。创建修改时用

挂载硬盘后,执行命令fdisk -l,可以查看硬盘信息

执行命令lsblk,也可查看硬盘信息,部分参数说明

  • RM:是否为可移动设备(Removable)。0 表示不可移动,1 表示可移动。
  • RO:是否为只读设备(Read-Only)。0 表示可读写,1 表示只读。
  • TYPE:常见值包括 disk(硬盘),part(分区),lvm(逻辑卷),rom(只读内存)等。

由图可知,硬盘/dev/sdb未分配空间,所以需创建分区、格式化、挂载分区。

创建分区

1
2
# m参数表示帮助。w表示保存操作、q表示不保存操作
fdisk /dev/sdb

此时硬盘已经创建了分区,可以再次还行fdisk -l查看,可以看到新增的分区sdb1

2.3 格式化分区类型

如果分区没有进行格式化,则Linux系统无法得知怎么在其上写入数据。

因此,在对存储设备进行分区后还需要进行格式化操作。在Linux系统中用于格式化操作的命令是 mkfs。这个mkfs命令支持多个文件系统,用起来也非常简单——mkfs.fsname 挂载点

查看支持的文件类型

1
ls /usr/sbin/|grep mkfs

查看当前硬盘主要的文件类型

1
df -Th

可知文件类型主要为xfs,那就直接将文件系统/dev/sdb1进行格式化为xfs

1
mkfs.xfs /dev/sdb1

2.4 两种扩容方式

新增硬盘扩容,两种方式

  • 扩容至已有挂载点。要求当前挂载点所属卷是逻辑卷
  • 扩容至新建挂载点。

2.4.1 扩容至已有挂载点

该操作要求目标挂载点所属空间是个逻辑卷。

1.) 查看逻辑卷组

1
2
3
4
# 获取要挂载逻辑卷组VG Name
vgdisplay
# 找到对应卷组的逻辑卷路径LV Path
vgdisplay -v

vgdisplay可以获取当前有哪些逻辑卷组。通过使用-v这个选项,你可以获得卷组(Volume Group)及其包含的物理卷(Physical Volume)和逻辑卷(Logical Volume)的详细信息。

2.) 创建物理卷

1
2
3
4
# 创建物理卷
pvcreate /dev/sdb1
# 查看物理卷
pvdisplay

3.) 扩展卷组CentOS,并扩展逻辑卷

1
2
3
vgextend CentOS /dev/sdb1
lvextend -L +2G /dev/CentOS/root
xfs_growfs /dev/CentOS/root

在某些国产系统上,xfs_growfs 会提示is not a mounted XFS filesystem

这就需要df -h查看/dev/CentOS/root对应的挂载点,然后将/dev/CentOS/root改为挂载点即可。

4.) 运行df -Th,可查看最终挂载效果

2.4.2 扩容至新建挂载点

分为两种方式

  • 分区直接挂载
  • 分区通过逻辑卷间接挂载

分区直接挂载

1.) 创建需要挂载的目录,进行挂载

1
2
3
4
5
mkdir /test
# 将echo后面的字符串,追加到/etc/fstable
echo "/dev/sdb1 /test xfs defaults 0 0" >> /etc/fstab
# 重载未挂载的挂载点
mount -a

2.) 运行df -Th,可查看最终挂载效果

直接将物理分区挂载了,后续新增盘不可再对该目录进行直接扩容。

分区通过逻辑卷间接挂载

1.) 创建物理卷

1
2
3
4
# 创建物理卷
pvcreate /dev/sdb1
# 查看物理卷
pvdisplay

2.) 创建逻辑卷组

1
2
3
4
# 创建逻辑卷组vg0
vgcreate vg0 /dev/sdb1
# 查看逻辑卷组
vgdisplay

3.) 创建逻辑卷

1
2
3
4
# 在卷组 `vg0` 中创建一个新的逻辑卷,例如 `lv_data`,大小是卷组的全部空间。
lvcreate -n lv_data -l 100%FREE vg0
# 查看逻辑卷
lvdisplay

4.) 格式化逻辑卷

1
2
# 将逻辑卷格式化为XFS文件系统。
mkfs.xfs /dev/vg0/lv_data

5.) 挂载逻辑卷

1
2
3
4
5
6
# 创建挂载点
mkdir /test1
# 挂载逻辑卷,挂载后就可执行df -Th查看空间了
mount /dev/vg0/lv_data /test1
# 追加至 /etc/fstab, 每次系统启动后逻辑卷都会自动挂载到指定点, 否则则需要手动挂载
echo "/dev/vg0/lv_data /test1 xfs defaults 0 0" >> /etc/fstab

三、拆东补西扩容

存储数据时,发现硬盘满了,但是有个硬盘/dev/mapper/CentOS-home是空闲的,所以打算将/dev/mapper/CentOS-home扩容到/dev/mapper/CentOS-root

注意这两个盘,都是逻辑卷,可以通过lsblk命令查看其类型。以下步骤仅适用于逻辑卷间拆东补西。``

3.1 删除空闲卷

首先安装工具

1
yum -y install psmisc

终止使用用户。终止所有使用/home文件系统的进程,这里要注意不要在/home目录下执行下面的操作

1
sudo fuser -km /home

卸载

1
sudo umount /home

删除/home所在的逻辑卷lv

1
sudo lvremove /dev/mapper/CentOS-home

3.2 扩大目标卷

扩大逻辑卷

1
sudo lvextend -L +100G /dev/mapper/CentOS-root

扩大文件系统

1
sudo xfs_growfs /dev/mapper/CentOS-root

xfs_growfs是适用于xfs文件系统的。

resize2fs是适用于ext4文件系统的。

确定文件系统可以使用df -Th命令。

3.3 重建空闲卷

重建/home所需要的逻辑卷

1
sudo lvcreate -L 1148M -n /dev/mapper/CentOS-home

Volume group “CentOS” has insufficient free space (287 extents): 512 required.

1extent = 4M

创建文件系统

1
sudo mkfs.xfs  /dev/mapper/CentOS-home

将文件系统挂载到/home

1
sudo mount /dev/mapper/CentOS-home /home

四、内存文件系统

4.1 挂载

挂载内存文件系统,就跟分区直接挂载的操作步骤类似。

1
2
3
4
5
6
mkdir -p /data/ftp
echo "tmpfs /data/ftp tmpfs defaults,size=1G 0 0" >> /etc/fstab
# 重载未挂载的挂载点
mount -a
# 若需要卸载
umount /data/ftp

4.2 效率:硬盘VS内存

准备两个目录

  • /data/disk:硬盘文件系统xfs
  • /data/mem:内存文件系统tmpfs

创建1GB的文件,进行耗时测试。

1
2
3
4
# 测试内存文件系统
time dd if=/dev/zero of=/data/mem/test.txt bs=1M count=1000
# 测试硬盘文件系统,并且配置直接写入硬盘,不经过操作系统内存
time dd if=/dev/zero of=/data/disk/test.txt bs=1M count=1000 oflag=direct

会发现内存文件系统写入文件更快。

五、参考致谢

动态扩容Linux根目录:/dev/mapper/CentOS-home分配部分空间给/dev/mapper/CentOS-root(/dev/mapper/CentOS-root经常会满,可是/dev/mapper/CentOS-home很空) - 金龟子大战猕猴桃 - 博客园

阿里云/dev/vdb硬盘挂载 - 简书

fdisk 命令实现硬盘分区详细教程_Stars.Sky的博客-CSDN博客

Linux LVM详解_大数据老司机的博客-CSDN博客_linux lvm

Linux入门教程:P13->硬盘管理类_爱你哦小猪猪的博客-CSDN博客

Linux挂载新硬盘到根目录/_hcd1129的博客-CSDN博客_linux根目录挂载在哪

linux下数据盘挂载,包含直接挂载和 逻辑卷挂载-CSDN博客

扩容 /data 分区

发布:2023-01-06 23:19:53
修改:2025-01-19 21:11:23
链接:https://meethigher.top/blog/2023/centos-dynamic-expansion/
标签:devops 
付款码 打赏 分享
Shift+Ctrl+1 可控制工具栏