LVM 扩展逻辑卷
Overview
对于早期 Linux 用户,如何准确地评估分区的大小以及分配合适的空间一直是安装系统时的难题,因为在普通磁盘分区的管理下,分区划分后无法在不影响数据和系统运行的条件下改变其大小,当某个分区的存储空间消耗殆尽时,往往需要更换磁盘并迁移数据,如此可能会影响业务的正常运行。
LVM(Logical Volume Management) 的出现完美的解决上述问题,它是建立在硬盘和文件系统之间的一个逻辑层,支持动态的调整文件系统的大小,增添硬盘等,提高了存储空间管理的灵活性。LVM 大有先破后立之感,它把多块硬盘组成一个资源池,再按需从资源池划分虚拟分区,并且可以动态调整虚拟分区的大小和数量,它有以下三个重要概念。
- Physical Volume(PV):建立在物理分区之上,每个分区可以创建一个 PV。
- Volume Group(VG):建立在 PV 之上,由一个或者多个 PV 组成,每个 PV 只能加入到一个 VG 中。
- Logical Volume(LV):它是从 VG 划分的一块虚拟分区,可动态调整大小,一个 VG 可划分出多个 LV,这些 LV 可被格式化成文件系统并挂载在相关目录下。
+-----------+ +------------+ +------+
File System | / (ext4) | | /var (xfs) | | ... |
+-----------+ +------------+ +------+
-------------------------------------------
+-----------+ +------------+ +------+
Logical Volume | lv-root | | lv-var | | ... |
+-----------+ +------------+ +------+
-------------------------------------------
+-----------------------------------+
Volume Group | vg |
+-----------------------------------+
-------------------------------------------
+---------------+ +---------------+
Physical Volume | pvsda1 | | pvsdb1 |
+---------------+ +---------------+
-------------------------------------------
+---------------+ +---------------+
Disk partitions | sda1 | | sdb1 |
+---------------+ +---------------+
-------------------------------------------
+---------------+ +---------------+
Disk | sda | | sdb |
+---------------+ +---------------+
Guide
以本人 Linux 机器为例,根目录的空间使用率已达到 83%,扩容步骤如下。
root@ubuntu:~# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-root ext4 18180876 14265152 2969140 83% /
none tmpfs 4 0 4 0% /sys/fs/cgroup
...
它仅有一块磁盘 sda,分区 sda5 是最主要的分区,占据绝大多数存储空间,该分区属于一个名为 ubuntu-vg 的 VG,该 VG 包含两个 LV,分别是挂载在根目录的 ubuntu-vg-root 和用作 swap 的 ubuntu-vg-swap_1。该 VG 已无剩余空间,如果要扩展根目录的空间,就必须先增加磁盘,再扩展 ubuntu-vg VG,最后扩展 ubuntu-vg-root LV。
root@ubuntu:~# pvdisplay
--- Physical volume ---
PV Name /dev/sda5
VG Name ubuntu-vg
PV Size 19.76 GiB / not usable 2.00 MiB
root@ubuntu:~# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
...
Alloc PE / Size 5053 / 19.74 GiB
Free PE / Size 5 / 20.00 MiB
root@ubuntu:~# lvdisplay
--- Logical volume ---
LV Path /dev/ubuntu-vg/root
VG Name ubuntu-vg
LV Size 17.74 GiB
...
--- Logical volume ---
LV Path /dev/ubuntu-vg/swap_1
VG Name ubuntu-vg
LV Size 2.00 GiB
...
首先增加一块磁盘 sdb,利用 fdisk 在该磁盘创建一个名为 sdb1 的扩展分区,分区的大小和磁盘相当。
root@ubuntu:~# fdisk /dev/sdb
...
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): 1
First sector (2048-41943039, default 2048):
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039):
Using default value 41943039
Command (m for help): t
Selected partition 1
Hex code (type L to list codes): 8e
Changed system type of partition 1 to 8e (Linux LVM)
Command (m for help): w
The partition table has been altered!
Calling ioctl() to re-read partition table.
Syncing disks.
利用 pvcreate 在分区 sdb1 上创建一个名为 sdb1 的 PV:
root@ubuntu:~# pvcreate /dev/sdb1
Physical volume "/dev/sdb1" successfully created
把刚刚创建的 sdb1 PV 加入到 VG 中:
root@ubuntu:~# vgextend ubuntu-vg /dev/sdb1
Volume group "ubuntu-vg" successfully extended
这时 ubuntu-vg 总容量为 39.74 GB,可用空间为 20 GB:
root@ubuntu:~# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
VG Size 39.75 GiB
PE Size 4.00 MiB
Total PE 15296
Alloc PE / Size 5053 / 19.74 GiB
Free PE / Size 5124 / 20.02 GiB
接下来扩展 /dev/ubuntu-vg/root LV,本次增加 10GB 的空间。
root@ubuntu:~# lvextend -L+10G /dev/ubuntu-vg/root
Extending logical volume root to 27.74 GiB
Logical volume root successfully resized
扩展了逻辑卷后,还需要更新文件系统,因为 /dev/ubuntu-vg/root 上的文件系统类型为 ext4,所以 resize2fs 命令扩展。
root@ubuntu:~# resize2fs /dev/mapper/ubuntu--vg-root
扩展后效果如下:
root@ubuntu:~# df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-root ext4 28502156 14265156 12871324 53% /
none tmpfs 4 0 4 0% /sys/fs/cgroup