扩容LVM卷导致lvm元数据丢失的恢复过程

news2024/11/24 3:11:17

一、问题描述

因某次MySQL binlog占用过高扩容时,是直接对云盘操作,而扩容直接操作了lvm卷而未操作云盘分区,并随后执行了扩容的partprobe,resize2fs卷等操作;最后,显示并未扩容成功,重启系统后,无法进入,包文件系统错误,无法加载,注释后重启,发现LVM信息丢失。
在这里插入图片描述
参考:recover-lvm2-partition、serverfault

二、过程复现及修复

2.1、过程复现

fdisk /dev/mapper/mysql_data-mysql  #执行了d分区操作,主从应该在云盘分区操作
e2fsck -f /dev/mapper/mysql_data-mysql
fuser -m -v -i -k /opt/mysql
umount /dev/mapper/mysql_data-mysql /opt/mysql
resize2fs /dev/mapper/mysql_data-mysql

重启后报错如下:
在这里插入图片描述
注释故障盘后,重启进入系统,执行pvs vgs lvs 发现无之前的相应的PV,VG,LV 信息,至此,lvm信息丢失。因此,必须考虑恢复lvm信息才能进一步恢复数据;实际LVM的元数据信息是会在lvm变动那一刻自动备份的,目录保存在/etc/lvm/目录下,vg在archive目录下,lv在backup下;即LVM 会默认存储用户对 PV/VG/LV 的每一步操作,并自动把当前的 VG 的信息备份到一个文件里面,位置是 /etc/lvm/backup/VG 名或者 /etc/lvm/archive/VG 名。这个文件里面记录的东西大概跟 vgdisplay/pvdisplay/lvdisplay 输出的信息一致,里面也包括了对于恢复 VG 信息至关重要的 PV UUID。综上,我们可以利用这些备份进行进行LVM恢复。

回顾:super block 是硬盘分区开头——开头的第一个byte是byte 0,从 byte 1024开始往后的一部分数据。由于 block size最小是 1024 bytes,所以super block可能是在block 1中(此时block 的大小正好是 1024 bytes),也可能是在block 0中。 超级块中的数据其实就是文件卷的控制信息部分,也可以说它是卷资源表,有关文件卷的大部分信息都保存在这里。例如:硬盘分区中每个block的大小、硬盘分区上一共有多少个block group、以及每个block group中有多少个inode。

2.2、LVM及文件系统修复

#列出在Linux中恢复LVM元数据的备份文件
vgcfgrestore --list mysql_data   #输出如下

 File:		/etc/lvm/archive/mysql_data_00000-369742915.vg
  Couldn't find device with uuid gzdJP8-ltvz-l2Kd-WfJD-335J-NrDd-mhwi7w.
  VG name:    	mysql_data
  Description:	Created *before* executing 'vgcreate mysql_data /dev/sdb1'
  Backup Time:	Thu Jun 16 15:17:40 2022

   
  File:		/etc/lvm/archive/mysql_data_00001-1831552697.vg
  VG name:    	mysql_data
  Description:	Created *before* executing 'lvcreate -n mysql -l 100%VG mysql_data'
  Backup Time:	Thu Jun 16 15:19:52 2022
 
  File:		/etc/lvm/backup/mysql_data
  VG name:    	mysql_data
  Description:	Created *after* executing 'vgs'
  Backup Time:	Mon Oct  2 21:46:48 2023

#查看重启后的sdb1磁盘的UUID,原来的是sdd盘号,对应sdd1,重启后变成了sdb1
pvdisplay /dev/sdb1
  --- Physical volume ---
  PV Name               /dev/sdb1
  VG Name               mysql_data
  PV Size               <1024.00 GiB / not usable <3.97 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              262143
  Free PE               0
  Allocated PE          262143
  PV UUID               gzdJP8-ltvz-l2Kd-WfJD-335J-NrDd-mhwi7w  #这里是更正后,原来的没截图;正常如果这里的ID与原来的不一样,也会导致vg无法识别,从而无法正常加载lvm信息

#备份
dd if=/dev/sdb1 of=/data/sdb1.img
#备份MBR分区表
dd if=/dev/sda of=/path/to/backup bs=512 count=1 skip=1
#恢复分区表,然后输入“x”进入高级模式,在其中选择“e”来编辑分区表,并将备份数据写入主分区表
fdisk /dev/sda

#查看lvm备份信息获取原UUID
less /etc/lvm/backup/mysql_data

#使用原来的 PV UUID 来创建 PV,并使用自动备份的文件来恢复信息。

pvcreate /dev/sdb1 -u gzdJP8-ltvz-l2Kd-WfJD-335J-NrDd-mhwi7w --restorefile /etc/lvm/backup/mysql_data -vv #加--test 参数测试命令执行后再执行,-u=--uuid,-ff参数强制重做

