Linux LVM

您所在的位置:网站首页 xfs_growfs命令无效 Linux LVM

Linux LVM

2023-06-15 19:16| 来源: 网络整理| 查看: 265

目录一、LVM简介二、创建LVM三、扩展LVM四、缩小LVM4.1ext4文件系统缩小4.2xfs文件系统缩小五、 LVM数据迁移六、删除LVM七、LVM快照7.1COW概述7.2创建LVM快照7.3恢复LVM快照7.4管理快照COW空间7.4.1手动增加COW空间7.4.2COW空间自动扩展八、LVM状态信息备份与恢复九、将标准分区转换为逻辑卷

一、LVM简介

LVM的限制:

一块物理硬盘(PV)只能属于一个卷组(VG) 一个VG里的最大逻辑卷(LV)数目是255 每个PV最大PE数目是65536,可在创建VG时通过vgcreate –e 设定 每个VG中最大PV数目是255,可在创建VG时通过vgcreate –p 设定 二、创建LVM 前置条件:添加一块新的磁盘

检查当前系统是否安装了LVM管理工具

[root@mycentos ~]# rpm -qa |grep lvm ## 如果检查没有安装lvm工具,则使用如下命令安装 [root@mycentos ~]# yum -y install lvm2.x86_64

新建分区,分区类型为Linux LVM(8e) 这里需要注意的是,磁盘默认为MBR,建议将磁盘改为GPT格式

[root@mycentos ~]# fdisk /dev/sdb Command (m for help): n Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-20971519, default 2048): ## 直接回车,默认从起始扇区开始 Last sector, +sectors or +size{K,M,G} (2048-20971519, default 20971519): ## 直接回车,默认从结尾扇区结束 Command (m for help): p Command (m for help): t ## t:转换分区格式 Hex code (type L to list all codes): L ## L:展示分区格式代码 Hex code (type L to list all codes): 8e ## 8e:LVM分区格式代码 Command (m for help): p Command (m for help): w

将分区信息读到内核中

[root@mycentos ~]# partprobe /dev/sdb [root@mycentos ~]# partprobe /dev/sdb1

创建PV

[root@mycentos ~]# pvcreate /dev/sdb1 ## 使用pvcreate创建PV,命令后面跟分区类型为8e的分区 [root@mycentos ~]# pvdisplay

创建VG

[root@mycentos ~]# vgcreate vg0 /dev/sdb1 ## vgcreate创建VG,后面跟VG的名称,名称可自定义,最后跟PV [root@mycentos ~]# vgdisplay

创建LV lvcreate命令创建LV,从vg0中创建

-L:指定逻辑卷大小 -n:指定逻辑卷名称 [root@mycentos ~]# lvcreate -L 5G -n data vg0 [root@mycentos ~]# lvdisplay

格式化LV并指定LV文件系统类型

[root@mycentos ~]# mkfs.xfs /dev/vg0/data

用LV的绝对路径写入fstab并挂载

[root@mycentos ~]# echo "/dev/vg0/data /data xfs defaults 0 0" >> /etc/fstab [root@mycentos ~]# mkdir /data [root@mycentos ~]# mount –a [root@mycentos ~]# df -h Filesystem Size Used Avail Use% Mounted on devtmpfs 980M 0 980M 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/sda2 20G 1.4G 19G 8% / /dev/sr0 4.4G 4.4G 0 100% /mnt/cdrom tmpfs 199M 0 199M 0% /run/user/0 /dev/mapper/vg0-data 5.0G 33M 5.0G 1% /data 三、扩展LVM

当某个分区剩余空间不足的时候,可以进行逻辑卷的拉伸,逻辑卷的拉伸可以在线进行,不用卸载文件系统,不用重启,只要操作得当,一般都是没有风险的。需要注意的是,拉伸逻辑卷的时候,文件系统(df -h里看到的就是文件系统,文件系统有ext4、xfs等,lvdisplay里看到的是逻辑卷)一定要比逻辑卷大,这就好比装水的杯子一定要比水的容量要大,否则逻辑卷会撑爆文件系统!

添加新的磁盘,并分区 分区方法参考第一章的第2步

创建新的PV 如果VG空间足够,则可以直接在LV中拉伸,为了适应更多的场景,本示例从PV开始扩展,需要添加新磁盘

[root@mycentos ~]# pvcreate /dev/sdc1

扩展VG 将新添加的磁盘扩展到vg中,vgextend命令扩展VG空间,后面跟VG名称和PV名称

