【Centos】服务器硬盘扩容之新加硬盘扩容到现有路径下

服务器硬盘扩容之新加硬盘扩容到现有路径下

前言

服务器在运行了一段时间,发现硬盘不太够用,需要扩容,如果业务对扩容的新硬盘的路径没有特殊的要求,直接使用mount来挂载,用完之后再取消挂载就好了。

但是如果服务器的业务已经在某个路径下写入大量的文件了,导致该路径下的硬盘空间不太够用,这时候就不能使用 mount 来挂载新硬盘了。

一、扩展新硬盘

如果是物理机,直接插入新的硬盘开机。

如果是虚拟机,则需要修改虚拟机的硬盘容量,或者添加新的硬盘,这里直接添加新的硬盘后开机。

二、新硬盘扩容

添加新硬盘后,开机后看下硬盘情况:

bash 复制代码
[root@localhost ~]# lsblk
NAME            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda               8:0    0   500G  0 disk 
├─sda1            8:1    0     1G  0 part /boot
└─sda2            8:2    0   499G  0 part 
  ├─centos-root 253:0    0   550G  0 lvm  /
  ├─centos-swap 253:1    0   7.9G  0 lvm  [SWAP]
  └─centos-home 253:2    0 441.1G  0 lvm  /home
sdb               8:16   0   500G  0 disk 
└─sdb1            8:17   0   500G  0 part 
  └─centos-root 253:0    0   550G  0 lvm  /
sdc               8:32   0   300G  0 disk 
sr0              11:0    1   4.4G  0 rom  
[root@localhost ~]# 

可以看到有一块 300G 的新的硬盘 sdc 类型为 disk

硬盘的顺序是依次递增的,比如我这台服务器,之前有两块硬盘,sda、sdb,所以新加一块盘就自动命名成 sdc 了。

然后看下现有磁盘占用情况:

bash 复制代码
[root@localhost ~]# df -Th
Filesystem              Type      Size  Used Avail Use% Mounted on
devtmpfs                devtmpfs   48G     0   48G   0% /dev
tmpfs                   tmpfs      48G     0   48G   0% /dev/shm
tmpfs                   tmpfs      48G   13M   48G   1% /run
tmpfs                   tmpfs      48G     0   48G   0% /sys/fs/cgroup
/dev/mapper/centos-root xfs       550G  107G  444G  20% /
/dev/sda1               xfs      1014M  195M  820M  20% /boot
/dev/mapper/centos-home xfs       441G  365G   77G  83% /home
overlay                 overlay   441G  365G   77G  83% /home/docker/overlay2/50bc564248af9b92ff6563786859386222b0f58b1c51b61bfd11c5fe89de248a/merged
overlay                 overlay   441G  365G   77G  83% /home/docker/overlay2/106ebdf7de31dc8cced4589ae2cb556fba66738b5ea7607c0e9e616ea3ba2ce7/merged
overlay                 overlay   441G  365G   77G  83% /home/docker/overlay2/e93e294076637bd7ee82f70cfeaf1d82708504668201dba622a4b9b22bc1864f/merge

可以看到 /home 路径下空闲磁盘已经不多了,但是由于业务的复杂性,有些路径又不能随便移动,所以这里要把新加的硬盘容量扩容到 /home 下。

2.1 新增分区

操作步骤如下,操作分 3 步:

bash 复制代码
[root@localhost ~]# fdisk /dev/sdc 
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0x870ff563.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   g   create a new empty GPT partition table
   G   create an IRIX (SGI) partition table
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Command (m for help): n
Partition type:
   p   primary (0 primary, 0 extended, 4 free)
   e   extended
Select (default p): p
Partition number (1-4, default 1): 
First sector (2048-629145599, default 2048): 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-629145599, default 629145599): 
Using default value 629145599
Partition 1 of type Linux and of size 300 GiB is set

Command (m for help): t
Selected partition 1
Hex code (type L to list all codes): 8e
Changed type of partition 'Linux' to 'Linux LVM'

Command (m for help): w
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# 