pvdisplay   /dev/sdb1 #严重

#恢复 VG
vgcfgrestore  -f -v /etc/lvm/backup/mysql_data mysql_data  #也可以用--test

#验证
vgs
vgscan
vgchange -ay mysql_data  #激活vg分区

lvs  #验证显示正常

mount /dev/mysql_data/mysql /opt/mysql #报错,无法挂载

#检查文件系统
tune2fs -l /dev/mysql_data/mysql #报错

tune2fs 1.42.9 (28-Dec-2013)
tune2fs: Bad magic number in super-block while trying to open /dev/mysql_data/mysql
Couldn't find valid filesystem superblock.


#检查超级快
dumpe2fs /dev/mysql_data/mysql | grep superblock

dumpe2fs 1.42.9 (28-Dec-2013)
dumpe2fs: Bad magic number in super-block while trying to open /dev/mysql_data/mysql
Couldn't find valid filesystem superblock.

#找不到超级快,使用以下命令查找
mke2fs -n /dev/mysql_data/mysql   #-n参数,表并不会实际执行文件系统操作
mke2fs 1.42.9 (28-Dec-2013)
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
67108864 inodes, 268434432 blocks
13421721 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
8192 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, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848
	
e2fsck -b 32768 /dev/mysql_data/mysql   #尝试用32768超级块,重建超级块,注意该命令有风险,最为最后决断之操作

e2fsck -b 78675968 /dev/mapper/mysql_data-mysql   #如下所示,重建失败
e2fsck 1.42.9 (28-Dec-2013)
e2fsck: Invalid argument while trying to open /dev/mapper/mysql_data-mysql

The superblock could not be read or does not describe a correct ext2
filesystem.  If the device is valid and it really contains an ext2
filesystem (and not swap or ufs or something else), then the superblock
is corrupt, and you might try running e2fsck with an alternate superblock:
    e2fsck -b 8193 <device>

#终极大招
mke2fs -S /dev/mapper/mysql_data-mysql 
mke2fs 1.42.9 (28-Dec-2013)
Discarding device blocks: done                            
Filesystem label=
OS type: Linux
Block size=4096 (log=2)
Fragment size=4096 (log=2)
Stride=0 blocks, Stripe width=0 blocks
67108864 inodes, 268434432 blocks
13421721 blocks (5.00%) reserved for the super user
First data block=0
Maximum filesystem blocks=4294967296
8192 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, 7962624, 11239424, 20480000, 23887872, 71663616, 78675968, 
	102400000, 214990848

Allocating group tables: done                            
Writing superblocks and filesystem accounting information: done     

tune2fs -l /dev/mysql_data/mysql   #验证,检查文件系统
tune2fs 1.42.9 (28-Dec-2013)
Filesystem volume name:   <none>
Last mounted on:          <not available>
Filesystem UUID:          a460879d-a6a7-4f64-9fca-29a6a184d1f1
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
Filesystem features:      ext_attr resize_inode dir_index filetype sparse_super
Filesystem flags:         signed_directory_hash 
Default mount options:    user_xattr acl
Filesystem state:         clean with errors
Errors behavior:          Continue
Filesystem OS type:       Linux
Inode count:              67108864
Block count:              268434432
Reserved block count:     13421721
Free blocks:              264204269
Free inodes:              67108864
First block:              0
Block size:               4096
Fragment size:            4096
Reserved GDT blocks:      960
Blocks per group:         32768
Fragments per group:      32768
Inodes per group:         8192
Inode blocks per group:   512
Filesystem created:       Tue Oct  3 01:42:18 2023
Last mount time:          n/a
Last write time:          Tue Oct  3 01:48:35 2023
Mount count:              0
Maximum mount count:      -1
Last checked:             Tue Oct  3 01:42:18 2023
Check interval:           0 (<none>)
Reserved blocks uid:      0 (user root)
Reserved blocks gid:      0 (group root)
First inode:              11
Inode size:	          256
Required extra isize:     28
Desired extra isize:      28
Default directory hash:   half_md4
Directory Hash Seed:      f55bc2d5-b091-4311-a198-7d7cf9ec8b2d

#修复文件系统
e2fsck -fy /dev/mysql_data/mysql  #结果恢复失败

e2fsck 1.42.9 (28-Dec-2013)
Resize inode not valid.  Recreate? yes

Pass 1: Checking inodes, blocks, and sizes
Root inode is not a directory.  Clear? yes

2.3、主从切换,使用从库

#正常需要先将主库只读

set global read_only=ON;
set global super_read_only=ON;

#从库确认同步状态正常
show slave status\G  #输出如下
Slave_IO_Running,Slave_SQL_Running状态为YES,Seconds_Behind_Master为0

