linux的LVM操作
·
linux的LVM操作
1、LVM 的核心概念
LVM 通过将底层的物理磁盘抽象化,形成一个更易于管理和扩展的逻辑层。其核心由三个部分组成:
- Physical Volume - PV
- Volume Group - VG
- Logical Volume - LV
它们之间的关系可以这样理解:
物理硬盘 -> 做成 PV -> 合并到 VG -> 从 VG 中划分出 LV -> 格式化并挂载 LV 使用
1. 物理卷
- 是什么:PV 是 LVM 的基本存储单元,通常对应一个硬盘、一个分区,或者一个 RAID 设备。在使用之前,必须将这些块设备初始化为 PV。
- 关键命令:
pvcreate /dev/sdb1 /dev/sdc1:将分区/dev/sdb1和/dev/sdc1初始化为物理卷。pvdisplay:显示物理卷的详细信息。pvs或pvscan:简要显示所有物理卷。pvmove /dev/sdb1:将数据从 PV/dev/sdb1移动到同 VG 中的其他 PV。pvremove /dev/sdb1:删除物理卷属性(删除前需确保数据已移走或不再需要)。
2. 卷组
- 是什么:VG 是一个或多个 PV 的集合,可以看作是一个大的“存储池”。LVM 的管理操作主要在 VG 层面进行。系统上的 VG 名字必须唯一。
- 关键命令:
vgcreate my_vg /dev/sdb1 /dev/sdc1:创建一个名为my_vg的卷组,并包含两个 PV。vgextend my_vg /dev/sdd1:将新的 PV/dev/sdd1扩展到my_vg卷组中。vgreduce my_vg /dev/sdb1:从my_vg卷组中移除 PV/dev/sdb1(移除前需用pvmove移走数据)。vgdisplay:显示卷组的详细信息。vgs:简要显示所有卷组。vgremove my_vg:删除一个卷组。
3. 逻辑卷
- 是什么:LV 是从 VG 中划分出来的一块空间,相当于传统分区。我们可以对这个“逻辑分区”进行格式化、挂载和使用。LV 可以动态调整大小,是用户最终操作的对象。
- 关键命令:
lvcreate -L 20G -n my_data my_vg:从卷组my_vg中创建一个大小为 20G,名为my_data的逻辑卷。-L:指定大小(如10G,500M)。-l:指定 PE 的个数或百分比(如100%FREE使用所有剩余空间)。-n:指定 LV 的名称。
lvdisplay:显示逻辑卷的详细信息。lvs:简要显示所有逻辑卷。lvextend -L +5G /dev/my_vg/my_data:为 LVmy_data增加 5G 空间。- 注意:
lvextend只扩展了 LV 的物理边界,文件系统的大小还需要用resize2fs(ext3/4)或xfs_growfs(XFS)来扩展。
- 注意:
lvreduce -L -5G /dev/my_vg/my_data:减小 LV 5G 空间(危险操作!必须先缩减文件系统并确保数据无损)。lvremove /dev/my_vg/my_data:删除一个逻辑卷。
4. LVM 的常用操作流程
创建并使用一个 LVM
- 准备物理磁盘/分区:使用
fdisk/gdisk创建分区,并将分区类型标记为8e(MBR)或8e00(GPT)的 Linux LVM。 - 创建 PV:
pvcreate /dev/sdb1 - 创建 VG:
vgcreate my_volgroup /dev/sdb1 - 创建 LV:
lvcreate -L 10G -n my_logvol my_volgroup - 格式化 LV:
mkfs.ext4 /dev/my_volgroup/my_logvol - 挂载使用:
mount /dev/my_volgroup/my_logvol /mnt/data
扩展一个 LV(最常见操作)
- 确保 VG 有空间:使用
vgs查看 Free PE / Size。- 如果 VG 空间不足,先添加新硬盘,创建 PV,然后
vgextend my_volgroup /dev/new_pv。
- 如果 VG 空间不足,先添加新硬盘,创建 PV,然后
- 扩展 LV:
lvextend -L +5G /dev/my_volgroup/my_logvol(增加 5G)
或lvextend -l +100%FREE /dev/my_volgroup/my_logvol(使用所有剩余空间) - 扩展文件系统(关键步骤!):
- 对于 ext2/3/4:
resize2fs /dev/my_volgroup/my_logvol - 对于 XFS:
xfs_growfs /mnt/data(XFS 只能在挂载状态下扩展)
- 对于 ext2/3/4:
5. LVM 的高级特性
- PE:物理扩展块。是 PV 和 VG 分配空间的最小单位,默认为 4MB。在创建 VG 时可以通过
-s选项指定大小(如vgcreate -s 8M my_vg ...)。 - LE:逻辑扩展块。是 LV 分配空间的最小单位,大小与 PE 相同。
- 快照:
- 瞬间为一个 LV 创建一个“冻结”的镜像,常用于备份或在测试时保存状态。
- 创建快照:
lvcreate -L 1G -s -n snap_of_my_data /dev/my_vg/my_data - 挂载快照:
mount /dev/my_vg/snap_of_my_data /mnt/snapshot - 完成后可合并或删除。
- 条带化:类似 RAID 0,将数据分散存储在多个 PV 上,提高性能。
lvcreate -i 2 -I 64 -L 10G -n striped_lv my_vg-i 2:使用 2 个 PV 进行条带化。-I 64:条带大小(Stripe Size)为 64KB。
- 镜像:类似 RAID 1,为 LV 创建镜像副本,提供数据冗余。
lvcreate -m 1 -L 10G -n mirrored_lv my_vg(-m 1表示 1 个镜像副本)
总结与优势
| 特性 | 传统分区 | LVM | 优势 |
|---|---|---|---|
| 容量 | 固定大小 | 可动态在线扩展/缩减 | 灵活性高,避免初期规划失误 |
| 名称 | 设备名(如 /dev/sda1) | 自定义名称(如 /dev/vg_data/lv_mysql) | 更直观,易于管理 |
| 跨磁盘 | 一个分区只能在一个磁盘上 | 一个 VG/LV 可以跨多个物理磁盘 | 轻松整合多块硬盘空间 |
| 快照 | 不支持 | 支持 | 零 downtime 备份,系统恢复利器 |
核心思想:LVM 将存储管理的物理层面(PV)和逻辑层面(LV)分离,通过在中间加入卷组(VG)这个抽象层,实现了前所未有的灵活性。对于服务器管理和需要灵活调整存储空间的场景,LVM 几乎是必备技能。
2、实例操作
1、查看信息
root@server:~# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
loop0 7:0 0 63.3M 1 loop /snap/core20/1828
loop1 7:1 0 49.9M 1 loop /snap/snapd/18357
loop2 7:2 0 91.9M 1 loop /snap/lxd/24061
sr0 11:0 1 1.4G 0 rom
vda 252:0 0 120G 0 disk
├─vda1 252:1 0 1M 0 part
├─vda2 252:2 0 2G 0 part /boot
└─vda3 252:3 0 118G 0 part
└─ubuntu--vg-ubuntu--lv 253:0 0 59G 0 lvm /
vdb 252:16 0 500G 0 disk
root@server:~#
root@server:~#
root@server:~# df -h
Filesystem Size Used Avail Use% Mounted on
udev 7.8G 0 7.8G 0% /dev
tmpfs 1.6G 1.1M 1.6G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv 58G 7.0G 48G 13% /
tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 64M 64M 0 100% /snap/core20/1828
/dev/loop2 92M 92M 0 100% /snap/lxd/24061
/dev/loop1 50M 50M 0 100% /snap/snapd/18357
/dev/vda2 2.0G 108M 1.7G 6% /boot
tmpfs 1.6G 0 1.6G 0% /run/user/0
root@server:~# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 58G 7.0G 48G 13% /
root@server:~#
root@server:~# df -T /
Filesystem Type 1K-blocks Used Available Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 60575596 7257248 50208872 13% /
root@server:~#
root@server:~#
2、LVM操作
root@server:~# pvcreate /dev/vdb
Physical volume "/dev/vdb" successfully created.
root@server:~#
root@server:~# pvdisplay
--- Physical volume ---
PV Name /dev/vda3
VG Name ubuntu-vg
PV Size <118.00 GiB / not usable 0
Allocatable yes
PE Size 4.00 MiB
Total PE 30207
Free PE 15104
Allocated PE 15103
PV UUID krw0yc-AlUh-Nvmy-mkkq-8qEY-n5ig-JvuHMX
"/dev/vdb" is a new physical volume of "500.00 GiB"
--- NEW Physical volume ---
PV Name /dev/vdb
VG Name
PV Size 500.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID vEKT34-BZUu-IcN8-pFkD-Bkjc-Tqxz-sWGBtX
root@server:~#
root@server:~# vgextend ubuntu-vg /dev/vdb
Volume group "ubuntu-vg" successfully extended
root@server:~#
root@server:~#
root@server:~# vgdisplay
--- Volume group ---
VG Name ubuntu-vg
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 3
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 1
Open LV 1
Max PV 0
Cur PV 2
Act PV 2
VG Size 617.99 GiB
PE Size 4.00 MiB
Total PE 158206
Alloc PE / Size 15103 / <59.00 GiB
Free PE / Size 143103 / <559.00 GiB
VG UUID SQ962A-Eecc-svcJ-bjnh-gKcc-KC7h-x6zhWm
root@server:~#
root@server:~#
root@server:~# lvextend -l +100%FREE /dev/ubuntu-vg/ubuntu-lv
Size of logical volume ubuntu-vg/ubuntu-lv changed from <59.00 GiB (15103 extents) to 617.99 GiB (158206 extents).
Logical volume ubuntu-vg/ubuntu-lv successfully resized.
root@server:~#
root@server:~#
root@server:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- 617.99g
root@server:~#
root@server:~#
root@server:~# resize2fs /dev/ubuntu-vg/ubuntu-lv
resize2fs 1.45.5 (07-Jan-2020)
Filesystem at /dev/ubuntu-vg/ubuntu-lv is mounted on /; on-line resizing required
old_desc_blocks = 8, new_desc_blocks = 78
The filesystem on /dev/ubuntu-vg/ubuntu-lv is now 162002944 (4k) blocks long.
root@server:~#
root@server:~#
root@server:~#
root@server:~#
root@server:~# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
ubuntu-lv ubuntu-vg -wi-ao---- 617.99g
root@server:~#
root@server:~#
3、最终查看
root@server:~# df -h /
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/ubuntu--vg-ubuntu--lv 608G 7.0G 576G 2% /
root@server:~#
root@server:~#
root@server:~#
root@server:~# df -Th
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 7.8G 0 7.8G 0% /dev
tmpfs tmpfs 1.6G 1.1M 1.6G 1% /run
/dev/mapper/ubuntu--vg-ubuntu--lv ext4 608G 7.0G 576G 2% /
tmpfs tmpfs 7.9G 0 7.9G 0% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 7.9G 0 7.9G 0% /sys/fs/cgroup
/dev/loop0 squashfs 64M 64M 0 100% /snap/core20/1828
/dev/loop2 squashfs 92M 92M 0 100% /snap/lxd/24061
/dev/loop1 squashfs 50M 50M 0 100% /snap/snapd/18357
/dev/vda2 ext4 2.0G 108M 1.7G 6% /boot
tmpfs tmpfs 1.6G 0 1.6G 0% /run/user/0
root@server:~#
root@server:~#
root@server:~#
更多推荐



所有评论(0)