首先是知道新硬盘的盘符为 sdc,这是在上一步已经确认过的。接着直接操作新建分区

  • Command (m for help): 输入 n 来触发新建分区:add a new partition,输入 m 来看帮助信息;
  • Select (default p) :提示主分区还是扩展分区,这里默认主分区,可以输入p 也可以什么都不输入,直接回车;
  • Partition number (1-4, default 1): 分区号,默认1 ,这里直接回车;
  • First sector (2048-629145599, default 2048): 起始扇区直接默认即可;
  • Last sector, +sectors or +size{K,M,G}: 起始扇区直接默认即可;
    Partition 1 of type Linux and of size 300 GiB is set,可以看到 新建了一个 300G 的分区;
  • t change a partition's system id:修改分区ID,如果有需要的话可以操作,我这里默认1,也没有改。
  • Hex code (type L to list all codes): 修改分区格式,8e 是将分区类型 Linux 改成 Linux LVM,以至于后续扩容可以使用;
  • Command (m for help): w 这是将修改写入分区表;

接着执行 partprobe 让内核同步分区信息。

此时可以看下磁盘情况:

bash 复制代码
[root@localhost ~]# lsblk -l
NAME        MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
sda           8:0    0   500G  0 disk 
sda1          8:1    0     1G  0 part /boot
sda2          8:2    0   499G  0 part 
centos-root 253:0    0   550G  0 lvm  /
centos-swap 253:1    0   7.9G  0 lvm  [SWAP]
centos-home 253:2    0 441.1G  0 lvm  /home
sdb           8:16   0   500G  0 disk 
sdb1          8:17   0   500G  0 part 
centos-root 253:0    0   550G  0 lvm  /
sdc           8:32   0   300G  0 disk 
sdc1          8:33   0   300G  0 part 
sr0          11:0    1   4.4G  0 rom  
[root@localhost ~]# 

可以看到新增了一个 sdc1 的分区,容量大小刚好是新硬盘容量 300G

2.2 格式化新建分区

在指定的磁盘分区 /dev/sdc1 上创建一个 ext4 格式的文件系统(即格式化分区为 ext4 格式)。

bash 复制代码
[root@localhost ~]# mkfs.ext4 /dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
19660800 inodes, 78642944 blocks
3932147 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=2227175424
2400 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks: 
        32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208, 
        4096000, 7962624, 11239424, 20480000, 23887872, 71663616

Allocating group tables: done                            
Writing inode tables: done                            
Creating journal (32768 blocks): done
Writing superblocks and filesystem accounting information: done     

[root@localhost ~]# 

命令各部分含义:

  • mkfs:是 "make filesystem" 的缩写,用于在磁盘分区上创建文件系统(格式化分区)。
  • .ext4:指定创建的文件系统类型为 ext4(Linux 系统中最常用的高性能日志文件系统,支持大分区、大文件,稳定性和兼容性较好)。
  • /dev/sdc1:表示要格式化的磁盘分区,其中:
    • sdc 是磁盘设备名(通常表示第三块 SCSI/SATA 硬盘,sda 是第一块,sdb 是第二块)。
    • 1 表示该磁盘的第一个分区。

执行结果解析:输出信息详细描述了文件系统的创建过程和参数:

  1. 基础信息
    mke2fs 1.42.9:使用 mke2fs 工具(mkfs.ext4 的底层实现),版本为 1.42.9。
    Filesystem label=:未设置文件系统标签(可通过 -L 参数指定,如 mkfs.ext4 -L mydisk /dev/sdc1)。
    OS type: Linux:文件系统用于 Linux 系统。
  2. 块和碎片大小
    Block size=4096:数据块大小为 4096 字节(4KB),是 ext4 的默认值,影响文件存储效率(小文件多可设小,大文件多可设大)。
    Fragment size=4096:碎片大小(针对小文件的存储单位)与块大小一致。
  3. 存储容量
    19660800 inodes:创建了约 1966 万个 inode(用于存储文件元信息,如权限、大小、位置等)。
    78642944 blocks:总数据块数量约 7864 万个,按 4KB / 块计算,总容量约 300GB(78642944 × 4KB ≈ 300GB)。
    3932147 blocks (5.00%) reserved:保留 5% 的块给超级用户(root),确保系统在磁盘满时仍能运行关键程序。
  4. 超级块(Superblock)
    超级块是文件系统的核心元数据(记录分区大小、inode 数量等),此处列出了超级块的备份位置(如 32768、98304 等块地址),用于文件系统损坏时恢复。
  5. 创建过程:
    依次完成 "分配组表""写入 inode 表""创建日志(journal)""写入超级块和账户信息",最终提示 done 表示文件系统创建成功。

2.3 合并分区

