penglongli / blog

18 stars 1 forks source link

LVM 扩容 #79

Open penglongli opened 6 years ago

penglongli commented 6 years ago

参考文章:

本文以 Ubuntu 16.04 发行版为例,其它发行版会有差异。挂载一个 10GB 的磁盘。

概念

LVM 是建立在硬盘和分区之间的一个逻辑层,使用 LVM 可以实现动态挂载磁盘,来实现无关机扩容,通常我们都用来做生产环境的磁盘管理。

关于比较详细的概念可以参考上边的两篇文章,下边介绍一下基本的几个概念:

具体的关系可以如下图所示:

图片

具体演示

以腾讯云的 Ubuntu 16.04 为例,演示下 LVM 的具体使用。

首先在控制台上为机器挂载一个 10GiB 的磁盘,然后可以在机器上通过 fdisk -l 查看到这块磁盘的信息

root@host-1:/home/ubuntu# fdisk -l
Disk /dev/vda: 50 GiB, 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
Disklabel type: dos
Disk identifier: 0x27921508

Device     Boot Start       End   Sectors Size Id Type
/dev/vda1  *     2048 104857599 104855552  50G 83 Linux

Disk /dev/vdb: 10 GiB, 10737418240 bytes, 20971520 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

目标

我们的目标是,把这块 10GiB 的磁盘以 LVM 的方式挂载到 /data 目录下

步骤

从上述可以看到,我们这块磁盘在机器上的位置为/dev/vdb ,我们以这块磁盘创建一个 PV:

root@host-1:/# pvcreate /dev/vdb
  Physical volume "/dev/vdb" successfully created
root@host-1:/# pvs
  PV         VG   Fmt  Attr PSize  PFree
  /dev/vdb        lvm2 ---  10.00g 10.00g

然后,我们基于这个 PV,创建一个卷组(VG):

# 在创建 VG 的时候,后边可以跟上多个 PV
root@host-1:/# vgcreate vg_data /dev/vdb
  Volume group "vg_data" successfully created
root@host-1:/# vgs
  VG      #PV #LV #SN Attr   VSize  VFree
  vg_data   1   0   0 wz--n- 10.00g 10.00g

从上述的输出可以看出来,我们创建了一个 vg_data 的卷组,接下来我们要在这个卷组上创建逻辑卷(LV)

root@host-1:/# lvcreate -l 100%FREE -n lv_data vg_data
  Logical volume "lv_data" created.
root@host-1:/# lvs
  LV      VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_data vg_data -wi-a----- 10.00g

我们使用 vg_data 这个卷组的所有剩余空间,创建了一个名为 lv_data 的卷组。

注:如果我们不想使用所有剩余空间,可以把 lvcreate -l 100%FREE -n lv_data vg_data 替换为:

lvcreate -L 2G -n lv_data vg_data

在创建完 LV 之后,我们需要将其格式化,下述命令会将其格式化为 ext4 文件系统:

root@host-1:/# mkfs.ext4 /dev/vg_data/lv_data

在格式化后,我们就可以进行挂载了:

root@host-1:/# mount /dev/vg_data/lv_data /data
root@host-1:/# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                         1.9G     0  1.9G   0% /dev
tmpfs                        383M  5.4M  378M   2% /run
/dev/vda1                     50G  1.7G   46G   4% /
tmpfs                        1.9G     0  1.9G   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs                        100K     0  100K   0% /run/lxcfs/controllers
tmpfs                        383M     0  383M   0% /run/user/500
/dev/mapper/vg_data-lv_data  9.8G   23M  9.2G   1% /data

然后,写入 /etc/fstab

root@host-1:/# cat /etc/fstab
/dev/mapper/data-backup /data             ext4       noatime,defaults      0 0

增加一块磁盘

按照上述步骤,我们可以对 /data 进行扩容。

第一步,再挂载一块 10GiB 的磁盘。

第二步:通过 fdisk -l 可以看到磁盘名称为:/dev/vdc

root@host-1:/# pvcreate /dev/vdc
root@host-1:/# vgs
  VG      #PV #LV #SN Attr   VSize  VFree
  vg_data   1   1   0 wz--n- 10.00g    0

root@host-1:/# vgextend vg_data /dev/vdc
  Volume group "vg_data" successfully extended

root@host-1:/# lvs
  LV      VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_data vg_data -wi-ao---- 10.00g

root@host-1:/# lvextend -l +100%FREE  vg_data/lv_data
  Size of logical volume vg_data/lv_data changed from 10.00 GiB (2559 extents) to 19.99 GiB (5118 extents).
  Logical volume lv_data successfully resized.

root@host-1:/# resize2fs /dev/vg_data/lv_data
resize2fs 1.42.13 (17-May-2015)
Filesystem at /dev/vg_data/lv_data is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 2
The filesystem on /dev/vg_data/lv_data is now 5240832 (4k) blocks long.

root@host-1:/# df -h
Filesystem                   Size  Used Avail Use% Mounted on
udev                         1.9G     0  1.9G   0% /dev
tmpfs                        383M  5.4M  378M   2% /run
/dev/vda1                     50G  1.7G   46G   4% /
tmpfs                        1.9G     0  1.9G   0% /dev/shm
tmpfs                        5.0M     0  5.0M   0% /run/lock
tmpfs                        1.9G     0  1.9G   0% /sys/fs/cgroup
tmpfs                        100K     0  100K   0% /run/lxcfs/controllers
tmpfs                        383M     0  383M   0% /run/user/500
/dev/mapper/vg_data-lv_data   20G   28M   19G   1% /data

对于 ext4 的,我们用 resize2fs,对于 xfs 格式的我们用 xfs_growfs

df -h 的信息我们可以看到,/data 目录已经扩容为:20G

接下来,就是缩容:https://github.com/penglongli/blog/issues/78