[root@mycentos ~]# vgextend vg0 /dev/sdc1 [root@mycentos ~]# vgdisplay

扩展LV lvextend扩展LV,此处注意:后面直接跟数字代表加到多少,后面跟“+num” 代表在原有的基础上增加多少

-L:指定逻辑卷大小 -l:指定PE数量;或者跟“+100%FREE”,代表vgdisplay里全部的Free PE [root@mycentos ~]# lvextend -L +5G /dev/vg0/data

格式化并扩展文件系统 注意:此处格式化的只是拉伸部分的空间,LV中原有的数据不会被格式化。xfs文件系统使用此命令拉伸,ext4文件系统使用:resize2fs命令拉伸

[root@mycentos ~]# xfs_growfs /dev/vg0/data [root@mycentos ~]# df -h 四、缩小LVM

当某个分区一开始的时候分的过大,实际情况又没有使用那么多空间,而其他使用的分区空间又不足,又不想新增磁盘或物理机磁盘插槽已满的情况下,可以进行缩小逻辑卷,缩小逻辑卷需要卸载文件系统,并且有一定的风险,如果操作得当,可以将风险降到很小,即使如此,一般情况下,也不建议缩小LVM。

注意:xfs文件系统不支持缩小,如一定要缩小,需安装工具xfsdump

4.1ext4文件系统缩小

卸载挂载分区

[root@mycentos ~]# umount /data/ [root@mycentos ~]# df -h

扫描文件系统 注意:扫描文件系统一定要先卸载分区,否则可能会导致数据丢失!!!此命令在缩小LVM的时候一定不能省略!e2fsck命令扫描文件系统,整理文件系统中非连续的block,并且可以检查文件系统是否有错误,如有错误,则根据提示解决错误后,再进行LVM缩小。

[root@mycentos ~]# e2fsck -f /dev/vg0/data

缩小文件系统 将文件系统缩小成6G

[root@mycentos ~]# resize2fs /dev/vg0/data 6G [root@mycentos ~]# lvdisplay ## 此处LV大小还是15G,因为resize2fs只是缩小了文件系统,逻辑卷并没有缩小

缩小逻辑卷 lvreduce缩小LV,此处注意:后面直接跟数字代表缩小到多少,后面跟“-num ”代表在原有的基础上减少多少

-L:指定逻辑卷大小 -l:指定PE大小 [root@mycentos ~]# lvreduce -L 6G /dev/vg0/data

检查并重新挂载分区

[root@mycentos ~]# lvdisplay ## LV中已经缩成了6G大小 [root@mycentos ~]# mount -a [root@mycentos ~]# df -h ## 重新挂载后,可以看到/data挂载点已经缩小成了6G大小 4.2xfs文件系统缩小

xfs的lvm不能直接在线缩小空间,所以一定注意,xfs文件系统的lvm分区,尽量往小了分,一旦上线就只扩不减!

如果强行用ext4文件系统的lvm缩容方法去缩小空间,会导致出现superblock错误无法挂载!万不得已需要缩小xfs文件系统的lvm分区空间时候,一定要缩小需严格按照以下顺序。

安装xfsdump工具

[root@mycentos ~]# yum -y install xfsdump

目标数据备份。以/data为例 xfsdump -f "dump文件存放的绝对路径加文件名" "需要缩减容量的目录" 比如,注意最后面备份的目录格式是"/data",不能是"/data/"

[root@mycentos ~]# xfsdump -f /opt/data.dump /data please enter label for this dump session (timeout in 300 sec) -> data.dump ## 输入备份数据名称 [root@mycentos ~]# ll /opt/data.dump

卸载挂载分区

[root@mycentos ~]# umount /data

将逻辑卷缩容成6G,是扩大还是缩小它自己会判断

[root@mycentos ~]# lvresize -L 6G /dev/mapper/vg0-data Do you really want to reduce vg0/data? [y/n]: y

格式化以更新到最新大小

[root@mycentos ~]# mkfs.xfs -f /dev/mapper/vg0-data

挂载出来空分区

[root@mycentos ~]# mount /dev/vg0/data/

恢复第2步备份的dump数据

[root@mycentos ~]# xfsrestore -f /opt/data.dump /data 五、 LVM数据迁移

当物理磁盘因为性能或其他的原因需要更换或移除时,可以通过LVM数据迁移技术,将逻辑卷上的数据从旧的磁盘上迁移到新的磁盘上,数据不会丢失,并且可以在线进行,不用卸载文件系统。逻辑卷的迁移不用考虑物理磁盘的厂商或类型,因此解决了通过存储层面迁移数据需要考虑的兼容性问题。

