卷管理
创建逻辑卷时一定要创建分区。在Linux中,LVM(逻辑卷管理器)是一种对磁盘分区进行管理的逻辑机制,它建立在硬盘和分区之上,文件系统之下的一逻辑层。在创建逻辑卷之前,需要先创建分区,并将分区转换为物理卷,然后将多个物理卷组合成卷组,最后在卷组上创建逻辑卷。因此,创建逻辑卷时需要创建分区。
逻辑卷
是一种将一个或多个硬盘的分区在逻辑上集合,当成一个大硬盘来使用,当硬盘的空间不足时,可以将其他盘的分区加入其中,实现动态扩容,对磁盘空间进行动态管理
PV 物理卷(linux系统中的分区通过命令转换而成)
VG 卷组,建立在PV上,可以划分多个PV (多个磁盘分区组合在一起)
LV 逻辑卷,建立在VG之上,是一个动态改变大小的分区 (分区)
PE 物理区域,PE的大小为4MB,如同block的作用,是LVM最小的寻址单位
LVM扩容原理
通过交换PE的方式,达到弹性变更文件系统大小
将PE添加的LV逻辑卷,就可以扩容LV容量
剔除原有的PE,LV逻辑卷的容量会变小
默认PE大小是4M,LVM最多有65534个PE,所以LVM最大的VG是256G单位
LVM逻辑卷的创建流程
创建物理卷(将磁盘pv化)
pvcreate 设备名
[root@CentOS7 ~]# pvcreate /dev/sdb
Physical volume "/dev/sdb" successfully created.
查看物理逻辑卷
pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb lvm2 --- 20.00g 20.00g
pvscan
PV /dev/sda2 VG centos lvm2 [<19.00 GiB / 0 free]
PV /dev/sdb lvm2 [20.00 GiB]
Total: 2 [<39.00 GiB] / in use: 1 [<19.00 GiB] / in no VG: 1 [20.00 GiB]
pvdisplay
--- Physical volume ---
PV Name /dev/sda2
VG Name centos
PV Size <19.00 GiB / not usable 3.00 MiB
Allocatable yes (but full) //物理卷是否可以分配
PE Size 4.00 MiB //物理extents大小,以字节、KB、MB或GB为单位
Total PE 4863 //物理卷中的总物理extents数量
Free PE 0 //物理卷中空闲的物理extents数量
Allocated PE 4863 //物理卷中已分配的物理extents数量
PV UUID Vf1mkK-6d21-aOgA-fz9S-gJJA-E8XC-TuzxeM
"/dev/sdb" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdb
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID s3xHkf-JF5s-Bese-4aD9-PTre-d1x2-nzueFg
将设备从物理逻辑卷中移除(删除磁盘的pv化)
pvremove 设备名
[root@CentOS7 ~]# pvremove /dev/sdb
Labels on physical volume "/dev/sdb" successfully wiped.
//已成功擦除物理卷“/dev/sdb”上的标签。
创建卷组VG
vgcreate 卷组名 pv化的磁盘
[root@CentOS7 ~]# vgcreate newVG /dev/sdb
Volume group "newVG" successfully created
查看卷组
vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
newVG 1 0 0 wz--n- <20.00g <20.00g
vgscan
Reading volume groups from cache.
Found volume group "centos" using metadata type lvm2
Found volume group "newVG" using metadata type lvm2
vgdisplay
--- Volume group ---
VG Name centos
System ID
Format lvm2 //逻辑卷组的格式
Metadata Areas 1 //逻辑卷组元数据所在的磁盘区域数量
Metadata Sequence No 3 //逻辑卷组元数据序列号。
VG Access read/write //逻辑卷组的访问模式,可以是read/write或read-only
VG Status resizable //逻辑卷组的状态,可以是resizable(可调整大小)、closed(关闭)或partial(部分)
MAX LV 0 //逻辑卷组支持的最大逻辑卷数量
Cur LV 2 //逻辑卷组中当前创建的逻辑卷数量
Open LV 2 //打开的逻辑卷数量
Max PV 0
Cur PV 1
Act PV 1 //激活的物理卷数量
VG Size <19.00 GiB
PE Size 4.00 MiB
Total PE 4863 //逻辑卷组中的总物理extents数量
Alloc PE / Size 4863 / <19.00 GiB//已分配的物理extents数量和其分配的大小
Free PE / Size 0 / 0 //用的物理extents数量和其大小
VG UUID DDSAvL-JaDL-up0S-y2z2-j2H6-7I9d-yidNIc
--- Volume group ---
VG Name newVG
System ID
Format lvm2
Metadata Areas 1
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 1
Act PV 1
VG Size <20.00 GiB
PE Size 4.00 MiB
Total PE 5119
Alloc PE / Size 0 / 0
Free PE / Size 5119 / <20.00 GiB
VG UUID xkFZ9U-DuRG-5P4p-lxQ2-oGel-2pOS-Pyfn1t
删除卷组
vgremove 卷组名
[root@CentOS7 ~]# vgremove newVG
Volume group "newVG" successfully removed
创建lv逻辑卷
lvcrate -n 创建的lv逻辑卷名 -l 逻辑卷容量 vg卷组名
-L 直接指定容量 vg卷组名
[root@CentOS7 ~]# lvcreate -n newLV -L 10G newVG
Logical volume "newLV" created.
查看逻辑卷
Lvs
[root@CentOS7 ~]# lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
newLV newVG -wi-a----- 10.00g
lvscan
[root@CentOS7 ~]# lvscan
ACTIVE '/dev/newVG/newLV' [10.00 GiB] inherit
ACTIVE '/dev/centos/swap' [2.00 GiB] inherit
ACTIVE '/dev/centos/root' [<17.00 GiB] inherit
lvdisply
--- Logical volume ---
LV Path /dev/newVG/newLV
LV Name newLV
VG Name newVG
LV UUID JPMrvl-Tz49-A9cy-iUw3-5X2Z-gNWQ-tEhX2d
LV Write Access read/write //指定逻辑卷的写入权限
LV Creation host, time CentOS7, 2023-06-22 16:50:46 +0800 //显示逻辑卷创建的时间和主机名
LV Status available //指定逻辑卷的状态,即 available(可用)
# open 0 //指定当前打开的进程数
LV Size 10.00 GiB
Current LE 2560 //定逻辑卷当前使用的 LE(条带单位)
Segments 1 //指定逻辑卷使用的条带数量
Allocation inherit //指定逻辑卷的分配方式
Read ahead sectors auto //指定逻辑卷预读的扇区数
- currently set to 256 //表示当前设置的预读扇区数为 256。在逻辑卷管理中,预读扇区数可以用于优化读取性能,提高文件系统的读写效率
Block device 253:2 //指定逻辑卷对应的块设备号
--- Logical volume ---
LV Path /dev/centos/swap
LV Name swap
VG Name centos
LV UUID L4KdX4-YAxJ-u20J-h0yU-FPWL-su9n-w2wYKd
LV Write Access read/write
LV Creation host, time centos7, 2022-12-11 20:26:26 +0800
LV Status available
# open 2
LV Size 2.00 GiB
Current LE 512
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:1
--- Logical volume ---
LV Path /dev/centos/root
LV Name root
VG Name centos
LV UUID otxBD9-q2y0-tc03-3DrV-1Ldh-nrgw-ZoKfeX
LV Write Access read/write
LV Creation host, time centos7, 2022-12-11 20:26:27 +0800
LV Status available
# open 1
LV Size <17.00 GiB
Current LE 4351
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:0
删除逻辑卷
lvremove 逻辑卷名(绝对路径)
[root@CentOS7 ~]# lvremove /dev/newVG/newLV
Do you really want to remove active logical volume newVG/newLV? [y/n]: y
Logical volume "newLV" successfully removed
格式化文件系统
[root@CentOS7 ~]# mkfs.xfs /dev/newVG/newLV
挂载
[root@CentOS7 ~]# mount /dev/newVG/newLV /mnt/LV/
[root@CentOS7 ~]# df
/dev/mapper/newVG-newLV 10475520 32992 10442528 1% /mnt/LV
查看文件系统信息
xfs类型文件系统 xfs_info命令 挂载点或逻辑卷路径
ext4类型文件系统 dumpe2fs命令 逻辑卷路径
[root@CentOS7 ~]# xfs_info /dev/newVG/newLV
[root@CentOS7 ~]# dumpe2fs /dev/newVG/newLV
dumpe2fs 1.42.9 (28-Dec-2013)
Filesystem volume name: <none> //文件系统卷标,可以用于区分不同的文件系统
Last mounted on: <not available>
Filesystem UUID: 9c049d3a-8fa1-4ed2-acd5-e749add3f85b
Filesystem magic number: 0xEF53 //文件系统上一次挂载的时间和地点 //文件系统的魔数,用于标识文件系统的类型。对于 e2fs 文件系统来说,魔数为 0xEF53
Filesystem revision #: 1 (dynamic) //文件系统的版本号
Filesystem features: has_journal ext_attr resize_inode dir_index filetype extent 64bit flex
_bg sparse_super large_file huge_file uninit_bg dir_nlink extra_isize //文件系统的特征,包括 ext4 文件系统的各种特性和元数据
Filesystem flags: signed_directory_hash //文件系统的标志,用于表示文件系统的各种状态和属性
Default mount options: user_xattr acl //默认挂载选项,用于指定文件系统挂载时的各种选项,如读写权限等
Filesystem state: clean //文件系统的状态,如是否已经挂载、是否已经检查过等
Errors behavior: Continue //错误行为,用于指定文件系统出现错误时的处理方式
Filesystem OS type: Linux //文件系统所在的操作系统类型
Inode count: 655360 //文件系统的 inode 数量,用于表示文件系统中唯一标识每个文件和目录的索引节点数量
Block count: 2621440 //文件系统的块数,用于表示文件系统中存储数据和元数据的块的数量
Reserved block count: 131072 //预留给管理员使用的块的数量,可以用于指定文件系统在不同情况下的预留块数
Free blocks: 2538303 //文件系统中空闲块的数量,可以用于存储新文件或目录等
Free inodes: 655349 //文件系统中空闲 inode 的数量,可以用于存储新文件或目录等
First block: 0 //文件系统的第一个数据块的块号
Block size: 4096 //文件系统的块大小,可以用于指定文件系统中每个数据块的大小
Fragment size: 4096 //文件系统的片段大小,可以用于指定文件系统中每个数据片段的大小
Group descriptor size: 64 //文件系统的组描述符大小,用于表示每个数据块组的信息
Reserved GDT blocks: 1024 //预留给管理员使用的组描述符表(GDT)块的数量
Blocks per group: 32768 //每个数据块组中数据块的数量
Fragments per group: 32768 //每个数据块组中片段的数量
Inodes per group: 8192 //每个数据块组中 inode 的数量
Inode blocks per group: 512 //每个数据块组中存储 inode 的块的数量
Flex block group size: 16 //柔性块组大小,用于表示文件系统中每个柔性块组的大小
Filesystem created: Thu Jun 22 18:18:48 2023 //文件系统的创建时间
Last mount time: n/a //文件系统上一次挂载的时间
Last write time: Thu Jun 22 18:18:49 2023 //文件系统上一次写入的时间
Mount count: 0 //文件系统已经被挂载的次数
Maximum mount count: -1 //文件系统可以被挂载的最大次数,达到最大次数后,文件系统将无法再被挂载
Last checked: Thu Jun 22 18:18:48 2023 //文件系统上一次检查的时间
Check interval: 0 (<none>) //文件系统检查的间隔时间,用于指定文件系统检查的频率
Lifetime writes: 132 MB //文件系统被写入的总量,可以用于统计文件系统的使用寿命
Reserved blocks uid: 0 (user root) //预留给管理员使用的块的 uid(用户 id)
Reserved blocks gid: 0 (group root) //预留给管理员使用的块的 gid(组 id)
First inode: 11 //文件系统中第一个 inode 的编号,可以用于标识文件系统中第一个 inode
Inode size: 256 //文件系统中每个 inode 的大小,可以用于指定文件系统中每个 inode 存储的数据和元数据的数量
Required extra isize: 28 //文件系统中每个目录条目所需的额外字节数,可以用于指定文件系统中每个目录条目所需的额外空间大小
Desired extra isize: 28 //文件系统中每个目录条目期望的额外字节数,可以用于指定文件系统中每个目录条目期望的额外空间大小
Journal inode: 8 //文件系统中的日志 inode 编号,可以用于存储文件系统的日志信息
Default directory hash: half_md4 //默认目录哈希函数,用于将目录条目映射到文件系统中
Directory Hash Seed: d240ab70-88b6-42fe-913b-dd3a6e5ae6f2 //目录哈希种子,用于指定目录哈希函数的种子值
Journal backup: inode blocks //日志备份,可以用于指定文件系统中的日志备份位置和方式
Journal features: (none) //日志特征,用于指定文件系统中日志的功能和特性
日志大小: 128M
Journal length: 32768 //文件系统中的日志大小,可以用于指定文件系统中日志的大小
Journal sequence: 0x00000001 //日志序列号,用于指定文件系统中日志的序列号
Journal start: 0 //日志起始位置,用于指定文件系统中日志的起始位置
卷管理
[root@CentOS7 ~]# vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
newVG 1 1 0 wz--n- <20.00g <10.00g
- VG:表示 LVM 卷组(Volume Group)的名称。
- #PV:表示卷组中物理卷(Physical Volume)的数量。
- #LV:表示卷组中逻辑卷(Logical Volume)的数量。
- #SN:表示卷组中备用序列(Snapshot)的数量。
- Attr:表示卷组的属性,例如: wz--n- 表示该卷组是只读(read-only)的,并且所有逻辑卷都是 striped 模式。
- VSize:表示卷组的总大小。
- VFree:表示卷组中可用的空间大小。
VG 字段的 Attr 属性表示卷组的属性,它由多个字符组成,每个字符表示一个不同的属性。以下是 Attr 字段各个字符的含义:
- -:表示该卷组没有该属性。
- r:表示该卷组是只读的(read-only)。
- w:表示该卷组是可写的(writeable)。
- s:表示该卷组包含了一个或多个快照(snapshots)。
- n:表示该卷组不包含任何逻辑卷(logical volume)。
- S:表示该卷组是一个原始卷(raw volume),即没有经过 LVM 管理的卷。
- z表示该卷组是只读(read-only)的,并且所有逻辑卷都是 striped 模式。
例如,如果 Attr 字段为 "wz--n-",则表示该卷组是可写的,没有快照,不包含逻辑卷,且不是原始卷。
增加卷组的容量
vgextend 卷组名 磁盘名
[root@CentOS7 ~]# vgextend newVG /dev/sdc
Volume group "newVG" successfully extended
扩大逻辑卷的大小
lvextend -L +容量 扩容逻辑卷路径
+号可不写
写+号代表增加多少容量
不写+号,直接指定逻辑卷容量
[root@CentOS7 ~]# lvextend -L +1G /dev/newVG/newLV
Size of logical volume newVG/newLV changed from 10.00 GiB (2560 extents) to 11.00 GiB (2816 extents).
Logical volume newVG/newLV successfully resized.
减小卷组的容量
vgreduce 命令用于从卷组中删除物理卷,从而减小卷组的容量。下面是 vgreduce 命令的使用方法:
- 确认需要删除的物理卷:
在执行 vgreduce 命令之前,需要确定要删除的物理卷。可以使用 pvs 命令查看系统中的所有物理卷,并确认要删除的物理卷的名称和大小。
2. 删除物理卷:
使用 vgreduce 命令删除物理卷。语法如下:
vgreduce [选项] 卷组名 /dev/物理卷名 |
例如,要从名为 "vg2000" 的卷组中删除物理卷 "/dev/sdb2",可以执行以下命令:
vgreduce vg2000 /dev/sdb2 |
- 确认物理卷已删除:
执行 pvs 命令来确认物理卷已从卷组中删除。如果物理卷已成功删除,则不会再显示在 pvs 命令的输出中。
4. 确认卷组容量已减小:
执行 vgs 命令来查看卷组的容量。如果物理卷已成功删除,则卷组的容量将会减小。
减小逻辑卷的大小
lvreduce 命令用于减小逻辑卷的大小。下面是 lvreduce 命令的使用方法:
- 确认需要删除的逻辑卷:
在执行 lvreduce 命令之前,需要确定要删除的逻辑卷。可以使用 lvs 命令查看系统中的所有逻辑卷,并确认要删除的逻辑卷的名称和大小。
2. 删除逻辑卷:
使用 lvreduce 命令删除逻辑卷。语法如下:
lvreduce [选项] 卷组名 /dev/逻辑卷名 |
例如,要从名为 "vg2000" 的卷组中删除逻辑卷 "lv100",可以执行以下命令:
lvreduce vg2000 /dev/mapper/vg2000-lv100 |
- 确认逻辑卷已删除:
执行 lvs 命令来确认逻辑卷已从卷组中删除。如果逻辑卷已成功删除,则不会再显示在 lvs 命令的输出中。
4. 确认逻辑卷大小已减小:
执行 lvdisplay 命令来查看逻辑卷的大小。如果逻辑卷已成功删除,则逻辑卷的大小将会减小。
重读文件系统
扩容后,系统是还没有识别的,需要用命令重读文件系统
xfs文件系统类型使用命令 xfs_growfs 扩容逻辑卷的路径
ext4文件系统类型使用命令 resize2fs 扩容逻辑卷的路径
镜像卷
创建物理卷。
以下命令创建三个物理卷。两个物理卷将用于镜像分支,第三个物理卷将包含镜像日志。
[root@CentOS7 ~]# pvcreate /dev/sdb
[root@CentOS7 ~]# pvcreate /dev/sdc
[root@CentOS7 ~]# pvcreate /dev/sdd
创建卷组
这个示例创建一个卷组 newvg,它由上一步中创建的三个物理卷组成
[root@CentOS7 ~]# vgextend newvg /dev/sdb /dev/sdc /dev/sdd
创建镜像的逻辑卷
[root@CentOS7 ~]# lvcreate --type mirror -l 1000 -m 1 newvg -n mirrorlv /dev/sdc /dev/sdd
查看镜像卷的信息
[root@CentOS7 ~]# lvs newvg/mirrorlv
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
mirrorlv newvg mwi-a-m--- <3.91g [mirrorlv_mlog] 100.00
[root@CentOS7 ~]# lvs -o +seg_pe_ranges --segments
LV VG Attr #Str Type SSize PE Ranges
root centos -wi-ao---- 1 linear <17.00g /dev/sda2:512-4862
swap centos -wi-ao---- 1 linear 2.00g /dev/sda2:0-511
mirrorlv newvg mwi-aom--- 2 mirror <3.91g mirrorlv_mimage_0:0-999 mirrorlv_mimage_1:0-999
测试
[root@CentOS7 mnt]# iostat -d /dev/sdc /dev/sdd /dev/sdb 1
//监测磁盘 I/O 情况
同时往里面写入数据看是否同步
[root@CentOS7 ~]# dd if=/dev/sr0 of=/mnt/a