Open penglongli opened 6 years ago
参考文章:
本文以 Ubuntu 16.04 发行版为例,其它发行版会有差异。挂载一个 10GB 的磁盘。
LVM 是建立在硬盘和分区之间的一个逻辑层,使用 LVM 可以实现动态挂载磁盘,来实现无关机扩容,通常我们都用来做生产环境的磁盘管理。
关于比较详细的概念可以参考上边的两篇文章,下边介绍一下基本的几个概念:
PV(Physical Volume)物理卷
物理卷在 LVM 的管理中处于最底层,可以是物理硬盘,也可以是物理硬盘上的分区,也可以是 raid 设备
VG(Volume Group)卷组
卷组建立在物理卷之上,一个 VG 至少包含一个 PV,可以通过添加 PV 到 VG 的方式中来扩容卷组
LV(Logical Volume)逻辑卷
逻辑卷建立在卷组之上,卷组中的空间可以分配到逻辑卷中。逻辑卷可以动态扩展和缩小空间,一个逻辑卷只属于一个卷组。逻辑卷即为我们的挂载卷,可以挂载到相应的挂载点上
具体的关系可以如下图所示:
以腾讯云的 Ubuntu 16.04 为例,演示下 LVM 的具体使用。
首先在控制台上为机器挂载一个 10GiB 的磁盘,然后可以在机器上通过 fdisk -l 查看到这块磁盘的信息
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:
/dev/vdb
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)
vg_data
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 的卷组。
lv_data
注:如果我们不想使用所有剩余空间,可以把 lvcreate -l 100%FREE -n lv_data vg_data 替换为: lvcreate -L 2G -n lv_data vg_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
/etc/fstab
root@host-1:/# cat /etc/fstab /dev/mapper/data-backup /data ext4 noatime,defaults 0 0
按照上述步骤,我们可以对 /data 进行扩容。
/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
df -h
接下来,就是缩容:https://github.com/penglongli/blog/issues/78
参考文章:
本文以 Ubuntu 16.04 发行版为例,其它发行版会有差异。挂载一个 10GB 的磁盘。
概念
LVM 是建立在硬盘和分区之间的一个逻辑层,使用 LVM 可以实现动态挂载磁盘,来实现无关机扩容,通常我们都用来做生产环境的磁盘管理。
关于比较详细的概念可以参考上边的两篇文章,下边介绍一下基本的几个概念:
PV(Physical Volume)物理卷
物理卷在 LVM 的管理中处于最底层,可以是物理硬盘,也可以是物理硬盘上的分区,也可以是 raid 设备
VG(Volume Group)卷组
卷组建立在物理卷之上,一个 VG 至少包含一个 PV,可以通过添加 PV 到 VG 的方式中来扩容卷组
LV(Logical Volume)逻辑卷
逻辑卷建立在卷组之上,卷组中的空间可以分配到逻辑卷中。逻辑卷可以动态扩展和缩小空间,一个逻辑卷只属于一个卷组。逻辑卷即为我们的挂载卷,可以挂载到相应的挂载点上
具体的关系可以如下图所示:
具体演示
以腾讯云的 Ubuntu 16.04 为例,演示下 LVM 的具体使用。
首先在控制台上为机器挂载一个 10GiB 的磁盘,然后可以在机器上通过
fdisk -l
查看到这块磁盘的信息目标
我们的目标是,把这块 10GiB 的磁盘以 LVM 的方式挂载到 /data 目录下
步骤
从上述可以看到,我们这块磁盘在机器上的位置为
/dev/vdb
,我们以这块磁盘创建一个 PV:然后,我们基于这个 PV,创建一个卷组(VG):
从上述的输出可以看出来,我们创建了一个
vg_data
的卷组,接下来我们要在这个卷组上创建逻辑卷(LV)我们使用
vg_data
这个卷组的所有剩余空间,创建了一个名为lv_data
的卷组。在创建完 LV 之后,我们需要将其格式化,下述命令会将其格式化为 ext4 文件系统:
在格式化后,我们就可以进行挂载了:
然后,写入
/etc/fstab
增加一块磁盘
按照上述步骤,我们可以对
/data
进行扩容。第一步,再挂载一块 10GiB 的磁盘。
第二步:通过 fdisk -l 可以看到磁盘名称为:/dev/vdc
对于 ext4 的,我们用 resize2fs,对于 xfs 格式的我们用 xfs_growfs
从
df -h
的信息我们可以看到,/data 目录已经扩容为:20G接下来,就是缩容:https://github.com/penglongli/blog/issues/78