本示例介绍将/dev/sdb1的数据迁移到/dev/sdc1

备份数据 虽然LVM数据迁移可以在线进行,但是为了防止不可控的因素(比如在迁移的过程中突然停电),还是建议在做数据迁移之前,先备份数据。

检查PV状态,确定要移除的PV

[root@mycentos ~]# pvdisplay ##########部分输出省略########## PV Name /dev/sdb1 Total PE 5119 Free PE 3583 Allocated PE 1536 ## 通过pvdisplay可以发现,/dev/sdb1总共有5119个PE,空闲3583个PE,已使用1536个PE ##########部分输出省略##########

迁移数据,将磁盘sdb1上的数据迁移至磁盘sdc1上,并检查pv状态

[root@mycentos ~]# pvmove /dev/sdb1 /dev/sdc1 [root@mycentos ~]# pvdisplay ##########部分输出省略########## PV Name /dev/sdb1 Total PE 5119 Free PE 5119 Allocated PE 0 ## /dev/sdb1上的数据迁移后,通过pvdisplay可以看到 sdb1上已经没有数据 ##########部分输出省略##########

从卷组中移除PV 使用vgreduce命令从VG中移除PV

[root@mycentos ~]# vgdisplay -v ## 通过vgdisplay –v可以看到PV,VG,LV的一个总体的情况,检查要移除的/dev/sdb1目前使用的PE情况,确定是否空闲 [root@mycentos ~]# vgreduce vg0 /dev/sdb1 [root@mycentos ~]# vgdisplay -v ## 此时通过vgdisplay –v查看lvm状态,可以看到VG中已经没有/dev/sdb1了

移除PV

[root@mycentos ~]# pvdisplay ## 可以看到/dev/sdb1当前是未分配状态 [root@mycentos ~]# pvremove /dev/sdb1 ## pvremove命令,在PV中移除/dev/sdb1 [root@mycentos ~]# pvdisplay ## 通过pvdisplay命令可以看到在已经没有/dev/sdb1这个PV了 六、删除LVM

卸载分区

[root@mycentos ~]# umount /data/ [root@mycentos ~]# df -h

删除LV

[root@mycentos ~]# lvremove /dev/vg0/data Do you really want to remove active logical volume data? [y/n]: y

删除VG

[root@mycentos ~]# vgremove vg0

删除PV

[root@mycentos ~]# pvremove /dev/sdc1 七、LVM快照

LVM快照技术可以将LV分区做一个快照,将来如果想要将分区恢复到拍快照时的状态,可以随时恢复,LVM的快照技术应用非常广泛,比如误删除数据了,或者系统升级前可以拍个快照,以免在升级失败的时候,可以快速回滚系统。做快照的时间非常快,几乎是实时的,并且占用空间可以自己定义。使用LVM快照技术需要深入掌握LVM快照技术的原理,否则可能会导致数据丢失!LVM快照使用的是COW(Copy On Write写前拷贝)技术。

7.1COW概述

LVM对LV提供了快照“snapshot”备份功能。LVM的快照使用的是COW(Copy On Write写前拷贝)技术。当一个snapshot创建的时候,仅拷贝原始LV中的inode,并不会拷贝block,即使原始LV中有几百GB数据,创建的快照大小也可以只有几十M甚至几M大小,因为这不是物理上的数据拷贝,因此snapshot的创建特别快。当原始LV中的数据有写入时, COW空间会记保存原始LV发生变化的数据;当原始LV中有新数据覆盖旧数据时,将旧数据拷贝到COW空间里,起到备份数据的作用。以上两点就保证了所有数据和创建备份卷之前的数据一致性。而对于snapshot的读操作,如果是读取数据块是没有修改过的,那么会将读操作直接重定向到原始卷上,如果是要读取已经修改过的块,那么就读取拷贝到snapshot中的块。所以当原始卷破坏了之后还能用snapshot备份的数据还原。

创建snapshot的COW空间大小并不需要和原始卷一样大,其大小需要考虑从snapshot创建到释放这段时间内,估计数据的改变量有多大,数据更新的频率。一旦COW空间记录满了原始卷块变换的信息,那么这个snapshot立刻被释放,从而导致这个snapshot无效,COW空间中的备份数据将丢失。

7.2创建LVM快照

lvcreate命令创建快照

