lvm是什么
逻辑卷管理器(Logical Volume Manager)是一个用来管理linux磁盘的工具,它可以轻易的将新加入的硬盘的容量,置于旧的已经满的分区中以此实现扩容
主要用途:
- 动态调整逻辑卷的大小
- 热插拔硬盘(不停机的情况下添加和更换硬盘)
- …
安装
现在所说的lvm都是指lvm2
一般来说包管理器直接安装就行了,有些发行版是自带的
# 在 Debian/Ubuntu 上
sudo apt-get install lvm2
# 在 Red Hat/CentOS 上
sudo yum install lvm2
# 在 Fedora 上
sudo dnf install lvm2
基本命令
传统的磁盘分区系统,以磁盘
和分区
管理磁盘
而lvm以物理卷
,卷组
和逻辑卷
管理磁盘
可以在磁盘上直接使用lvm,但一般在系统建立分区之后再在这些分区上建立lvm逻辑卷
/boot
分区不能位于逻辑卷组,因为引导程序无法读取lvm
名词 | 解释 |
---|---|
物理卷(Physical Volume,PV) | lvm管理的基本单位 |
卷组(Volume Group,VG) | 卷组是由一个或多个物理卷组成的组合 |
逻辑卷(Logical Volume,LV) | 逻辑卷是从卷组中分配出来的存储空间 |
一个物理卷只能属于一个卷组,一个卷组内有多个逻辑卷,相同卷组的逻辑卷的容量可以随意移动分配
pv
pv可以是
- 整个硬盘(/dev/sda)
- 一个硬盘分区(/dev/sda1)
- 一个RAID阵列
查看pv
粗略查看:
pvs
详细查看:
pvdisplay
创建pv
将整个硬盘设置为物理卷:
sudo pvcreate /dev/sda
将某个硬盘分区设置为物理卷:
sudo pvcreate /dev/sda1
将 RAID 设备设置为物理卷:
sudo pvcreate /dev/md0
vg
将多个物理卷组合在一起,形成卷组。卷组的可用空间可以轻易的灵活的分配给不同的逻辑卷
- 创建卷组:可以使用vgcreate命令将一个或多个物理卷加入一个卷组
- 扩展卷组:可以使用vgextend命令向现有卷组中添加更多的物理卷
查看vg
粗略查看:
vgs
详细查看:
vgdisplay
创建vg
# 创建vg
sudo vgcreate my_volume_group /dev/sda1 ...[更多物理卷]
# 扩展vg
sudo vgextend my_volume_group /dev/sdc1
lv
逻辑卷可以看作是传统分区(sda1,sda2这种)的替代品
可以做到:
- 灵活调整大小
- 创建逻辑卷的快照,用于备份和恢复
- RAID阵列支持
查看lv
粗略查看:
lvs
详细查看:
lvdisplay
创建lv
sudo lvcreate -n my_logical_volume -L 10G my_volume_group
扩展lv
sudo lvextend -L +5G /dev/my_volume_group/my_logical_volume
缩减lv大小
sudo lvreduce -L -5G /dev/my_volume_group/my_logical_volume
删除lv
sudo lvremove /dev/my_volume_group/my_logical_volume
显示lv
sudo lvdisplay /dev/my_volume_group/my_logical_volume
实践:对ao/root逻辑卷进行扩容
/dev/ao/home
和/dev/mapper/ao-home
实际上是同一个逻辑卷的不同表示方式1,所以后文两种表达方式可能会相互替换。
先查看系统,发现有一个卷组ao
,底下有两个逻辑卷ao-root
和ao-home
,分别对应着系统里的/
和/home
目录,ao-root
即将爆满,目标是给ao-root
扩容
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
home ao -wi-ao---- 144.15g
root ao -wi-ao---- < 70.00g
swap ao -wi-ao---- 7.83g
1 确定lv的大小
lvs
2 检查文件系统的大小
df -h
3 查看文件系统类型
blkid
根据文件系统的不同,缩减的命令不一样,例如ext4可以用resize2fs
,xfs需要用xfs_growfs
,而本次示例就是xfs
ext4的扩容相对简单,而本文所讲的xfs麻烦一些,它不支持在线缩减,故需要删除逻辑卷后再重新创建
要减少逻辑卷/dev/ao/home
的容量,一般是备份逻辑卷后删除逻辑卷,然后重新创建新的小一点的逻辑卷,并挂载后,随后将卷组的余量分配到/dev/ao/root
中,再恢复数据
4 备份数据
重要的文件需要进行备份(注意,如果有正在运行的程序需要停止)
tar --exclude='*.symlink' -cvf /备份压缩包.tar /需要备份的文件夹
5 删除逻辑卷home
sudo lvremove /dev/ao/home
6 创建逻辑卷home
在ao卷组中创建70G大小的逻辑卷home
sudo lvcreate -n home -L 70G ao
新的逻辑卷需要重新创建文件系统:
sudo mkfs.xfs /dev/ao/home
7 挂载逻辑卷
编辑/etc/fstab
vim /etc/fstab
这个编辑不一定需要
/etc/fstab
是一个配置文件,用于定义系统启动时需要挂载的文件系统和设备。我是扩容,且创建的lv和原来的容器卷同名,挂载的地方也相同,所以可以不改
然后挂载
mount /dev/ao/home /home
# sudo mount /home # 也可以,作用是直接根据/etc/fstab的配置挂载/home
我在实践时这里发生了报错:
[root@localhost /]# sudo mount /home mount: /home: wrong fs type, bad option, bad superblock on /dev/mapper/ao-home, missing codepage or helper program, or other error. mount: (hint) your fstab has been modified, but systemd still uses the old version; use 'systemctl daemon-reload' to reload.
所以之后是需要执行
sudo systemctl daemon-reload
的
查看 df -h
信息,看看是否挂载成功
8 分配卷组余量
将剩下的容器卷的所有空余分配给 /dev/ao/root
扩容
sudo lvextend -l +100%FREE /dev/ao/root
将 /dev/ao/root
扩容到100G
sudo lvextend -L 50G /dev/ao/root
将 /dev/ao/root
在原有基础上扩容100G
sudo lvextend -L +10G /dev/ao/root
当逻辑卷增大后,需要用 xfs_growfs
扩大xfs文件系统
sudo xfs_growfs /dev/ao/root
最后,用 vgdisplay ao
查看卷组信息,并用 df -h
查看信息,查看是否正常
9 恢复数据
恢复原来被删除的卷中的数据
tar -xvf 备份压缩包.tar -C 要恢复到的目标文件夹
参考链接:
Footnotes
-
/dev
是虚拟文件目录,用于存储设备文件,/dev/ao/home
是传统的lvm表达方式,/dev/mapper/ao-home
是逻辑卷的设备映射路径,lvm会默认的纳入设备管理器管理(设备管理器就是lvm的组成部分)。/dev/mapper/
就是设备管理器的目录,它还可以管理快照,RAID设备等 ↩