一、LVM简介
LVM(Logical Volume Manager,逻辑卷管理器)是Linux系统用于对硬盘分区进行管理的一种机制,其创建初衷是为了解决硬盘设备在创建分区后不易修改分区大小的缺陷。尽管对传统的硬盘分区进行强制扩容或缩容从理论上来讲是可行的,但是却可能造成数据的丢失。而LVM技术是在硬盘分区和文件系统之间添加了一个逻辑层,它提供了一个抽象的卷组,可以把多块硬盘进行卷组合并。这样一来,用户不必关心物理硬盘设备的底层架构和布局,就可以实现对硬盘分区的动态调整
二、实验环境
操作平台:VMware Workstation 17 Pro
虚机操作系统:RokcyLinux 8.9
三、参考实例
3.1 创建物理卷(PV)
LVM支持使用整块磁盘创建PV,或用分区创建PV
例如使用/dev/sdb磁盘创建PV
[root@localhost ~]# parted /dev/sdb print # 查看磁盘信息
Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 10.7GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
[root@localhost ~]# pvcreate /dev/sdb # 创建
Physical volume "/dev/sdb" successfully created.
以下三条命令均可查看pv状态
[root@localhost ~]# pvscan
PV /dev/sda2 VG rl lvm2 [
使用磁盘分区创建PV
[root@localhost ~]# fdisk /dev/sdc # 首先对磁盘进行分区
Welcome to fdisk (util-linux 2.32.1).
Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.
Device does not contain a recognized partition table.
Created a new DOS disklabel with disk identifier 0xa6c9a99a.
Command (m for help): n # 创建新分区
Partition type
p primary (0 primary, 0 extended, 4 free)
e extended (container for logical partitions)
Select (default p): p # 创建主分区
Partition number (1-4, default 1): # 分区编号,默认为第一个分区
First sector (2048-20971519, default 2048): # 分区的起始扇区,默认即可,直接回车
Last sector, +sectors or +size{K,M,G,T,P} (2048-20971519, default 20971519): +5G # 分区大小5G
Created a new partition 1 of type 'Linux' and of size 5 GiB.
Command (m for help): t # 更改分区类型
Selected partition 1
Hex code (type L to list all codes): 8e # 选择逻辑卷类型,对应编号为8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): p # 打印分区信息
Disk /dev/sdc: 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
Disklabel type: dos
Disk identifier: 0xa6c9a99a
Device Boot Start End Sectors Size Id Type
/dev/sdc1 2048 10487807 10485760 5G 8e Linux LVM
Command (m for help): w # 保存分区表
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
[root@localhost ~]# pvcreate /dev/sdc1 # 创建
Physical volume "/dev/sdc1" successfully created.
[root@localhost ~]# pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 rl lvm2 a--
3.2 创建卷组(VG)
例如:使用物理卷“/dev/sdb”创建一个名为“vgtest”的卷组
[root@localhost ~]# vgcreate vgtest /dev/sdb
Volume group "vgtest" successfully created
以下命令均可查看VG的状态
[root@localhost ~]# vgscan
Found volume group "vgtest" using metadata type lvm2
Found volume group "rl" using metadata type lvm2
[root@localhost ~]# vgs
VG #PV #LV #SN Attr VSize VFree
rl 1 2 0 wz--n-
也可以在创建卷组时指定PE的大小,使用“-s”参数指定,单位是“M”
[root@localhost ~]# vgcreate -s 2M vgtest1 /dev/sdc1
Volume group "vgtest1" successfully created
[root@localhost ~]# pvdisplay /dev/sdc1
--- Physical volume ---
PV Name /dev/sdc1
VG Name vgtest1
PV Size 5.00 GiB / not usable 2.00 MiB
Allocatable yes
PE Size 2.00 MiB # PE大小为2
Total PE 2559
Free PE 2559
Allocated PE 0
PV UUID K3MapS-m1yx-1E5p-pSjw-OTLB-OdMI-hPNCMe
可以使用多个PV来创建卷组,这样创建出来的VG容量就是多个PV的总和
[root@localhost ~]# pvcreate /dev/sdd
Physical volume "/dev/sdd" successfully created.
[root@localhost ~]# pvcreate /dev/sde
Physical volume "/dev/sde" successfully created.
[root@localhost ~]#
[root@localhost ~]# vgcreate vgtest2 /dev/sdd /dev/sde
Volume group "vgtest2" successfully created
[root@localhost ~]# vgdisplay vgtest2
--- Volume group ---
VG Name vgtest2
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
VG UUID jI8V7c-A4Pa-W2GU-cGc4-kglH-IYii-TNfFRp
3.3 创建逻辑卷(LV)
使用卷组“vgtest”来创建逻辑卷,名为“lvtest”,将“vgtest”的所有空间分配给“lvtest”
[root@localhost ~]# lvcreate -l 100%FREE vgtest -n lvtest
Logical volume "lvtest" created.
以下命令均可查看逻辑卷状态
[root@localhost ~]# lvscan
ACTIVE '/dev/vgtest/lvtest' [
可以在创建逻辑卷时指定其容量
[root@localhost ~]# lvcreate -L 3G vgtest1 -n lvtest1 # 指定LV容量为3G
Logical volume "lvtest1" created.
[root@localhost ~]# lvdisplay vgtest1/lvtest1
--- Logical volume ---
LV Path /dev/vgtest1/lvtest1
LV Name lvtest1
VG Name vgtest1
LV UUID ltVLNf-oyj0-25Ct-MVmx-VyeC-6y03-9LZdFV
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-30 22:17:13 +0800
LV Status available
# open 0
LV Size 3.00 GiB # LV容量为3GiB
Current LE 1536
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:3
也可以在创建逻辑卷时指定为其分配的PE个数,例如,我想为创建的LV分配容量800M的容量,默认PE大小为4M,则为200个PE
[root@localhost ~]# vgdisplay vgtest2
--- Volume group ---
VG Name vgtest2
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 1
VG Access read/write
VG Status resizable
MAX LV 0
Cur LV 0
Open LV 0
Max PV 0
Cur PV 2
Act PV 2
VG Size 19.99 GiB
PE Size 4.00 MiB # PE大小为4MiB
Total PE 5118
Alloc PE / Size 0 / 0
Free PE / Size 5118 / 19.99 GiB
[root@localhost ~]# lvcreate -l 200 vgtest2 -n lvtest2
Logical volume "lvtest2" created.
[root@localhost ~]# lvdisplay vgtest2/lvtest2
--- Logical volume ---
LV Path /dev/vgtest2/lvtest2
LV Name lvtest2
VG Name vgtest2
LV UUID rdYOR3-ETaO-Lc33-L0Si-ke3a-J3dV-qRTuGs
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-30 22:23:07 +0800
LV Status available
# open 0
LV Size 800.00 MiB # LV容量为800MiB
Current LE 200 # 分配到的PE个数为200
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
3.4 逻辑卷扩容
例如,如果我想对逻辑卷“lvtest2”进行扩容,增加200M容量
[root@localhost ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root rl -wi-ao---- 45.08g
swap rl -wi-ao---- 3.91g
lvtest vgtest -wi-a-----
也可以指定增加的PE个数来对逻辑卷进行扩容
[root@localhost ~]# lvextend -l +25 vgtest2/lvtest2
Size of logical volume vgtest2/lvtest2 changed from 1000.00 MiB (250 extents) to 1.07 GiB (275 extents).
Logical volume vgtest2/lvtest2 successfully resized.
[root@localhost ~]# lvdisplay vgtest2/lvtest2
--- Logical volume ---
LV Path /dev/vgtest2/lvtest2
LV Name lvtest2
VG Name vgtest2
LV UUID rdYOR3-ETaO-Lc33-L0Si-ke3a-J3dV-qRTuGs
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-30 22:23:07 +0800
LV Status available
# open 0
LV Size 1.07 GiB # 容量增长为1.07
Current LE 275 # 增加了25个PE
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
或者将VG的空闲容量全部分配给LV
[root@localhost ~]# lvextend -l +100%FREE vgtest2/lvtest2
Size of logical volume vgtest2/lvtest2 changed from 1.07 GiB (275 extents) to 19.99 GiB (5118 extents).
Logical volume vgtest2/lvtest2 successfully resized.
[root@localhost ~]# lvdisplay vgtest2/lvtest2
--- Logical volume ---
LV Path /dev/vgtest2/lvtest2
LV Name lvtest2
VG Name vgtest2
LV UUID rdYOR3-ETaO-Lc33-L0Si-ke3a-J3dV-qRTuGs
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-12-30 22:23:07 +0800
LV Status available
# open 0
LV Size 服务器托管网19.99 GiB # 容量增长为19.99
Current LE 5118
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:4
将逻辑卷“lvtest2”挂载
[root@localhost ~]# mkfs.xfs /dev/vgtest2/lvtest2 # 创建xfs文件系统
meta-data=/dev/vgtest2/lvtest2 isize=512 agcount=4, agsize=1310208 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=5240832, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@localhost ~]# mkdir /data
[root@localhost ~]# mount /dev/vgtest2/lvtest2 /data # 挂载逻辑卷
[root@localhost ~]# df -Th /data
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vgtest2-lvtest2 xfs 20G 175M 20G 1% /data
如果想要永久挂载,需要在“/etc/fstab”文件中增加一行配置
[root@localhost ~]# blkid /dev/vgtest2/lvtest2 # 查看逻辑卷的UUID,通过UUID的方式挂载
/dev/vgtest2/lvtest2: UUID="544fae3b-7d08-4090-a6a7-aa5bcc4d9be0" BLOCK_SIZE="512" TYPE="xfs"
[root@localhost ~]# vim /etc/fstab
#
# /etc/fstab
# Created by anaconda on Wed Nov 29 15:56:50 2023
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
/dev/mapper/rl-root / xfs defaults 0 0
UUID=9d58ddae-ddae-4a83-8841-4b9863b55ab5 /boot xfs defaults 0 0
/dev/mapper/rl-swap none swap defaults 0 0
UUID="544fae3b-7d08-4090-a6a7-aa5bcc4d9be0" /data xfs defaults 0 0 # 添加这一行
[root@localhost ~]# mount -a # 读取“/etc/fstab”配置文件,挂载文件中定义的设备
现在,假设服务器目录“/data”所涉及的业务量日益增加,而逻辑卷“lvtest2”的空间不足以支撑,需要对它再次进行扩容,我们可以这样做:
因为逻辑卷“lvtest2”关联的卷组是“vgtest2”,而“vgtest2”的所有容量已分配给了“lvtest2”,我们需要先对“vgtest2”进行扩容
新增一些scsi磁盘,如果希望在不重启的情况下让系统识别到新增的硬盘,可以这样做
[root@localhost ~]# ls /sys/class/scsi_host/
host0 host1 host2
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host0/scan # 有多少个目录就对应执行多个目录的命令
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host1/scan
[root@localhost ~]# echo "- - -" > /sys/class/scsi_host/host2/scan
[root@localhost ~]# ls /sys/class/scsi_device/
1:0:0:0 2:0:0:0 2:0:1:0 2:0:10:0 2:0:2:0 2:0:3:0 2:0:4:0 2:0:5:0 2:0:6:0 2:0:8:0 2:0:9:0
[root@localhost ~]# echo 1 > /sys/class/scsi_device/1:0:0:0/device/rescan # 有多少个目录就对应执行多个目录的命令
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:0:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:1:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:10:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:2:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:3:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:4:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:5:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:6:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:8:0/device/rescan
[root@localhost ~]# echo 1 > /sys/class/scsi_device/2:0:9:0/device/rescan
[root@localhost ~]# lsblk # 重新扫描后,就可以看到新增的块设备了
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 50G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 49G 0 part
├─rl-root 253:0 0 45.1G 0 lvm /
└─rl-swap 253:1 0 3.9G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─vgtest-lvtest 253:2 0 10G 0 lvm
sdc 8:32 0 10G 0 disk
└─sdc1 8:33 0 5G 0 part
└─vgtest1-lvtest1 253:3 0 3G 0 lvm
sdd 8:48 0 10G 0 disk
└─vgtest2-lvtest2 253:4 0 20G 0 lvm /data
sde 8:64 0 10G 0 disk
└─vgtest2-lvtest2 253:4 0 20G 0 lvm /data
sdf 8:80 0 10G 0 disk
sdg 8:96 0 10G 0 disk
sdh 8:112 0 10G 0 disk
sdi 8:128 0 10G 0 disk
sdj 8:144 0 10G 0 disk
sr0 11:0 1 1024M 0 rom
首先,我们使用“/dev/sdf”这块磁盘创建PV,用于“vgtest2”的扩容
[root@localhost ~]# pvcreate /dev/sdf
Physical volume "/dev/sdf" successfully created.
[root@localhost ~]# vgextend vgtest2 /dev/sdf
Volume group "vgtest2" successfully extended
[root@localhost ~]# vgs vgtest2
VG #PV #LV #SN Attr VSize VFree
vgtest2 3 1 0 wz--n-
然后,对逻辑卷“lvtest2”扩容,将空闲容量全部分配给它
[root@localhost ~]# lvextend -l +100%FREE vgtest2/lvtest2
Size of logical volume vgtest2/lvtest2 changed from 19.99 GiB (5118 extents) to
虽然逻辑卷“lvtest2”的容量已扩容至30G,但是挂载的目录仍显示可用容量为20G
[root@localhost ~]# lvs vgtest2/lvtest2
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
lvtest2 vgtest2 -wi-ao----
需要对文件系统进行扩容,ext类型的文件系统的扩容命令是“resize2fs”,xfs类型的文件系统扩容命令是xfs_growfs
[root@localhost ~]# xfs_growfs /dev/vgtest2/lvtest2
meta-data=/dev/mapper/vgtest2-lvtest2 isize=512 agcount=4, agsize=1310208 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 服务器托管网 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=0 inobtcount=0
data = bsize=4096 blocks=5240832, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
data blocks changed from 5240832 to 7861248
[root@localhost ~]# df -Th /data
Filesystem Type Size Used Avail Use% Mounted on
/dev/mapper/vgtest2-lvtest2 xfs 30G 247M 30G 1% /data # 容量扩容至30G了
或者,我们可以在扩容逻辑卷的同时,一并把文件系统扩容,只需要在lvextend命令后面加上一个“-r”参数
对“lvtest2”再次进行扩容
[root@localhost ~]# pvcreate /dev/sdg # 创建PV
Physical volume "/dev/sdg" successfully created.
[root@localhost ~]# vgextend vgtest2 /dev/sdg # 扩容VG
Volume group "vgtest2" successfully extended
[root@localhost ~]# lvextend -L +5G -r vgtest2/lvtest2 # 扩容LV,增加5G容量,同时扩容文件系统
Size of logical volume vgtest2/lvtest2 changed from
参阅
LVM – ArchWiki
第7章 使用RAID与LVM磁盘阵列技术 | 《Linux就该这么学》
7.3.4 【Linux】文件系统检验_xfs文件系统检查-CSDN博客
不重启Linux系统重新扫描新增磁盘_linux重新扫描磁盘命令-CSDN博客
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
简而言之: 我们需要更好的方法来评估文生图模型中的偏见 介绍 文本到图像 (TTI) 生成 现在非常流行,成千上万的 TTI 模型被上传到 Hugging Face Hub。每种模态都可能受到不同来源的偏见影响,这就引出了一个问题: 我们如何发现这些模型中的偏…