linux扩容情况分析

硬盘扩容最好先备份数据。服务商通常会提供在线快照功能,也可以先创建快照作备份。一个硬盘要能为系统使用:先给硬盘分区,分区之后再格式化成文件系统,
因为系统和硬盘的所有互动都建立在文件系统之上。所以扩容逻辑也就是理当为:先给分区扩容,在扩展文件系统,如此而已。

一、挂载新加硬盘

扩容的第一种情况就是新加硬盘扩容。

  1. 硬盘分区
    找到新加硬盘,假设硬盘为 /dev/vdb,依次执行一下命令

    # fdisk /dev/vdb
    # p #创建分区
    # 1 #分区数量
    # 两次回车选用默认值
    # w #保存退出
  2. 格式化
    分区完成后,会多出/dev/vdb1 的设备文件,将它格式化。

    # blkid   #查看其他分区的格式类型
    # mkfs.xfs /dev/vdb1 #格式化成xfs

    /dev/vdb1 就是设备 /dev/vdb 的第一个分区,同理 /dev/vdb2 就是其第二个分区。

  3. 挂载
    挂载的是分区。将分区挂载到 /data 为例

    # mkdir /data                # 创建挂载目录
    # mount /dev/vdb1 /data # 挂载
    # mount | grep '/dev/vdb1' # 查看是否挂载

    如果将分区挂载到一个已经存在的目录下,该目录下的文件有可能会丢失!

  4. 自动挂载
    mount 挂载会在下一次重启后失效,需要手动再挂载。因此要将挂载写入配置文件,系统启动后会自行读取配置文件实现自动挂载。

    # blkid | grep /dev/vdb1    # 获取分区的UUID
    /dev/vdb1: UUID="9c8f967f-9998-43c6-a3da-012b08ce9748" TYPE="ext4"
    # vim /etc/fstab # 挂载信息写入配置文件
    UUID=9c8f967f-9998-43c6-a3da-012b08ce9748 /data xfs defaults 0 0

二、硬盘分区扩容

场景:原先已加了一块硬盘,该硬盘大小 40G,所有容量都分在了一个区: /dev/vdb1,并已经挂载在了 /data 目录。现在要的效果是 /data 目录容量扩容达 50G。等同于要扩容分区 /dev/ddb1。

1.查看分区类型

查看待扩容的硬盘分区类型

# fdisk -lu
Disk /dev/vdb: 53.7 GB, 53687091200 bytes, 104857600 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
Disk label type: dos
Disk identifier: 0xb1f80510

Device Boot Start End Blocks Id System
/dev/vdb1 2048 104857566 52427759+ 83 Linux

根据 Disk label type 或者 System 来判断分区类型:

dos gpt Linux GPT
Disk label type MBR分区 GPT分区
System MBR分区 GPT分区

2.MBR分区扩容

# set -eu

安装growpart工具

type growpart || yum install -y cloud-utils-growpart

扩容分区:运行命令 growpart /dev/vdb 1

LC_ALL=en_US.UTF-8 growpart /dev/vda 1

3.GPT分区扩容

type growpart || sudo yum install -y cloud-utils-growpart
type sgdisk || sudo yum install -y gdisk
sudo LC_ALL=en_US.UTF-8 growpart /dev/vdb 1
  1. 如果单盘有多个连续分区的情况,仅能扩容最后一个分区。例如数据盘/dev/vdb有三个分区/dev/vdb1、/dev/vdb2和/dev/vdb3。扩容时,只能扩容最后一个分区/dev/vdb3,即执行growpart /dev/vdb 3命令即可完成数据盘的分区扩容
  2. 如果您需要扩容的云盘分区是MBR分区表下的扩展分区(通常判断方式是分区号大于等于5),您需要先进行扩展分区扩容后再对逻辑分区进行扩容。
    例如您有/dev/vdb1(主分区)、/dev/vdb2(扩展分区)、/dev/vdb5(逻辑分区)三个分区,此时您需要依次执行growpart /dev/vdb 2、growpart /dev/vdb 5完成分区的扩容

4.扩容文件系统

查看目标分区的信息

# df -Th
Filesystem Type Size Used Avail Use% Mounted on
/dev/vdb1 ext4 40G 52M 47G 1% /data

👆上方信息得出 /dev/vdb1 分区的文件系统类型为 ext4,挂载目录为 /data。

  • ext文件系统
    resize2fs /dev/vdb1
  • xfs文件系统
    type xfs_growfs || sudo yum install -y xfsprogs
    xfs_growfs /mnt
  • btrfs文件系统
    btrfs filesystem resize max /mnt

使用虚拟卷合并硬盘

如果有多块硬盘,在linux服务器上就会有多个挂载点,参考 windows 系统盘符概念,使用的时候要注意哪个挂载点(盘符)满了,使用并不透明。借助 LVM 逻辑卷管理功能,可以做到linux的磁盘弹性管理,对使用完全透明,再也不用操心有几块硬盘的问题。
lvm逻辑层级图

1.创建物理卷

硬盘可以先建分区,在分区上创建物理卷;也可以裸硬盘直接创建物理卷。下面以裸硬盘为例:

# pvcreate /dev/vdb  # 创建物理卷
Physical volume "/dev/vdb" successfully created
# pvdisplay # 查看物理卷信息
# pvscan # 查看物理卷列表

2.创建卷组

创建卷组 vg01

# vgcreate vg01 /dev/vdb  #创建卷组
# vgdisplay #查看卷组信息

3.创建逻辑卷

从卷组 vg01中创建逻辑卷

# lvcreate -L 25G -n lv01 vg01   #从vg01卷组中划分25G用来创建lv01逻辑卷
# lvcreate -n lv02 -l 100% vg01 #将vg01卷组中剩余的空间都用来创建lv02逻辑卷
# lvdisplay #查看逻辑卷信息

4.格式化、挂载

接下来将逻辑卷当作一个普通的云盘即可。

# 格式化
mkfs.xfs /dev/vg01/lv01
# 挂载
mkdir /data
mount /dev/vg01/lv01 /data
# 自动挂载
cat /etc/fstab
/dev/vg01/lv01 /data xfs defaults 0 0

5.扩容

以 新加盘/dev/vdc 为例

# pvcreate /dev/vdc  # 创建物理卷
Physical volume "/dev/vdc" successfully created

# 将新创建的物理卷加入卷组 vg01
# vgextend vg01 /dev/vdc

# 卷组扩容后,逻辑卷就可以扩容了
# lvextend -l +5G /dev/vg01/lv01 #扩展5G
# lvextend -l +100%FREE /dev/vg01/lv01 #百分比扩展逻辑卷

# 调整容量
# resize2fs /dev/vg01/lv01

其他

阿里云有系统盘和数据盘的区别,系统盘可以扩容但是上限为500G,数据盘上限为32768G
阿里云云盘区别