Linux-LVM的使用
Linux-LVM的使用
LVM(Logical Volume Manager),即逻辑卷管理,它可以让一个或者多个Linux系统的磁盘(也可以是分区)虚拟称一个组,然后再虚拟出不同的磁盘,这个磁盘可以动态扩容、压缩等操作。
名词解释
下面是使用中经常接触到的三个名词,PE(physical extent)
和LE(logical extent)
在使用中很少遇到,这里不展开叙述。
PV(physical volume):物理卷在逻辑卷管理系统最底层,可以是整个物理硬盘或是分区。
VG(volume group):卷组建立在物理卷上,一卷组中至少要包括一物理卷,卷组建立后可动态的添加卷到卷组中,一个逻辑卷管理系统工程中可有多个卷组。
LV(logical volume):逻辑卷建立在卷组基础上,卷组中未分配空间可用于建立新的逻辑卷,逻辑卷建立后可以动态扩展和缩小空间。
创建流程简述
- 新建一个分区。
- 将分区类型设置为
Linux LVM
,对应的类型为8e
。 - 用
pvcreate
创建PV。 - 用
vgcreate
创建一个卷组。 - 用
lvcreate
在卷组上创建LV - 格式化LV,比如用常见的ext4格式化LV
- 挂载使用。
创建步骤
新建一个分区
root@localhost:~# fdisk /dev/sdc
Welcome to fdisk (util-linux 2.37.2).
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 0xc92ad813.
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): 1
First sector (2048-1048575999, default 2048):
Last sector, +/-sectors or +/-size{K,M,G,T,P} (2048-1048575999, default 1048575999):
Created a new partition 1 of type 'Linux' and of size 500 GiB.
Command (m for help): t
Selected partition 1
Hex code or alias (type L to list all): 8e
Changed type of partition 'Linux' to 'Linux LVM'.
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Syncing disks.
root@localhost:~#
创建PV分区
pvcreate /dev/sdc1
输出:
root@localhost:~# pvcreate /dev/sdc1
Physical volume "/dev/sdc1" successfully created.
PV的其他操作
- pvscan:扫描当前系统上的所有物理卷
- pvdisplay:显示物理卷的属性
- pvremove:将物理卷信息删除,使其不再被视为一个物理卷
创建卷组
vgcreate vgdata /dev/sdc1
其中第一个参数vgdata
自定义,是vg的名字,第二个参数是上面PV所在的分区。
输出:
root@localhost:~# vgcreate vgdata /dev/sdc1
Volume group "vgdata" successfully created
VG的其他操作
- vgscan:查找系统中存在的LVM卷组,并显示找到的卷组列表
- vgdisplay:显示卷组属性
- vgextend:动态扩展LVM卷组,向卷组中添加
PV
来增加卷组的容量 - vgreduce:通过删除LVM卷组中的
PV
来减少卷组容量 - vgremove:删除卷组
- vgchange:常用来设置卷组的活动状态
创建LV
lvcreate -L 500M -n lvdata vgdata
其中,-L
参数指定LV大小,-n参数指定LV名称,最后一个参数是所用VG的名称。
输出:
root@localhost:~# lvcreate -L 500M -n lvdata vgdata
Logical volume "lvdata" created.
其他LV操作
- lvscan:扫描当前系统中的所有逻辑卷,及其对应的设备文件
- lvdisplay:显示逻辑卷属性
- lvextend:可在线扩展逻辑卷空间
- lvreduce:缩减逻辑卷空间
- lvremove:删除逻辑卷
格式化LV
mkfs.ext4 /dev/vgdata/lvdata
其中参数为lvscan
里面显示的设备名称。
输出:
root@localhost:~# mkfs.ext4 /dev/vgdata/lvdata
mke2fs 1.46.5 (30-Dec-2021)
Discarding device blocks: done
Creating filesystem with 128000 4k blocks and 128000 inodes
Filesystem UUID: abbce3dc-yyyy-1111-af91-xxxxxxxxx
Superblock backups stored on blocks:
32768, 98304
Allocating group tables: done
Writing inode tables: done
Creating journal (4096 blocks): done
Writing superblocks and filesystem accounting information: done
扩容LV
# 扩容到600M
lvextend -L 600M /dev/vgdata/lvdata
# 扩容600M,增加600M
lvextend -L +600M /dev/vgdata/lvdata
# 扩容所有PV容量到LV
lvextend -l +100%FREE /dev/vgdata/lvdata
还需要以下操作
resize2fs -p /dev/vgdata/lvdata
输出:
root@localhost:/# resize2fs -p /dev/vgdata/lvdata
resize2fs 1.46.5 (30-Dec-2021)
Filesystem at /dev/vgdata/lvdata is mounted on /data; on-line resizing required
old_desc_blocks = 1, new_desc_blocks = 63
The filesystem on /dev/vgdata/lvdata is now 131070976 (4k) blocks long.
这时候用df -h
查看,扩容生效。
开机自动挂载
vim /etc/fstab
增加以下行,其中第一个参数为你的lv名称(用lvscan
查看),/data
修改为你要挂载的路径。
/dev/vgdata/lvdata /data ext4 defaults 0 0
【务必操作】 使用以下命令验证是否成功挂载,没有输出为正常。
mount -a
-- Write by PercyC
更新于:2023年4月20日
直接扩容分区和LVM
-
运行 growpart 命令扩容分区(1表示第1个分区,2表示第二个分区,以此类推): growpart /dev/sdc 1
-
对 LVM 的 PV,VG,LV 进行扩容: pvs pvresize /dev/sdb1 pvs
vgs lvextend -l +100%free -r /dev/vgdata/lvdata vgs
df -lh resize2fs -p /dev/vgdata/lvdata df -lh
-- Write by PercyC
更新于:2023年6月15日