使用 lvm 先新建物理卷,注意要处理的 硬盘分区为 sdc1

bash 复制代码
[root@localhost ~]# lvm
lvm> pvcreate /dev/sdc1
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: y
  Wiping ext4 signature on /dev/sdc1.
  Physical volume "/dev/sdc1" successfully created.
lvm> vgextend centos /dev/sdc1
  Volume group "centos" successfully extended
lvm> 
lvm> vgdisplay -v
  --- Volume group ---
  VG Name               centos
  System ID             
  Format                lvm2
  。。。。
    --- Physical volumes ---
  PV Name               /dev/sda2     
  PV UUID               JcpGKD-9SyA-UGcJ-9VaP-UAqz-Hv85-Xhw3eH
  PV Status             allocatable
  Total PE / Free PE    127743 / 0
   
  PV Name               /dev/sdb1     
  PV UUID               5GUm6J-dPQf-kk1E-Niy0-A7YO-7jyv-bMLykF
  PV Status             allocatable
  Total PE / Free PE    127999 / 0
   
  PV Name               /dev/sdc1     
  PV UUID               xEHpIT-c4HQ-DQXO-6LjW-7P5C-999A-sC8wCP
  PV Status             allocatable
  Total PE / Free PE    76799 / 76799

注意最后的这个物理卷:/dev/sdc1 空闲容量为 76799 后面扩容要用到这个数;

接下来将系统盘/dev/mapper/centos-home与 sdc1 的76799 空余容量合并.

bash 复制代码
lvm> lvextend -l+76799 /dev/mapper/centos-home
  Size of logical volume centos/home changed from <441.12 GiB (112926 extents) to 741.11 GiB (189725 extents).
  Logical volume centos/home successfully resized.
lvm> 
lvm> quit
  Exiting.
[root@localhost ~]# 

根据自己的需要将新的物理机扩容到哪个系统分区下,我这里是 /dev/mapper/centos-home,可以看到扩容成功了。

最后将文件系统进行扩容,让系统识别,输入命令:xfs_growfs /dev/mapper/centos-home

bash 复制代码
[root@localhost ~]# xfs_growfs /dev/mapper/centos-home  
meta-data=/dev/mapper/centos-home isize=512    agcount=4, agsize=28909056 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=0 spinodes=0
data     =                       bsize=4096   blocks=115636224, imaxpct=25
         =                       sunit=0      swidth=0 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal               bsize=4096   blocks=56463, version=2
         =                       sectsz=512   sunit=0 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
data blocks changed from 115636224 to 194278400
[root@localhost ~]# 

接着再次查看系统磁盘占用情况:

bash 复制代码
[root@localhost ~]# df -h
Filesystem               Size  Used Avail Use% Mounted on
devtmpfs                  48G     0   48G   0% /dev
tmpfs                     48G     0   48G   0% /dev/shm
tmpfs                     48G   21M   48G   1% /run
tmpfs                     48G     0   48G   0% /sys/fs/cgroup
/dev/mapper/centos-root  550G  107G  444G  20% /
/dev/sda1               1014M  195M  820M  20% /boot
/dev/mapper/centos-home  741G  365G  377G  50% /home

可以看到 /home 目录已扩容成功,新增了 300G

相关推荐
边疆.7 小时前
【Linux】版本控制器Git和调试器—gdb/cgdb的使用
linux·服务器·git·gdb调试·cgdb
陌路208 小时前
Linux22 进程与线程以及内核级线程
linux·开发语言
明天…ling8 小时前
Linux+Apache+MySQL+PHP 架构下搭建 Discuz 社区论坛
linux·服务器·apache
Ghost Face...8 小时前
GRUB配置文件解析与启动流程详解
linux·运维·服务器
前端世界13 小时前
从零搭建多子网 DHCP 服务:CentOS 双网卡多作用域实战与原理解析
linux·运维·centos
路由侠内网穿透.15 小时前
本地部署轻量级持续集成工具 Drone CI 并实现外部访问
运维·服务器·ci/cd·远程工作
节点小宝15 小时前
节点小宝与中兴路由合作升级:AX5400系列新增远程控网功能
服务器·网络·安全·智能路由器·远程工作
tianyuanwo15 小时前
K8s Dashboard运维技巧全面经验总结
linux·运维·kubernetes
无敌的牛16 小时前
Linux操作系统
linux·运维·服务器