-L:指定快照的COW容量为1G -s:snapshot,不加-s代表创建LV -n:指定快照名称 [root@mycentos ~]# lvcreate -L 1G -s -n data_snap /dev/vg0/data Using default stripesize 64.00 KiB. Logical volume "data_snap" created. [root@mycentos ~]# lvdisplay ##########部分输出省略########## COW-table size 1.00 GiB ## lvdisplay命令可以查看快照的详细信息,此处代表COW空间大小 COW-table LE 256 Allocated to snapshot 0.00% ## COW空间使用百分比 ##########部分输出省略########## [root@mycentos ~]# vgdisplay ##########部分输出省略########## Alloc PE / Size 2816 / 11.00 GiB Free PE / Size 2303 / 9.00 GiB ## vgdisplay可以看到总共20GB的卷组,前面创建逻辑卷用了10G,COW空间用了1G,还剩9G ##########部分输出省略########## 7.3恢复LVM快照

卸载文件系统

[root@mycentos ~]# umount /data/ [root@mycentos ~]# df -h

还原快照

[root@mycentos ~]# lvconvert --merge /dev/vg0/data_snap Merging of volume vg0/data_snap started. app: Merged: 100.00%

重新激活逻辑卷 先取消激活,然后激活

-a:active,活动状态 后面接n代表 no active 后面接y代表active [root@mycentos ~]# lvchange -a n /dev/vg0/app [root@mycentos ~]# lvchange -a y /dev/vg0/app

挂载测试

mount -a df -h 7.4管理快照COW空间 7.4.1手动增加COW空间

手动给data_snap增加2G的的空间,和前面一样,如果不加“+”号,则是加到多少

[root@mycentos ~]# lvdisplay [root@mycentos ~]# lvextend -L +1G /dev/vg0/data_snap [root@mycentos ~]# lvdisplay ## 查看COW-table size可以发现快照已经变成了2G 7.4.2COW空间自动扩展

由于LVM快照使用的是COW技术,创建快照的时候,需要手工指定一个COW空间大小,但是这个COW空间的大小在生产环境中很难预估。COW空间设置过大的话会浪费磁盘空间,设置过小的话又会造成COW空间爆满,导致快照失效,为了解决这一问题,LVM的配置文件中提供了“autoextend(自动扩展)”功能。例如在COW空间达到80%的时候,自动扩展COW空间20%。

配置COW空间自动扩展[root@mycentos ~]# vim /etc/lvm/lvm.conf ##########部分输出省略########## # Configuration optionactivation/snapshot_autoextend_threshold. # Auto-extend a snapshot when its usage exceeds thispercent. # Setting this to 100 disables automatic extension. # The minimum value is 50 (a smaller value is treated as50.) # Also see snapshot_autoextend_percent. # Automatic extension requires dmeventd to be monitoringthe LV. # # Example # Using 70% autoextend threshold and 20% autoextend size,when a 1G # snapshot exceeds 700M, it is extended to 1.2G, and whenit exceeds # 840M, it is extended to 1.44G: # snapshot_autoextend_threshold = 70 # snapshot_autoextend_threshold = 100 ## 将此处设置为70,代表快照空间达到70%的阀值,则触发自动扩展机制。默认参数为100,当此处为100的时候,则关闭自动扩展机制。 # Configuration optionactivation/snapshot_autoextend_percent. # Auto-extending a snapshot adds this percent extra space. # The amount of additional space added to a snapshot isthis # percent of its current size. # # Example # Using 70% autoextend threshold and 20% autoextend size,when a 1G # snapshot exceeds 700M, it is extended to 1.2G, and whenit exceeds # 840M, it is extended to 1.44G: # snapshot_autoextend_percent = 20 # snapshot_autoextend_percent = 20 ## 将此处设置为20,代表一旦触发自动扩展阀值,则按此处设置的20%来扩充%20的COW空间 ##########部分输出省略########## 八、LVM状态信息备份与恢复

LVM提供了恢复功能,由于人为误操作或者文件系统故障,可以通过命令恢复。每做一次LVM命令相关的操作,LVM都会备份操作前的LVM状态,LVM的状态通过配置文件保存在/etc/lvm/archive,可以通过LVM的状态配置文件进行恢复。

列出卷组信息 vgcfgrestore命令可以恢复卷组信息