#从库停掉复制进程并清空主从信息

stop slave;
reset slave all;  #提前备份relay-log;或
RESET MASTER;   #清除从服务器上的binlog文件和索引;主服务器有硬件故障,无法清除binlog日志,需要手动备份binlog日志,并复制到另一台服务器上;
RESET SLAVE;    #清除从服务器上的主从状态信息

set global read_only=off;
set global super_read_only=off;

#主库降级未备库,主库上执行

CHANGE MASTER TO MASTER_HOST='172.18.1.19',MASTER_USER='repl',MASTER_PORT=3306,MASTER_PASSWORD='xxx',master_auto_position=1 ;
start slave;
show slave status\G

注意:出现故障后不要重启,不要重启,不要重启!!!

三、附录

3.1、xfs和ext4的区别

centos7默认文件系统是xfs, xfs是一种非常优秀的日志文件系统,它是SGI公司设计的。xfs被称为业界最先进的、最具可升级性的文件系统技术;xfs是一个64位文件系统,最大支持8EB减1字节的单个文件系统,实际部署时取决于宿主操作系统的最大块限制。对于一个32位Linux系统,文件和文件系统的大小会被限制在16TB;xfs在很多方面确实做的比ext4好,ext4受限制于磁盘结构和兼容问题,可扩展性和scalability确实不如xfs。

centos6默认文件系统是ext4, ext4是第四代扩展文件系统(英语:Fourth EXtended filesystem,缩写为ext4)是linux系统下的日志文件系统,是ext3文件系统的后继版本( centos5默认文件系统是ext3); ext4的文件系统容量达到1EB,而文件容量则达到16TB。理论上支持无限数量的子目录;

3.2、LVM 云盘扩容

云盘扩容
fdisk /dev/xxx  #磁盘分区扩容
pvresize /dev/xxx  #卷扩容
lvextend -L +增加容量 逻辑卷路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1057334.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

008:连续跌三天,买第四天上涨的盈利计算

尽管有连续三天跌&#xff0c;第四天上涨的概率>0.5&#xff0c;但是也不意味着一定会盈利。因为还要看涨跌大幅度。所以&#xff0c;我们应该来假设&#xff0c;于连续跌三天的最后时刻买入&#xff0c;而后第四天临近收盘卖出&#xff0c;看这样的最终盈利是多少。假设我们…

网络-SSE

文章目录 前言一、SSE简介1、SSE特点Polyfill 2、SSE原理3、SSE技术实现&#xff1a;4、SSE应用场景&#xff1a;5、EventSource 二、SSE使用1、前端2、后端3、完整代码前端后端 总结 前言 本文主要记录SSE通讯的简介、使用、以及原理和一个ChatGPT返回数据的demo。 一、SSE简…

专业图像处理软件DxO PhotoLab 7 mac中文特点和功能

DxO PhotoLab 7 mac是一款专业的图像处理软件&#xff0c;它为摄影师和摄影爱好者提供了强大而全面的照片处理和编辑功能。 DxO PhotoLab 7 mac软件特点和功能 强大的RAW和JPEG格式处理能力&#xff1a;DxO PhotoLab 7可以处理来自各种相机的RAW格式图像&#xff0c;包括佳能、…

Redis中Hash类的操作

Redis中Hash类型是键值对的形式保存数据&#xff0c;其中键被称为字段&#xff08;field&#xff09;&#xff0c;值称为字段值&#xff08;value&#xff09;。在一个key中&#xff0c;字段不能重复&#xff0c;而值可以重复。无论是字段还是值都是无序的&#xff08;保存的次…

React封装自定义表单校验方法

一、表单校验 为什么要封装自定义表单校验方法&#xff0c;因为在后台管理系统中&#xff0c;通常我们会涉及到用户的添加或则信息的修改&#xff0c;这时候通常就涉及表单的相关校验。但通常一个系统中的表单校验针对同一个字段来说是统一的。因此我们就需要将对应的校验字段的…

【LeetCode热题100】--98.验证二叉搜索树

98.验证二叉搜索树 给你一个二叉树的根节点 root &#xff0c;判断其是否是一个有效的二叉搜索树。 有效 二叉搜索树定义如下&#xff1a; 节点的左子树只包含 小于 当前节点的数。节点的右子树只包含 大于 当前节点的数。所有左子树和右子树自身必须也是二叉搜索树。 由于二…

41 二叉树的层序遍历

二叉树的层序遍历 题解1 迭代——BFS题解2 递归——DFS 给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 提示&#xff1a; 树中节点数目在范围 [0, 2000] 内-1000 < Node.val <…

实时目标检测:基于YOLOv3和OpenCV的摄像头应用

