LVM简介
什么是LVM
LVM全称:Logical Volume Manager,中文名为逻辑卷管理,是Linux环境下对磁盘分区进行管理的一种机制。
LVM是建立在硬盘和分区之上的一个逻辑层,可用来提高磁盘分区管理的灵活性。
LVM的名词
**PV(physical volume):**物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区。它只是在物理分区中划出了一个特殊的区域,用于记载与LVM相关的管理参数。
**VG(volume group):**卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
**LV(logical volume):**逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
**PE(physical extent):**物理区域是物理卷中可用于分配的最小存储单元,物理区域大小在建立卷组时指定,一旦确定不能更改,同一卷组所有物理卷的物理区域大小需一致,新的PV加入到vg后,pe的大小自动更改为vg中定义的pe大小。
**LE(logical extent):**逻辑区域是逻辑卷中可用于分配的最小存储单元,逻辑区域的大小取决于逻辑卷所在卷组中的物理区域的大小。
LVM工作原理
LVM在每个物理卷头部都维护了一个metadata,每个metadata中都包含了整个VG(volume group:卷组)的信息,包括每个VG的布局配置,PV(physical volume:物理卷)的编号,LV(logical volume:逻辑卷)的编号,以及每个PE(physical extends:物理扩展单元)到LE(logical extends:物理扩展单元)的映射关系。同一个VG中的每个PV头部的信息都是相同的,这样有利于故障时进行数据恢复。
LVM对上层文件系统提供LV层,隐藏了操作细节。对文件系统而言,对LV的操作与原先对partition的操作没有差别。当对LV进行写入操作的时候,LVM定位相应的LE,通过PV头部的映射表将数据写入到相应的PE上。LVM实现的关LVM最大的特点就是可以对磁盘进行动态管理。因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据。我们如果新增加了硬盘,其也不会改变现有上层的逻辑卷。键在于PE和LE之间建立映射关系,不同的映射规则决定了不同的LVM存储模型。LVM支持多个PV 的stripe和mirror。
LVM最大的特点就是可以对磁盘进行动态管理,因为逻辑卷的大小是可以动态调整的,而且不会丢失现有的数据,如果我们增加了硬盘也不会改变现有的上层逻辑卷。
LVM特点
优点:
- 文件系统可以跨多个磁盘,因此文件系统大小不会受物理磁盘的限制。
- 可以在系统运行的状态下动态的扩展文件系统的大小。
- 可以增加新的磁盘到LVM的存储池中。
- 可以以镜像的方式冗余重要的数据到多个物理磁盘。
- 可以方便的导出整个卷组到另外一台机器。
缺点:
- 在从卷组中移除一个磁盘的时候必须使用reducevg命令(这个命令要求root权限,并且不允许在快照卷组中使用)。
- 当卷组中的一个磁盘损坏时,整个卷组都会受到影响。
- 因为加入了额外的操作,存贮性能受到影响。
LVM架构
LVM安装
yum install lvm2
LVM命令
常用命令
功能 | 物理机管理 | 卷组管理 | 逻辑卷管理 |
---|---|---|---|
扫描 | pvscan | vgscan | lvscan |
创建 | pvcreate | vgcreate | lvcreate |
显示 | pvdisplay | vgdisplay | lvdisplay |
删除 | pvremove | vgremove | lvremove |
扩展 | / | vgextend | lvextend |
缩减 | / | vgreduce | lvreduce |
重命名 | / | vgrename | lvrename |
其他命令
df -T
只可以查看已经挂载的分区和文件系统类型
df -T
Filesystem Type 1K-blocks Used Available Use% Mounted on
devtmpfs devtmpfs 1001888 0 1001888 0% /dev
tmpfs tmpfs 1013948 0 1013948 0% /dev/shm
tmpfs tmpfs 1013948 9720 1004228 1% /run
tmpfs tmpfs 1013948 0 1013948 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 48206852 1887256 46319596 4% /
/dev/sda1 xfs 2086912 140412 1946500 7% /boot
tmpfs tmpfs 202792 0 202792 0% /run/user/0
fdisk -l
可以显示出所有挂载和未挂载的分区,但不显示文件系统类型
fdisk -l
Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 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
Disk label type: dos
Disk identifier: 0x000c4e2e
Device Boot Start End Blocks Id System
/dev/sda1 * 2048 4196351 2097152 83 Linux
/dev/sda2 4196352 104857599 50330624 8e Linux LVM
Disk /dev/sdb: 21.5 GB, 21474836480 bytes, 41943040 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
Disk /dev/sdc: 21.5 GB, 21474836480 bytes, 41943040 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
Disk /dev/mapper/centos-root: 49.4 GB, 49387929600 bytes, 96460800 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
Disk /dev/mapper/centos-swap: 2147 MB, 2147483648 bytes, 4194304 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
parted -l
可以查看未挂载的文件系统类型,以及哪些分区尚未格式化
parted -l
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sda: 53.7GB
Sector size (logical/physical): 512B/512B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
1 1049kB 2149MB 2147MB primary xfs boot
2 2149MB 53.7GB 51.5GB primary lvm
Error: /dev/sdb: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
Error: /dev/sdc: unrecognised disk label
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdc: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: unknown
Disk Flags:
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-swap: 2147MB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 2147MB 2147MB linux-swap(v1)
Model: Linux device-mapper (linear) (dm)
Disk /dev/mapper/centos-root: 49.4GB
Sector size (logical/physical): 512B/512B
Partition Table: loop
Disk Flags:
Number Start End Size File system Flags
1 0.00B 49.4GB 49.4GB xfs
Warning: Unable to open /dev/sr0 read-write (Read-only file system). /dev/sr0
has been opened read-only.
Model: NECVMWar VMware IDE CDR10 (scsi)
Disk /dev/sr0: 4712MB
Sector size (logical/physical): 2048B/2048B
Partition Table: msdos
Disk Flags:
Number Start End Size Type File system Flags
2 4973kB 41.0MB 36.0MB primary
lsblk -f
也可以查看未挂载的文件系统类型
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 38212902-5540-4514-8ec1-5971a40f925c /boot
└─sda2 LVM2_mem ExEuhE-oIw1-x3cm-5NFq-1tV4-00wb-Rbdamq
├─centos-root
xfs 68b61fd1-0248-459d-bc81-97d04df2bf2c /
└─centos-swap
swap a71f384d-d2c4-4d1a-a44c-0f428e9bb030 [SWAP]
sdb LVM2_mem zP80fQ-JPzU-Owva-tr1j-AKHF-RE57-RsiaLl
sdc LVM2_mem IieEcX-5065-Haok-RWSy-pnhQ-yk8O-uG660E
sr0 iso9660 CentOS 7 x86_64
2020-11-04-11-36-43-00
mkfs.xfs
创建xfs文件系统
mkfs.xfs /dev/vg_sdb/lv_sdb
meta-data=/dev/vg_sdb/lv_sdb isize=512 agcount=4, agsize=1304320 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5217280, 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
mkfs.ext4
创建ext4文件系统
mkfs.ext4 /dev/sdc
mke2fs 1.42.9 (28-Dec-2013)
/dev/sdc is entire device, not just one partition!
无论如何也要继续? (y,n) y
文件系统标签=
OS type: Linux
块大小=4096 (log=2)
分块大小=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
1310720 inodes, 5242880 blocks
262144 blocks (5.00%) reserved for the super user
第一个数据块=0
Maximum filesystem blocks=2153775104
160 block groups
32768 blocks per group, 32768 fragments per group
8192 inodes per group
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632, 2654208,
4096000
Allocating group tables: 完成
正在写入inode表: 完成
Creating journal (32768 blocks): 完成
Writing superblocks and filesystem accounting information: 完成
xfs_growfs
xfs文件系统扩容
xfs_growfs /dev/vg_sdb/lv_sdb
meta-data=/dev/mapper/vg_sdb-lv_sdb isize=512 agcount=4, agsize=1304320 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0 spinodes=0
data = bsize=4096 blocks=5217280, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal 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 5217280 to 10460160
resize2fs
ext4文件系统扩容
resize2fs /dev/sdc
resize2fs 1.42.9 (28-Dec-2013)
Filesystem at /dev/sdc is mounted on /root/www; on-line resizing required
old_desc_blocks = 3, new_desc_blocks = 7
The filesystem on /dev/sdc is now 13107200 blocks long.
LVM应用
创建LVM
创建流程
添加磁盘
添加磁盘
查看磁盘信息
fdisk -l
创建PV
创建pv
pvcreate /dev/sdb
查看pv
pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <48.00g 0
/dev/sdb lvm2 --- 20.00g 20.00g
pvdisplay /dev/sdb
"/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 RlZ0ss-3qI2-s0Cm-34LV-Etz8-Ikmn-AhTNyq
创建VG
创建vg
vgcreate vg_sdb /dev/sdb
查看vg
vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <48.00g 0
vg_sdb 1 0 0 wz--n- <20.00g <20.00g
vgdisplay vg_sdb
--- Volume group ---
VG Name vg_sdb
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 26HhHL-qiH1-jkXX-eNXM-ZS2z-aGXt-DViCGv
创建LV
创建lv
lvcreate -L 20G -n lv_sdb vg_sdb
查看lv
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <46.00g
swap centos -wi-ao---- 2.00g
lv_sdb vg_sdb -wi-a----- 19.90g
lvdisplay vg_sdb
--- Logical volume ---
LV Path /dev/vg_sdb/lv_sdb
LV Name lv_sdb
VG Name vg_sdb
LV UUID 5Au4dM-IqMY-RgZp-ZsdO-ndqi-f5rP-CQKwjr
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-04-06 09:56:29 +0800
LV Status available
# open 0
LV Size 19.90 GiB
Current LE 5095
Segments 1
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
挂载磁盘
创建目录
mkdir /www
格式化磁盘
mkfs.xfs /dev/vg_sdb/lv_sdb
meta-data=/dev/vg_sdb/lv_sdb isize=512 agcount=4, agsize=1304320 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5217280, 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
挂载磁盘
mount /dev/vg_sdb/lv_sdb /www/
echo "/dev/vg_sdb/lv_sdb /www/ xfs default 0 0" >> /etc/fstab
删除LVM
删除流程
取消挂载
umount /dev/vg_sdb/lv_sdb
sed -i "s@/dev/vg_sdb/lv_sdb@#/dev/vg_sdb/lv_sdb@g" /etc/fstab
删除LV
查看lv
lvdisplay /dev/vg_sdb/lv_sdb
--- Logical volume ---
LV Path /dev/vg_sdb/lv_sdb
LV Name lv_sdb
VG Name vg_sdb
LV UUID 5Au4dM-IqMY-RgZp-ZsdO-ndqi-f5rP-CQKwjr
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-04-06 09:56:29 +0800
LV Status available
# open 0
LV Size 39.90 GiB
Current LE 10215
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
删除lv
lvremove /dev/vg_sdb/lv_sdb
查看lv
lvs
删除VG
查看vg
vgdisplay vg_sdb
--- Volume group ---
VG Name vg_sdb
System ID
Format lvm2
Metadata Areas 2
Metadata Sequence No 5
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 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 0 / 0
Free PE / Size 10238 / 39.99 GiB
VG UUID 26HhHL-qiH1-jkXX-eNXM-ZS2z-aGXt-DViCGv
删除vg
vgremove vg_sdb
查看vg
vgs
删除PV
查看pv
pvdisplay /dev/sdc
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 1tOtY3-lxYL-GExc-YlxH-gNza-8BZl-9Y1XDh
删除pv
pvremove /dev/sdc
查看pv
pvs
删除磁盘
扩容LVM
扩容流程
添加磁盘
添加磁盘
查看磁盘信息
fdisk -l
创建PV
创建pv
pvcreate /dev/sdc
查看pv
pvs
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <48.00g 0
/dev/sdb vg_sdb lvm2 a-- <20.00g 96.00m
/dev/sdc lvm2 --- 20.00g 20.00g
pvdisplay /dev/sdc
"/dev/sdc" is a new physical volume of "20.00 GiB"
--- NEW Physical volume ---
PV Name /dev/sdc
VG Name
PV Size 20.00 GiB
Allocatable NO
PE Size 0
Total PE 0
Free PE 0
Allocated PE 0
PV UUID 1tOtY3-lxYL-GExc-YlxH-gNza-8BZl-9Y1XDh
扩容VG
扩容vg
vgextend vg_sdb /dev/sdc
查看vg
vgs
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <48.00g 0
vg_sdb 2 1 0 wz--n- 39.99g <20.09g
vgdisplay vg_sdb
--- Volume group ---
VG Name vg_sdb
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 39.99 GiB
PE Size 4.00 MiB
Total PE 10238
Alloc PE / Size 5095 / 19.90 GiB
Free PE / Size 5143 / <20.09 GiB
VG UUID 26HhHL-qiH1-jkXX-eNXM-ZS2z-aGXt-DViCGv
扩容LV
扩容lv
lvextend -L +20G /dev/vg_sdb/lv_sdb
查看lv
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <46.00g
swap centos -wi-ao---- 2.00g
lv_sdb vg_sdb -wi-ao---- 39.90g
lvdisplay /dev/vg_sdb/lv_sdb
--- Logical volume ---
LV Path /dev/vg_sdb/lv_sdb
LV Name lv_sdb
VG Name vg_sdb
LV UUID 5Au4dM-IqMY-RgZp-ZsdO-ndqi-f5rP-CQKwjr
LV Write Access read/write
LV Creation host, time localhost.localdomain, 2023-04-06 09:56:29 +0800
LV Status available
# open 1
LV Size 39.90 GiB
Current LE 10215
Segments 2
Allocation inherit
Read ahead sectors auto
- currently set to 8192
Block device 253:2
扩容磁盘
查看磁盘大小
df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 1.9G 45G 4% /
/dev/sda1 2.0G 138M 1.9G 7% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg_sdb-lv_sdb 20G 33M 20G 1% /www
查看原磁盘文件系统
lsblk -f
NAME FSTYPE LABEL UUID MOUNTPOINT
sda
├─sda1 xfs 38212902-5540-4514-8ec1-5971a40f925c /boot
└─sda2 LVM2_member ExEuhE-oIw1-x3cm-5NFq-1tV4-00wb-Rbdamq
├─centos-root xfs 68b61fd1-0248-459d-bc81-97d04df2bf2c /
└─centos-swap swap a71f384d-d2c4-4d1a-a44c-0f428e9bb030 [SWAP]
sdb LVM2_member RlZ0ss-3qI2-s0Cm-34LV-Etz8-Ikmn-AhTNyq
└─vg_sdb-lv_sdb xfs f9bd84f7-332a-4323-b1c2-597df5ccbba7 /www
sdc LVM2_member 1tOtY3-lxYL-GExc-YlxH-gNza-8BZl-9Y1XDh
└─vg_sdb-lv_sdb xfs f9bd84f7-332a-4323-b1c2-597df5ccbba7 /www
sr0 iso9660 CentOS 7 x86_64 2020-11-04-11-36-43-00
扩容磁盘
xfs_growfs /dev/vg_sdb/lv_sdb
查看磁盘大小
df -h
文件系统 容量 已用 可用 已用% 挂载点
devtmpfs 979M 0 979M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.5M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/mapper/centos-root 46G 1.9G 45G 4% /
/dev/sda1 2.0G 138M 1.9G 7% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/mapper/vg_sdb-lv_sdb 40G 33M 40G 1% /www