Skip to main content

Logical Volume Manager

LVM 是 Logical Volume Manager(逻辑卷管理器)的缩写。

它是一种在 Linux 系统中管理磁盘存储空间的技术,主要功能包括:

  • 把多个物理磁盘或磁盘分区(Physical Volumes, PV)合并成一个大的存储池(Volume Group, VG)。
  • 在这个存储池里创建和管理逻辑卷(Logical Volumes, LV),相当于虚拟分区。
  • 方便灵活地调整磁盘容量,比如扩展(扩容)、缩小、快照备份等,而不用像传统分区那样受限。

简单说,LVM 可以让你更灵活地管理硬盘空间,动态调整磁盘大小和布局,非常适合服务器和虚拟化环境。

物理设备(Physical Disk)
└── 分区(Partition)
    └── LVM(逻辑卷管理)
        └── 文件系统(如 ext4、xfs、btrfs)
            └── 挂载点(/、/home、/var 等)
[ Physical Volume (PV) ] 物理卷
        ↓
[ Volume Group (VG) ] 卷组
        ↓
[ Logical Volume (LV) ] 逻辑卷
        ↓
[ File System + Mount ] 格式化并挂载使用
/dev/vda2 → PV → VG "klas" → LV "root", "swap" → /  /swap
/dev/vdb
  ↓ pvcreate
PV → /dev/vdb
  ↓ vgcreate
VG → my_vg
  ↓ lvcreate
LV → /dev/my_vg/my_lv
  ↓ mkfs + mount
挂载点 → /mnt/data

Partition & Physical Volume

vda1 是分区还是物理卷?

lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda           252:0    0  200G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
├─vda2        252:2    0   39G  0 part 
│ ├─klas-root 253:0    0  175G  0 lvm  /
│ └─klas-swap 253:1    0    4G  0 lvm  
└─vda3        252:3    0  160G  0 part 
  └─klas-root 253:0    0  175G  0 lvm  /
lsblk -f
NAME          FSTYPE      FSVER    LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINT
vda                                                                                            
├─vda1        xfs                        a49d1ef0-1dc5-4403-9eb8-a95396d80833    808.7M    20% /boot
├─vda2        LVM2_member LVM2 001       GiXfEZ-Wz5F-G4V3-Dc78-fxki-HlzS-My9QMG                
│ ├─klas-root xfs                        f3d82155-4b15-4bb7-96c0-5a2a35fc2127     65.8G    62% /
│ └─klas-swap swap        1              e20b0bfd-24f7-4589-a374-d72c2178e482                  
└─vda3        LVM2_member LVM2 001       90mTOs-HRtq-zeJm-djD0-ghRL-oe0a-AQlcoi                
  └─klas-root xfs                        f3d82155-4b15-4bb7-96c0-5a2a35fc2127     65.8G    62% /

🧩 正确的术语对照

名称 类型 含义
vda 磁盘 整块物理(或虚拟)磁盘设备
vda1vda2 分区 vda 上划出来的区域(part)
/dev/vda1 分区设备文件 可以格式化、挂载、用作 LVM 的 PV
LVM2_member LVM 物理卷(PV) 特殊格式化的分区,供 LVM 使用

✅ 所以:

vda1 是一个分区(partition)
但它 也可以被初始化为一个 LVM 物理卷(PV),这就是术语上的“物理卷”的含义。

🧠 举个例子:

  • /dev/vda1:是一个磁盘分区(Partition)
  • 你执行了:pvcreate /dev/vda1 → 它就成了一个 LVM 物理卷(PV)
  • 这时,lsblk -f 就会显示它的 FSTYPELVM2_member,表示它是一个 PV(而不是 ext4、xfs 等普通文件系统)

📌 小结一句话:

vda1 本质是分区,但在使用 LVM 时,它可以被格式化为 LVM 的物理卷(PV)——这时候我们叫它“物理卷”,其实是“被初始化为物理卷的分区”。

如果你想看到你的系统中哪些分区是被 LVM 管理的“物理卷”,可以用:

pvs

Partition Resizing

List Block Devices

lsblk
NAME          MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
vda           252:0    0  200G  0 disk 
├─vda1        252:1    0    1G  0 part /boot
├─vda2        252:2    0   39G  0 part 
│ ├─klas-root 253:0    0  175G  0 lvm  /
│ └─klas-swap 253:1    0    4G  0 lvm  
└─vda3        252:3    0  160G  0 part 
  └─klas-root 253:0    0  175G  0 lvm  /
lsblk -f
NAME          FSTYPE      FSVER    LABEL UUID                                   FSAVAIL FSUSE% MOUNTPOINT
vda                                                                                            
├─vda1        xfs                        a49d1ef0-1dc5-4403-9eb8-a95396d80833    808.7M    20% /boot
├─vda2        LVM2_member LVM2 001       GiXfEZ-Wz5F-G4V3-Dc78-fxki-HlzS-My9QMG                
│ ├─klas-root xfs                        f3d82155-4b15-4bb7-96c0-5a2a35fc2127     65.8G    62% /
│ └─klas-swap swap        1              e20b0bfd-24f7-4589-a374-d72c2178e482                  
└─vda3        LVM2_member LVM2 001       90mTOs-HRtq-zeJm-djD0-ghRL-oe0a-AQlcoi                
  └─klas-root xfs                        f3d82155-4b15-4bb7-96c0-5a2a35fc2127     65.8G    62% /

Get Partition Info

  • p: print
  • Sector size: 扇区大小
  • Partition Table: 分区表
parted /dev/vda p
Model: Virtio Block Device (virtblk)
Disk /dev/vda:215GB
Sector size (logical/physical):512B/512B
Partition Table: msdos
Disk Flags: 

Number Start   End     Size    Type     File system  Flags
 1     1049kB  1075MB  1074MB  primary  xfs          boot
 2     1075MB  42.9GB  41.9GB  primary               lvm
 3     42.9GB  215GB   172GB   primary

Resize Part

Enter interacted mode:

parted /dev/vda

Input in interacted mode:

resizepart 3 100%

Refresh partition table(optional):

partprobe

Quit interacted mode:

q

Expand PV(Physical Volume):

pvresize /dev/vda3
pvs
  PV         VG   Fmt  Attr PSize    PFree 
  /dev/vda2  klas lvm2 a--   <39.00g     0 
  /dev/vda3  klas lvm2 a--  <160.00g 20.00g
lvs
  LV   VG   Attr       LSize    Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  root klas -wi-ao---- <175.02g                                                    
  swap klas -wi-a-----    3.97g
vgs
  VG   #PV #LV #SN Attr   VSize   VFree 
  klas   2   2   0 wz--n- 198.99g 20.00g

将 VG 中空闲空间全部分配给目标 LV(如 root 或 data LV):

  • VGName: klas
  • LVName: root
lvextend -r -l +100%FREE /dev/mapper/<VGName>-<LVName>
lvextend -r -L +50G /dev/mapper/klas-root