Linux 磁盘扩容大全(包括普通磁盘和 LVM 扩容)

在工作中,磁盘扩容问题应该是所有运维工程师都遇到过的问题,不同的磁盘分配方式会有不同的扩容方式。以下介绍几种生产环境常用的扩容方式。

一、在原有磁盘扩容

在原有磁盘下扩容也分两种情况,一种情况是扩容的磁盘是一个分区,另一种情况是扩容的磁盘是一整块盘。

【温馨提示】有些虚拟化平台或云平台不支持在原有磁盘增加容量,我工作遇到的几个云平台都是支持动态扩容的,视实际情况而定

这两种情况下的扩容方法是不同的,下面针对这两种情况分别讲解扩容方法。

切记:新手操作前做快照,避免扩容导致数据丢失!!老手请自便!

情况一:扩容的磁盘是一个分区

现有环境:要对/dev/vdb1设备扩容

目前分区有10G,但整个磁盘有20G,将剩余的扩容到/dev/vdb1分区中:

复制
[root@localhost ~]# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS sr0 11:0 1 458K 0 rom vda 253:0 0 100G 0 disk ├─vda1 253:1 0 99.5G 0 part / └─vda2 253:2 0 500M 0 part /boot vdb 253:96 0 20G 0 disk └─vdb1 253:97 0 10G 0 part1.2.3.4.5.6.7.8.

(1) 安装工具

使用growpart工具可以完成Linux系统盘分区扩容及文件系统扩展,

grawpart工具需要单独安装:

复制
yum install cloud-utils-growpart -y1.

(2) 扩容分区

【温馨提示】单盘有多个连续分区,仅能扩容最后一个分区。以下操作为扩容/dev/vdb磁盘的第一个分区

复制
[root@localhost ~]# growpart /dev/vdb 1 CHANGED: partitinotallow=1 start=2048 old: size=20969472 end=20971520 new: size=41940959 end=419430071.2.

查看分区格式:

复制
lsblk –f1.

(3) 扩容文件系统

可以看到/dev/vdb1分区为xfs,需要使用xfs_growfs命令进行扩展:

复制
[root@localhost ~]# xfs_growfs /dev/vdb11.

如果分区格式为ext4,用以下命令扩容::

复制
resize2fs /dev/vda31.

查看扩容结果:已从10G扩容到20G:

复制
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 1.5G 8.6M 1.5G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/vda1 98G 3.1G 90G 4% / tmpfs 3.7G 0 3.7G 0% /tmp /dev/vda2 495M 234M 261M 48% /boot /dev/vdg1 20G 176M 20G 1% /data1.2.3.4.5.6.7.8.9.10.

可能遇到的报错和解决办法:

复制
unexpected output in sfdisk --version [sfdisk,来自 util-linux 2.23.2] [root@mypc ~]# LANG=en_US.UTF-81.2.3.

LC_ALL=en_US.UTF-8是环境变量,为了兼容中文操作系统的字符编码

情况二:扩容的磁盘是一整块磁盘

这种情况就非常简单,直接扩容文件系统即可。

(1) 模拟环境准备

复制
# 将/dev/vdc格式化为xfs文件系统 [root@localhost ~]# mkfs.xfs /dev/vdc # 挂载 [root@localhost ~]# mount /dev/vdc /data2 [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 1.5G 8.6M 1.5G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/vda1 98G 3.1G 90G 4% / tmpfs 3.7G 0 3.7G 0% /tmp /dev/vda2 495M 234M 261M 48% /boot /dev/vdb1 20G 176M 20G 1% /data /dev/vdc 10G 104M 9.9G 2% /data2 # 目前/dev/vdc是10G,然后云平台上对这块磁盘容量增加20G。1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.

(2) 首先查看分区格式

复制
lsblk –f1.

(3) 直接扩容文件系统容量

如果分区格式为xfs,用xfs_growfs扩容:

复制
[root@localhost ~]# xfs_growfs /dev/vdc # 也可以直接扩容挂载点 [root@localhost ~]# xfs_growfs /data21.2.3.4.

如果分区格式为ext4,用resize2fs扩容:

复制
resize2fs /dev/vdc1.

(4) 查看结果:可以看到容量已经增加到20G

复制
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 1.5G 8.6M 1.5G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/vda1 98G 3.1G 90G 4% / tmpfs 3.7G 0 3.7G 0% /tmp /dev/vda2 495M 234M 261M 48% /boot /dev/vdb1 20G 176M 20G 1% /data /dev/vdc 20G 176M 20G 1% /data21.2.3.4.5.6.7.8.9.10.11.

二、新增磁盘扩容

生产环境可能会遇到以下情况:

磁盘前期分区时,使用了MBR模式,导致了磁盘最大只能是2T,但数据还在继续写入。这种情况就需要新增一个磁盘,重新格式化一个分区,并将应用读取数据目录指向新增加的磁盘。

(1) 新增磁盘并格式化 直接格式化,这样方便后续扩容

复制
mkfs.xfs /dev/vdc1.

(2) 挂载

挂载到/data3下:

复制
[root@localhost ~]# mkdir /data3 [root@localhost ~]# mount /dev/vdd /data31.2.