一、前言 随着人工智能和计算机视觉技术的不断发展,目标检测成为了智能监控、自动驾驶、机器人等领域的关键技术之一。实时目标检测更是对系统的反应速度和准确度提出了更高的要求。本文介绍使用OpenCV和YOLOv3实现实时目标检测的方法,演示如何使用OpenCV调用YOLOv3模型进行…

基于SSM的选课排课系统

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用Vue技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

克服网络安全压力:如何掌控无限的云数据

管理云中的数字风险比以往任何时候都更加重要。数字化转型引发的云数据呈指数级增长&#xff0c;为安全分析师创造了一个更大的威胁环境。随着威胁行为者继续危害组织最敏感的数据&#xff0c;这一挑战将会加剧。 预计未来五年全球网络犯罪成本将激增&#xff0c;从 2022 年的…

22-框架

框架 解决某类问题&#xff0c;编写的一套类、接口等&#xff0c;可以理解成一个半成品&#xff0c;大多框架都是第三方研发的。 好处&#xff1a;在框架的基础上开发&#xff0c;可以得到优秀的软件架构&#xff0c;并能提高开发效率 框架的形式&#xff1a;一般是把类、接口…

有向图计数优化版原理及C++实现

题目 见前面章节。有向图访问计数的原理及C实现-CSDN博客 第一版 不需要拓扑排序&#xff0c;也不需要并集查找&#xff0c;直接dfs了。完成以下三个职责&#xff1a; 一&#xff0c;DFS那些端点在环上。 二&#xff0c;DFS环上各点此环的长度。 三&#xff0c;DFS非环上各点…

C# 画参数可调调幅波

参阅此&#xff0c; 使用VC输出调幅波的数值和波形_c如何显示下位机传输过来的频谱信号 csdn_bcbobo21cn的博客-CSDN博客 用winform做一下&#xff1b; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Dra…

16-自动化测试——selenium介绍

目录 1.selenium是什么&#xff1f; 2.selenium特点 3.selenium工作原理 1.selenium是什么&#xff1f; selenium是web应用中基于UI的自动化测试框架。 2.selenium特点 支持多平台多浏览器多语言&#xff08;Java、Python、C#、JS、Ruby......&#xff09;有丰富的API 3…

目标检测算法改进系列之Backbone替换为ConvNextV2

ConvNextV2 受掩码自编码机制的启发&#xff0c;本文在 ConvNeXt 的架构基础上延伸出了一个完全卷积掩码自编码器框架——ConvNeXt V2&#xff0c;同时作者设计了一个全新的全局响应归一化(Global Response Normalization, GRN)层以增强原始 ConvNeXt 模块通道间的特征竞争&am…

SpringBoot注册web组件

目录 前言 一、注册Servlet组件 1.1 使用SpringBoot注解加继承HttpServet类注册 1.2 通过继承HttpServet类加配置类来进行注册 二、注册Listener组件 2.1 使用SpringBoot注解和实现ServletContextListener接口注册 2.2 ServletContextListener接口和配置类来进行注册 …

基于YOLOv8的安全帽检测系统(2):Gold-YOLO,遥遥领先,助力行为检测 | 华为诺亚NeurIPS23

目录 1.Yolov8介绍 2.安全帽数据集介绍 3.Gold-YOLO 4.训练结果分析 1.Yolov8介绍 Ultralytics YOLOv8是Ultralytics公司开发的YOLO目标检测和图像分割模型的最新版本。YOLOv8是一种尖端的、最先进的&#xff08;SOTA&#xff09;模型&#xff0c;它建立在先前YOLO成功基础上…

js 如何判断一个指定的位置点坐标是否落在一个多边形区域内?

1 场景 业务场景举例&#xff1a;快递选择收获区域、车辆电子围栏、运动轨迹路线、地理位置信息检测范围和地图等过滤等等。   比方说地图上有一块区域&#xff08;抽象成多边形&#xff09;&#xff0c;然后里面每一个位置点(像素点)都有对应的GPS的经纬度坐标值&#xff0c…

如何破解压缩包zip解压密码?

Zip压缩包设置了密码&#xff0c;解压的时候就需要输入正确对密码才能顺利解压出文件&#xff0c;正常当我们解压文件或者删除密码的时候&#xff0c;虽然方法多&#xff0c;但是都需要输入正确的密码才能完成。忘记密码就无法进行操作。 那么&#xff0c;忘记了zip压缩包的密…

【C++】模板初阶 -- 详解

一、泛型编程 // 实现一个通用的交换函数&#xff1a; void Swap(int& left, int& right) {int temp left;left right;right temp; }void Swap(double& left, double& right) {double temp left;left right;right temp; }void Swap(char& left, ch…