Proxmox VE基于Debian Linux操作系统,也就是说Linux操作系统的逻辑卷管理LVM在Proxmox VE也是适用的。当我们在使用Proxmox VE的时候,如果发现某个分区的容量不够用了,想扩容了,怎么办?我们可以使用LVM工具,可以在磁盘不用重新分区的情况下,动态调整磁盘容量的大小。
逻辑卷管理(Logical Volume Manager,LVM)是Linux系统中比较重要的一种磁盘管理机制, LVM可以在磁盘不用重新分区的情况下动态调整文件系统的大小,实现文件系统跨越不同磁盘和分区。
1. LVM的基本概念如果要了解LVM,则需要了解LVM中的一些基本概念,如下所列:
PD:物理磁盘(Physical Disk),如硬盘,或RAID硬盘。
PP:物理分区(Physical Partition),如硬盘的分区,或RAID硬盘的分区。
PV:物理卷(Physical Volume),是物理分区的LVM 抽象,是组成卷组的基本逻辑单元,一般一个PV对应一个PP。
VG:卷组(Volume Group,VG),是物理卷的一个集合,至少包含一个物理卷。卷组的大小取决于物理卷的容量和个数。
LV:逻辑卷(Logical Volume),在卷组的基础之上创建的逻辑磁盘。
PE:物理扩展单元(Physical Extends),每个PV都会以PE为基本单元划分,即逻辑意义上磁盘的最小存储单元。PE的大小是可以配置的,默认为4MB。
2. Proxmox VE的LVM逻辑架构在了解了LVM的基本概念之后,我们再来了解一下Proxmox VE的LVM逻辑架构是什么样的,Proxmox VE的LVM逻辑架构如图1所示。
请大家务必熟悉这个Proxmox VE的LVM逻辑架构图,我下面关于Proxmox VE的LVM的内容都是围绕着这个图来展开。
根据图1可以看出,Proxmox VE的LVM逻辑架构就非常清晰了,LVM层是建立在物理层之上文件系统之下的一个逻辑层,通过LVM可以将物理层转换为物理卷组,若干个物理卷集合成卷组,在卷组中可以任何创建逻辑卷,并进一步在逻辑卷上创建文件系统,最后将逻辑卷挂载到某个挂载点目录上就可以使用逻辑卷了。逻辑卷的使用方法与普通的磁盘分区完全一样。
图1中的系统盘的LVM特性是Proxmox VE安装时自动生成的,可以说是默认LVM配置,下面我就来讲一下这个Proxmox VE的LVM逻辑架构:
● 物理磁盘层(PD)
磁盘/dev/sda是Proxmox VE的系统盘,磁盘/dev/sdb、/dev/sdc和/dev/sdd是数据盘。
● 物理分区层(PP)
针对系统盘,在Proxmox VE安装时,Proxmox VE对/dev/sda磁盘进行分区,划分为/dev/sda1分区、/dev/sda2分区和/dev/sda3分区等三个分区;其中/dev/sda1分区是BIOS boot分区,不能应用LVM机制。/dev/sda2分区是EFI系统分区,也不能应用LVM机制。/dev/sda3应用LVM机制。
针对数据盘,可根据实际情况对数据盘进行分区或不分区,我在/dev/sdb划分了/dev/sdb1和/dev/sdb2两个分区,/dev/sdc划分了/dev/sdc1一个分区,/dev/sdd则不划分区。
● 物理卷层(PV)
针对系统盘,在Proxmox VE安装时,Proxmox VE把第三个分区/dev/sda3进行LVM格式化,也就是将磁盘分区/dev/sda3转化为物理卷/dev/sda3,物理卷的名称为“/dev/sda3”。
针对数据盘,可根据实际情况对数据盘进行物理卷转化,我将磁盘分区/dev/sdb1转化为物理卷/dev/sdb1,将磁盘分区/dev/sdb2转化为物理卷/dev/sdb2,将磁盘分区/dev/sdc1转化为物理卷/dev/sdc1,将磁盘/dev/sdd转化为物理卷/dev/sdd。
● 卷组层(VG)
针对系统盘,在Proxmox VE安装时,Proxmox VE创建了一个名称为“pve”的卷组,同时将物理卷/dev/sda3加入到卷组pve中,也就是说pve卷组中只有一个物理卷。
针对数据盘,可根据实际情况创建卷组,我创建了一个名称为“lisq”的卷组,然后将物理卷/dev/sdb1、物理卷/dev/sdb2、物理卷/dev/sdc1以及物理卷/dev/sdd加入到卷组lisq中。
● 逻辑卷层(LV)
针对系统盘,在Proxmox VE安装时,Proxmox VE在卷组pve之上创建了三个名称分别为“root”、“data”和“swap”的逻辑卷。其中逻辑卷data主要用于虚拟机磁盘,在创建虚拟机的时候,通过对逻辑卷data划分空间,作为虚拟机磁盘,所以虚拟机磁盘也属于逻辑卷。另外逻辑卷data还需要划分一定的空间,作为元数据池和元数据池备份。
针对数据盘,可根据实际情况创建逻辑卷,我在lisq卷组之上创了三个名称分别为“mytcp”、“myudp”和“myftp”的逻辑卷。
● 文件系统层(FS)
针对系统盘,磁盘分区/dev/sda1是BIOS boot分区,磁盘分区/dev/sda2是EFI分区,都不能应用LVM机制,在Proxmox VE安装时,Proxmox VE在磁盘分区/dev/sda1之上创建BIOS boot文件系统,在磁盘分区/dev/sda2之上创建vfat文件系统,在逻辑卷root之上创建ext4文件系统,在逻辑卷虚拟机磁盘之上创建ext3文件系统,在逻辑卷swap之上创建swap文件系统。
针对数据盘,可根据实际情况创建逻辑卷,我在逻辑卷mytcp之上创建ext4文件系统,在逻辑卷myudp之上创建ext4文件系统,在逻辑卷myftp之上创建ext4文件系统。
● 挂载层(ML)
针对系统盘,磁盘分区/dev/sda1挂载到“/boot”目录上,磁盘分区/dev/sda2属于EFI系统分区,无需挂载。逻辑卷root挂载到“/”上,具体是挂载到“/var/lib/vz”目录上(下文内容会有说明)。逻辑卷虚拟机磁盘无需挂载(下文内容会有说明)。逻辑卷swap是交换分区,不用指定挂载点,或者以[SWAP]表示挂载点。
针对数据盘,可根据实际情况选择目录进行挂载,我将逻辑卷mytcp挂载到/var/mytcp目录上,将逻辑卷myudp挂载到/var/myudp目录上,将逻辑卷myftp挂载到/var/myftp目录上。
3. Proxmox VE的默认LVM设置以Proxmox VE 7.0为例,如果选择使用ext4或xfs文件系统进行安装,那么除了EFI系统分区和BIOS boot分区之外,目标硬盘剩余的磁盘空间被格式化为LVM卷组,并且可通过“Optinos”按钮进一步设置LVM的空间大小。
选择默认的文件系统“ext4”进行系统安装,如图2所示。
关于更具体的EXT4/XFS文件系统安装方式,请参加《Proxmox VE 7.0的高级安装及系统盘分区-EXT4(上)》文章内容。
3.1.Proxmox VE默认磁盘分区Proxmox VE 7.0安装完成之后,我们来看一下Proxmox VE的磁盘分区情况,可以通过WEB UI界面可查看,如图3所示。
更详细的磁盘分区情况,需要通过命令行CLI进行查看,如下列所示:
root@pve:~# fdisk -l Disk /dev/sda: 40 GiB, 42949672960 bytes, 83886080 sectors #/dev/sda是系统盘,有3个分区 Disk model: VMware Virtual S 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: gpt Disk identifier: E1A3BA78-BE83-4FC0-8F2C-004A670AB19B Device Start End Sectors Size Type /dev/sda1 34 2047 2014 1007K BIOS boot #/dev/sda1分区,BIOS boot类型分区 /dev/sda2 2048 1050623 1048576 512M EFI System #/dev/sda2分区,EFI系统类型分区 /dev/sda3 1050624 83886046 82835423 39.5G Linux LVM #/dev/sda3分区,LVM类型分区 Disk /dev/sdb: 100 GiB, 107374182400 bytes, 209715200 sectors #/dev/sdb磁盘,未分区 Disk model: VMware Virtual S Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdc: 100 GiB, 107374182400 bytes, 209715200 sectors #/dev/sdc磁盘,未分区 Disk model: VMware Virtual S Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/sdd: 100 GiB, 107374182400 bytes, 209715200 sectors #/dev/sdd磁盘,未分区 Disk model: VMware Virtual S Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/pve-swap: 4 GiB, 4294967296 bytes, 8388608 sectors #swap逻辑卷设备 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk /dev/mapper/pve-root: 9.75 GiB, 10468982784 bytes, 20447232 sectors #root逻辑卷设备 Units: sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes3.2.Proxmox VE默认LVM
Proxmox VE 7.0安装完成之后,我们来看一下Proxmox VE的LVM情况,可以通过第三方WEB UI界面可查看。
3.2.1.Proxmox VE默认物理卷(PV)结合图1,我们可以看到,Proxmox VE将磁盘分区/dev/sda3转化为物理卷/dev/sda3,物理卷的名称为“/dev/sda3”,如图4和图5所示。
在图5中,是物理卷/dev/sda3的配置信息,磁盘大小为39.5GB,PE分配块大小为4MB。其中物理卷/dev/sda3分配了4GB空间给逻辑卷swap,分配了9.75GB空间给逻辑卷root,分配了18.87空间给逻辑卷data_tdata(数据池,用于虚拟机磁盘),分配了1GB空间给逻辑卷data_tmeta(元数据池,用于管理与检索数据池),分配了1GB空间给逻辑卷lvol0_pmspare(元数据池备份)。也就是说:
在Proxmox VE 7.0的界面上,我们也可以看到逻辑卷data、逻辑卷data_tdata和逻辑卷data_tmeta的一些简单信息,逻辑卷lvol0_pmspare在界面上没有显示,如图6所示。
上面是使用WEB UI进行查看,也可以使用命令行CLI进行查看,会有更详细的物理卷信息,如下所列:
root@pve:~# pvs PV VG Fmt Attr PSize PFree #物理卷PV的名称:/dev/sda3 /dev/sda3 pve lvm2 a-- <39.50g <4.88g
root@pve:~# pvdisplay --- Physical volume --- PV Name /dev/sda3 #物理卷PV的名称:/dev/sda3 VG Name pve #卷组VG的名称:pve,指/dev/sda3所在的卷组 PV Size <39.50 GiB / not usable 2.98 MiB #物理卷的容量:39.50GB Allocatable yes #是否可分配:是 PE Size 4.00 MiB #物理区块大小:4MB Total PE 10111 #物理区块总量:10111个 Free PE 1248 #已分配的物理区块:8863个 Allocated PE 8863 #空闲的物理区块:1248个 PV UUID Ny0mtE-hiIR-IVRB-33aA-dKZe-uKyL-gtbWkM #物理卷PV的UUID
root@pve:~# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1
├─sda2 vfat FAT32 F92A-97E4
└─sda3 LVM2_member LVM2 001 Ny0mtE-hiIR-IVRB-33aA-dKZe-uKyL-gtbWkM
├─pve-swap swap 1 d971d023-1e21-4db4-b083-35581f2fc965 [SWAP]
├─pve-root ext4 1.0 9cbd71dd-b8a4-473e-a503-48c8c0c0928b 6.1G 30% /
├─pve-data_tmeta #逻辑卷data_tmeta,元数据池
│ └─pve-data
└─pve-data_tdata #逻辑卷data_tdata,元数据池
└─pve-data
3.2.2.Proxmox VE默认卷组(VG)
结合图1,我们可以看到,Proxmox VE创建了一个名称为“pve”的卷组,同时将物理卷/dev/sda3加入到卷组pve中,也就是说pve卷组中只有一个物理卷,如图7和图8所示。
图8中,卷组pve的空间是39.5GB,这个空间大小等于物理卷/dev/sda3空间大小,因为卷组pve有一个物理卷/dev/sda3组成。
上面是使用WEB UI进行查看,也可以使用命令行CLI进行查看,会有更详细的卷组信息,如下所列:
root@pve:~# vgs VG #PV #LV #SN Attr VSize VFree #卷组VG的名称:pve pve 1 5 0 wz--n- <39.50g <4.88g
root@pve:~# vgdisplay --- Volume group --- VG Name pve #卷组VG的名称:pve System ID Format lvm2 #格式化类型:lvm2 metadata Areas 1 #元数据区域:1 metadata Sequence No 7 VG Access read/write #VG访问权限:读写 VG Status resizable #VG状态:可改变大小 MAX LV 0 #最大逻辑卷数量,Proxmox VE没有给出数值 Cur LV 3 #当前逻辑卷:3个 Open LV 2 #可打开的逻辑卷:2个,data逻辑卷是无法打开的 Max PV 0 #最大物理卷数量,Proxmox VE没有给出数值 Cur PV 1 #当前物理卷数量:1个,指pve卷组中的物理卷数量 Act PV 1 #当前激活的物理卷:1个,指pve卷组中的激活物理卷数量 VG Size <39.50 GiB #卷组VG的容量:39.5OGB PE Size 4.00 MiB #物理区块大小:4MB Total PE 10111 #物理区块总量:10111个 Alloc PE / Size 8863 / 34.62 GiB #已分配的物理区块:8863个 Free PE / Size 1248 / <4.88 GiB #空闲的物理区块:1248个 VG UUID H60lKU-9yzf-4t64-NvQK-MQkU-PFp9-Vg3Xds #卷组VG的UUID3.2.3.Proxmox VE默认逻辑卷(LV)
结合图1,Proxmox VE在卷组pve之上创建了三个名称分别为“root”、“data”和“swap”的逻辑卷。其中逻辑卷data主要用于虚拟机磁盘,在创建虚拟机的时候,通过对逻辑卷data划分空间,作为虚拟机磁盘,所以虚拟机磁盘也属于逻辑卷。另外逻辑卷data还需要划分一定的空间,作为元数据池和元数据池备份,如图9、图10、图11和图12所示。
图10中,我们可以看到,逻辑卷swap的设备文件是/dev/pve/swap,以虚拟内存形式加载,从物理卷/dev/sda3分配了4GB空间给swap。
图11中,我们可以看到,逻辑卷root的设备文件是/dev/pve/root,以ext4文件系统加载,从物理卷/dev/sda3分配了9.75GB空间给root。注意,从图11中我们发现,默认情况下,逻辑卷/dev/pve/root空间已使用36%。
默认情况下,逻辑卷data的设备文件是/dev/pve/data,我们根据图5和图6知道,逻辑卷data还继续细分为data_tmeta、data_tdata以及lvol0_pmspare元数据池备份,其中虚拟机磁盘存放在data_tdata,所以当我们创建虚拟机之后,设备文件/dev/pve/data就会被系统自动删除,取而代之的是虚拟机磁盘,如下所列:
在创建虚拟机之前:
root@pve:~# ls /dev/pve/ data root swap #卷组pve中有逻辑卷data
在创建虚拟机之后:
root@pve:~# ls /dev/pve/ root swap vm-100-disk-0 #卷组pve中自动删除逻辑卷data,出现虚拟机磁盘(也是逻辑卷)
root@pve:~# lsblk -f
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINT
sda
├─sda1
├─sda2 vfat FAT32 F92A-97E4
└─sda3 LVM2_member LVM2 001 Ny0mtE-hiIR-IVRB-33aA-dKZe-uKyL-gtbWkM
├─pve-swap swap 1 d971d023-1e21-4db4-b083-35581f2fc965 [SWAP]
├─pve-root ext4 1.0 9cbd71dd-b8a4-473e-a503-48c8c0c0928b 3.2G 61% /
├─pve-data_tmeta
│ └─pve-data-tpool
│ ├─pve-data
│ └─pve-vm--100--disk--0 #管理与检索虚拟机磁盘逻辑卷的数据
└─pve-data_tdata
└─pve-data-tpool
├─pve-data
└─pve-vm--100--disk--0 #虚拟机磁盘逻辑卷
在Proxmox VE 7.0 界面中,我们可以看到逻辑卷root的配置信息,如图13所示。
结合图11和图13,Proxmox VE 7.0安装完成之后,我没有备份数据、也没有上传ISO镜像和容器模板,但是默认情况下逻辑卷root却使用了3GB空间,这3GB是什么数据,来源于哪里,目前不清楚,官方文档也没有相关说明。
上面是使用WEB UI进行查看,也可以使用命令行CLI进行查看,会有更详细的卷组信息,如下所列:
root@pve:~# lvs LV VG Attr LSize Pool Origin Data% meta% Move Log Cpy%Sync Convert data pve twi-aotz-- 18.87g 0.00 1.58 root pve -wi-ao---- 9.75g swap pve -wi-ao---- 4.00g vm-100-disk-0 pve Vwi-a-tz-- 32.00g data 0.00
root@pve:~# lvdisplay --- Logical volume --- LV Path /dev/pve/swap #逻辑卷LV路径,有访问路径说明逻辑卷可以找到 LV Name swap #逻辑卷LV名称:swap VG Name pve #卷组VG名称:pve LV UUID 6wn1yh-aNdA-cy3j-A3tL-dvw3-80lF-oJ3UbH #逻辑卷LV的UUID LV Write Access read/write #逻辑卷访问权限:读写 LV Creation host, time proxmox, 2021-09-27 15:15:28 +0800 #逻辑卷建立时间 LV Status available #逻辑卷状态:有效 # open 2 LV Size 4.00 GiB #逻辑卷容量:4.0GB Current LE 1024 #逻辑区块:1024个 Segments 1 Allocation inherit #分配属性:继承 Read ahead sectors auto - currently set to 256 Block device 253:0 --- Logical volume --- LV Path /dev/pve/root #逻辑卷LV路径,有访问路径说明逻辑卷可以找到 LV Name root #逻辑卷LV名称:root VG Name pve #卷组VG名称:pve LV UUID Mk60AC-IDpp-uJa0-Q69h-lovS-52tX-1dafq1 LV Write Access read/write LV Creation host, time proxmox, 2021-09-27 15:15:28 +0800 LV Status available # open 1 LV Size 9.75 GiB Current LE 2496 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:1 --- Logical volume --- LV Name data #逻辑卷LV名称:data,没有访问路径,无法通过路径找到 VG Name pve #卷组VG名称:pve LV UUID 5bTP6h-etm2-5VjW-QwaA-Kp46-aMHv-MjW82u LV Write Access read/write LV Creation host, time proxmox, 2021-09-27 15:15:29 +0800 LV Pool metadata data_tmeta #卷组池元数据,这也是逻辑卷 LV Pool data data_tdata #卷组池数据,这也是逻辑卷 LV Status available # open 0 LV Size 18.87 GiB #逻辑卷容量:18.87GB Allocated pool data 0.00% #数据使用空间:0%,说明数据池还没有数据 Allocated metadata 1.58% #元数据使用空间:1.58%,元数据池已经有数据 Current LE 4831 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:43.2.4.Proxmox VE默认挂载层(ML)
磁盘分区/dev/sda1挂载点:/boot
根据图1和图3,Proxmox VE的磁盘分区/dev/sda1属于BIOS boot分区,挂载到“/boot”目录上,/boot中主要存放系统启动所必需的文件,不能应用LVM机制。
磁盘分区/dev/sda2挂载点:无
根据图1和图3,Proxmox VE的磁盘分区/dev/sda2属于EFI系统分区,也不能应用LVM机制,无需挂载。
逻辑卷root挂载点:/ 或 /var/lib/vz
根据Proxmox官方文档,Proxmox VE的逻辑卷挂载点是根目录“/”,从Proxmox VE 4.2版本以后,“/var/lib/vz”目录被包含到逻辑卷root中,如图14所示。
也就是说,根据图14,我们可以知道逻辑卷root的存储路径是“/var/lib/vz”目录,这一点也可以从图15来验证。
我们都知道,Proxmox VE是一个虚拟化平台,是基于KVM虚拟化技术,所以肯定具备KVM虚拟化特性。KVM的存储虚拟化是通过存储池(Storage Pool)和卷(Volume)来管理的,KVM将宿主机目录/var/lib/libvirt/images作为默认的存储池,存储池定义在宿主机的/etc/libvirt/storage目录下。Proxmox VE通过对KVM进行优化,将宿主机目录/var/lib/vz作为默认的存储池,存储池定义在宿主机的/etc/pve/storage.cfg。
root@pve:/etc/pve# cat storage.cfg dir: local path /var/lib/vz content iso,vztmpl,backup lvmthin: local-lvm thinpool data vgname pve content rootdir,images
逻辑卷data挂载点:无
根据图1可以知道,逻辑卷data由逻辑卷data_tmeta、逻辑卷data_tdata以及逻辑卷lvol0_pmspare元数据池备份组成,逻辑卷data无需挂载。
没有挂载到目录上去,我们就无法从挂载点去访问逻辑卷data的内容,比方说我们创建了虚拟机磁盘之后,这个虚拟机磁盘存放在data_tdata中,由于没挂载点,我们无法去读写虚拟机磁盘的内容,从这个角度来说,逻辑卷data确实需要一个挂载点好一些,方便读写虚拟机磁盘内容。但是,我们都知道虚拟机磁盘多的话可能有成千上万,那是不是得需要搞成千上万个挂载点呢,所以,从这个角度讲,逻辑卷data确实没有必要搞挂载点。
一切都没关系,我们有一种更优的方法去读写虚拟机磁盘,我们可以通过虚拟机图形界面去操作,就可以读写虚拟机磁盘了,所以没有必须要给虚拟机磁盘挂载,通过挂载点访问只不过是其中一种读取方式而已,尤其是,成千上万的虚拟机磁盘呢,挂载就不具备可行性了,如图16所示。
逻辑卷swap挂载点:无
逻辑卷swap是交换分区,不用指定挂载点,或者以[SWAP]表示挂载点。