-l:列出卷组状态信息 vg0:卷组名称 [root@mycentos ~]# vgcfgrestore -l vg0 File: /etc/lvm/archive/vg0_00000-351600058.vg Couldn't find device with uuid 7WVKTx-152W-VmP9-H4Cl-jkpc-iIDa-RrHYUZ. VG name: vg0 Description: Created *before* executing 'vgcreate vg0 /dev/sdb1' Backup Time: Mon May 25 17:41:51 2020 File: /etc/lvm/archive/vg0_00001-1600128515.vg VG name: vg0 Description: Created *before* executing 'lvcreate -L 8G -n data vg0' Backup Time: Mon May 25 17:44:23 2020 File: /etc/lvm/archive/vg0_00002-261533161.vg ## 卷组状态信息保存的位置 VG name: vg0 Description: Created *before* executing 'lvreduce -L 5G /dev/vg0/data' Backup Time: Mon May 25 17:50:21 2020 File: /etc/lvm/backup/vg0 VG name: vg0 Description: Created *after* executing 'lvreduce -L 5G /dev/vg0/data' Backup Time: Mon May 25 17:50:21 2020

通过卷组状态配置文件恢复

[root@mycentos ~]# vgcfgrestore -f /etc/lvm/archive/vg0_00002-261533161.vg vg0 Restored volume group vg0

重新激活卷组状态 通过vgchange命令重新激活卷组状态

-a:active,活动状态 后面接n代表 no active 后面接y代表active [root@mycentos ~]# vgchange -a n vg0 0 logical volume(s) in volume group "vg0" now active [root@mycentos ~]# vgchange -a y vg0 1 logical volume(s) in volume group "vg0" now active 九、将标准分区转换为逻辑卷

如果在分区的时候没有把分区做成逻辑卷,或者需要拉伸或缩小普通分区,或者要做快照进行备份等等场景下,可以通过把普通分区转换成逻辑卷后,再进行拉伸或缩小等操作。

分一个2G的标准分区

[root@mycentos ~]# fdisk /dev/sdc ##########部分输出省略########## Command (m for help): n Select (default p): p Partition number (1-4, default 1): 1 First sector (2048-41943039, default 2048): Using default value 2048 Last sector, +sectors or +size{K,M,G} (2048-41943039, default 41943039): +2G Partition 1 of type Linux and of size 2 GiB is set Command (m for help): w ##########部分输出省略########## [root@mycentos ~]# partprobe /dev/sdc

格式化并挂载到/data

[root@mycentos ~]# mkfs.ext4 /dev/sdc1 [root@mycentos ~]# mount /dev/sdc1 /data/ [root@mycentos ~]# df -h

测试往/data目录下写数据,待会验证逻辑卷中数据是否存在

[root@mycentos ~]# cp /etc/passwd /data/ [root@mycentos ~]# cp -r /etc/ /data/ [root@mycentos ~]# cd /data/ [root@mycentos ~]# ls etc lost+found passwd

卸载挂载点

[root@mycentos ~]# umount /data/ [root@mycentos ~]# df -h

创建逻辑卷 创建的逻辑卷一定要比原文件系统要大,否则dd过来就会把逻辑卷撑爆掉

[root@mycentos ~]# lvcreate -L 4G -n data vg0 ## 注意,此处创建的逻辑卷是4G,比源/data标准分区2G要大

不用格式化逻辑卷,直接用dd命令将普通分区的所有数据d过来 通过dd命令,将原来普通分区上的数据,d到逻辑卷上。注意:此逻辑卷是没有文件系统的,dd命令直接就将原文件系统d到逻辑卷上了

[root@mycentos ~]# dd if=/dev/sdc1 of=/dev/vg0/data [root@mycentos ~]# df -h [root@mycentos ~]# mount /dev/vg0/data /test/ [root@mycentos ~]# df -h /dev/mapper/vg0-data 2.0G 45M 1.8G 3% /test ## 因为d过来的只是2G部分的文件系统,总文件系统是4G,多的2G部分没有文件系统,所以此时看到的只是原来2G的文件系统,而且是逻辑卷的形式

扩展逻辑卷 如果是xfs文件系统则使用xfs_growfs /dev/vg0/data命令

[root@mycentos ~]# resize2fs /dev/vg0/data [root@mycentos ~]# df -h /dev/mapper/vg0-data 3.9G 47M 3.7G 2% /test ## 因为刚刚创建逻辑卷的时候是4G大小,此时只需要拉伸文件系统,逻辑卷就变成4G了

验证数据是否丢失

[root@mycentos ~]# cd /test/ [root@mycentos ~]# ls etc lost+found passwd ## 数据都还在,标准分区转换成逻辑卷成功


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3