(3) 配置开机自动挂载

复制
cat >> /etc/fstab <<EOF /dev/vdd /data3 xfs default 0 01.2.
复制
EOF1.

如果后续磁盘满了,可以使用方法一的第二种情况来快速扩容。

三、逻辑卷LVM扩容

LVM逻辑卷扩容方式只适用于操作系统使用了LVM来管理磁盘的情况。LVM也区分在原有磁盘进行增加容量来扩容和新增加磁盘来进行扩容,下面分别来讲解

情况一:原有磁盘增加容量,创建新分区,然后扩容到原有分区

(1) 扩容前环境:准备扩容/dev/mapper/vg01/lv01设备

复制
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 1.5G 8.6M 1.5G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/vda1 98G 3.1G 90G 4% / tmpfs 3.7G 0 3.7G 0% /tmp /dev/vda2 495M 234M 261M 48% /boot /dev/mapper/vg01-lv01 5.0G 68M 5.0G 2% /data1.2.3.4.5.6.7.8.9.10.

(2) 基于原磁盘再进行分区

复制
[root@localhost ~]# fdisk /dev/vdb Welcome to fdisk (util-linux 2.37.2). Changes will remain in memory only, until you decide to write them. Be careful before using the write command. Command (m forhelp): p # 查看分区情况 Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x9ffcf410 Device Boot Start End Sectors Size Id Type /dev/vdb1 2048 6293503 6291456 3G 83 Linux /dev/vdb2 6293504 10487807 4194304 2G 83 Linux Command (m forhelp): n # 新建分区 Partition type p primary (2 primary, 0 extended, 2 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (3,4, default 3): First sector (10487808-41943039, default 10487808): Last sector, +/-sectors or +/-size{K,M,G,T,P} (10487808-41943039, default 41943039): Created a new partition 3 of typeLinux and of size 15 GiB. Command (m forhelp): p # 再次打印分区信息 Disk /dev/vdb: 20 GiB, 21474836480 bytes, 41943040 sectors Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disklabel type: dos Disk identifier: 0x9ffcf410 Device Boot Start End Sectors Size Id Type /dev/vdb1 2048 6293503 6291456 3G 83 Linux /dev/vdb2 6293504 10487807 4194304 2G 83 Linux /dev/vdb3 10487808 41943039 31455232 15G 83 Linux Command (m forhelp): w # 保存配置 The partition table has been altered. Syncing disks. # 刷新分区表 [root@localhost ~]# partprobe /dev/vdb1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.25.26.27.28.29.30.31.32.33.34.35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.

(3) 扩容卷组VG

复制
# 创建物理卷PV [root@localhost ~]# pvcreate /dev/vdb3 Physical volume "/dev/vdb3" successfully created. # 扩容卷组VG [root@localhost ~]# vgextend vg01 /dev/vdb3 Volume group "vg01" successfully extended # 查看卷组信息 [root@localhost ~]# vgs VG #PV #LV #SN Attr VSize VFree vg01 3 1 0 wz--n- <19.99g <15.00g1.2.3.4.5.6.7.8.9.10.11.12.

(4) 扩容逻辑卷LV

复制
[root@localhost ~]# lvresize -l +100%FREE /dev/mapper/vg01-lv01 Size of logical volume vg01/lv01 changed from 4.99 GiB (1278 extents) to <19.99 GiB (5117 extents). Logical volume vg01/lv01 successfully resized.1.2.3.

(5) 扩容文件系统

复制
[root@localhost ~]# xfs_growfs /dev/mapper/vg01-lv01 meta-data=/dev/mapper/vg01-lv01 isize=512 agcount=4, agsize=327168 blks = sectsz=512 attr=2, projid32bit=1 = crc=1 finobt=1, sparse=1, rmapbt=0 = reflink=1 bigtime=0 inobtcount=0 data = bsize=4096 blocks=1308672, imaxpct=25 = sunit=0 swidth=0 blks naming =version 2 bsize=4096 ascii-ci=0, ftype=1 log =internal log bsize=4096 blocks=2560, versinotallow=2 = sectsz=512 sunit=0 blks, lazy-count=1 realtime =none extsz=4096 blocks=0, rtextents=0 data blocks changed from 1308672 to 5239808 # 查看结果 [root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 4.0M 0 4.0M 0% /dev tmpfs 3.7G 0 3.7G 0% /dev/shm tmpfs 1.5G 8.6M 1.5G 1% /run tmpfs 4.0M 0 4.0M 0% /sys/fs/cgroup /dev/vda1 98G 3.1G 90G 4% / tmpfs 3.7G 0 3.7G 0% /tmp /dev/vda2 495M 234M 261M 48% /boot /dev/mapper/vg01-lv01 20G 177M 20G 1% /data1.2.3.4.5.6.7.8.9.10.11.12.13.14.15.16.17.18.19.20.21.22.23.24.

注意:如果文件系统格式为ext,使用以下语句扩容

复制
resize2fs /dev/mapper/vg01-lv011.
情况二:新增磁盘扩容到原有分区

直接创建物理卷,其余扩容vg和lv步骤相同。

复制
pvcreate /dev/vdb1.

阅读剩余
THE END