【Centos】服务器硬盘扩容之新加硬盘扩容到现有路径下
服务器硬盘扩容之新加硬盘扩容到现有路径下
- 前言
- 一、扩展新硬盘
- 二、新硬盘扩容
- 2.1 新增分区
- 2.2 格式化新建分区
- 2.3 合并分区
前言
服务器在运行了一段时间,发现硬盘不太够用,需要扩容,如果业务对扩容的新硬盘的路径没有特殊的要求,直接使用mount来挂载,用完之后再取消挂载就好了。
但是如果服务器的业务已经在某个路径下写入大量的文件了,导致该路径下的硬盘空间不太够用,这时候就不能使用 mount 来挂载新硬盘了。
一、扩展新硬盘
如果是物理机,直接插入新的硬盘开机。
如果是虚拟机,则需要修改虚拟机的硬盘容量,或者添加新的硬盘,这里直接添加新的硬盘后开机。
二、新硬盘扩容
添加新硬盘后,开机后看下硬盘情况:
[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 了。
然后看下现有磁盘占用情况:
[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 步:
[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 actiona toggle a bootable flagb edit bsd disklabelc toggle the dos compatibility flagd delete a partitiong create a new empty GPT partition tableG create an IRIX (SGI) partition tablel list known partition typesm print this menun add a new partitiono create a new empty DOS partition tablep print the partition tableq quit without saving changess create a new empty Sun disklabelt change a partition's system idu change display/entry unitsv verify the partition tablew write table to disk and exitx 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 setCommand (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 让内核同步分区信息。
此时可以看下磁盘情况:
[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 格式)。
[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, 71663616Allocating 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表示该磁盘的第一个分区。
执行结果解析:输出信息详细描述了文件系统的创建过程和参数:
- 基础信息:
mke2fs 1.42.9:使用 mke2fs 工具(mkfs.ext4 的底层实现),版本为 1.42.9。
Filesystem label=:未设置文件系统标签(可通过 -L 参数指定,如 mkfs.ext4 -L mydisk /dev/sdc1)。
OS type: Linux:文件系统用于 Linux 系统。 - 块和碎片大小:
Block size=4096:数据块大小为 4096 字节(4KB),是 ext4 的默认值,影响文件存储效率(小文件多可设小,大文件多可设大)。
Fragment size=4096:碎片大小(针对小文件的存储单位)与块大小一致。 - 存储容量:
19660800 inodes:创建了约 1966 万个 inode(用于存储文件元信息,如权限、大小、位置等)。
78642944 blocks:总数据块数量约 7864 万个,按 4KB / 块计算,总容量约 300GB(78642944 × 4KB ≈ 300GB)。
3932147 blocks (5.00%) reserved:保留 5% 的块给超级用户(root),确保系统在磁盘满时仍能运行关键程序。 - 超级块(Superblock):
超级块是文件系统的核心元数据(记录分区大小、inode 数量等),此处列出了超级块的备份位置(如 32768、98304 等块地址),用于文件系统损坏时恢复。 - 创建过程:
依次完成 “分配组表”“写入 inode 表”“创建日志(journal)”“写入超级块和账户信息”,最终提示 done 表示文件系统创建成功。
2.3 合并分区
使用 lvm 先新建物理卷,注意要处理的 硬盘分区为 sdc1
[root@localhost ~]# lvm
lvm> pvcreate /dev/sdc1
WARNING: ext4 signature detected on /dev/sdc1 at offset 1080. Wipe it? [y/n]: yWiping ext4 signature on /dev/sdc1.Physical volume "/dev/sdc1" successfully created.
lvm> vgextend centos /dev/sdc1Volume group "centos" successfully extended
lvm>
lvm> vgdisplay -v--- Volume group ---VG Name centosSystem ID Format lvm2。。。。--- Physical volumes ---PV Name /dev/sda2 PV UUID JcpGKD-9SyA-UGcJ-9VaP-UAqz-Hv85-Xhw3eHPV Status allocatableTotal PE / Free PE 127743 / 0PV Name /dev/sdb1 PV UUID 5GUm6J-dPQf-kk1E-Niy0-A7YO-7jyv-bMLykFPV Status allocatableTotal PE / Free PE 127999 / 0PV Name /dev/sdc1 PV UUID xEHpIT-c4HQ-DQXO-6LjW-7P5C-999A-sC8wCPPV Status allocatableTotal PE / Free PE 76799 / 76799
注意最后的这个物理卷:/dev/sdc1 空闲容量为 76799 后面扩容要用到这个数;
接下来将系统盘/dev/mapper/centos-home与 sdc1 的76799 空余容量合并.
lvm> lvextend -l+76799 /dev/mapper/centos-homeSize 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> quitExiting.
[root@localhost ~]#
根据自己的需要将新的物理机扩容到哪个系统分区下,我这里是 /dev/mapper/centos-home,可以看到扩容成功了。
最后将文件系统进行扩容,让系统识别,输入命令:xfs_growfs /dev/mapper/centos-home
[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 ~]#
接着再次查看系统磁盘占用情况:
[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;
