扩容LVM卷导致lvm元数据丢失的恢复过程
一、问题描述
因某次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.vgCouldn't find device with uuid gzdJP8-ltvz-l2Kd-WfJD-335J-NrDd-mhwi7w.VG name: mysql_dataDescription: Created *before* executing 'vgcreate mysql_data /dev/sdb1'Backup Time: Thu Jun 16 15:17:40 2022File: /etc/lvm/archive/mysql_data_00001-1831552697.vgVG name: mysql_dataDescription: Created *before* executing 'lvcreate -n mysql -l 100%VG mysql_data'Backup Time: Thu Jun 16 15:19:52 2022File: /etc/lvm/backup/mysql_dataVG name: mysql_dataDescription: 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/sdb1VG Name mysql_dataPV Size <1024.00 GiB / not usable <3.97 MiBAllocatable yes (but full)PE Size 4.00 MiBTotal PE 262143Free PE 0Allocated PE 262143PV 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 superblockdumpe2fs 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, 214990848e2fsck -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-mysqlThe 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, 214990848Allocating 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? yesPass 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 +增加容量 逻辑卷路径
相关文章:
扩容LVM卷导致lvm元数据丢失的恢复过程
一、问题描述 因某次MySQL binlog占用过高扩容时,是直接对云盘操作,而扩容直接操作了lvm卷而未操作云盘分区,并随后执行了扩容的partprobe,resize2fs卷等操作;最后,显示并未扩容成功,重启系统后…...
【MySQL教程】| (1-1) 2023MySQL-8.1.0 安装教程
文章目录 一、安装包下载二、安装配置1、解压安装包2、编写MySQL配置文件3、初始化MySQL数据库3、安装mysql服务并启动4、MySQL服务5、连接MySQL6、修改密码 三、配置环境变量四、防止mysql自启动拖慢开机时间 近日有粉丝问到mysql在win11的安装中遇到一些问题,应粉…...
数据大屏定时请求后端数据
需求: 因为大屏基本从上午展示到晚上,不会频繁去打开页面。 前端实现: 在Vue的created钩子函数中发送初次请求,并使用JavaScript中的setInterval函数来设置整点定时发送请求。以下是一个示例 <template><div><h1…...
数据结构--队列
一、队列是什么 队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,队列是一种操作受限制的线性表。进行插入操作的端称为队尾&…...
Python绘图系统25:新增8种绘图函数
文章目录 常用绘图函数单选框的更改逻辑源代码 Python绘图系统: 前置源码: Python打造动态绘图系统📈一 三维绘图系统 📈二 多图绘制系统📈三 坐 标 轴 定 制📈四 定制绘图风格 📈五 数据生成导…...
(二) gitblit用户使用教程
(一)gitblit安装教程 (二) gitblit用户使用教程 (三) gitblit管理员手册 目录 网页访问git客户端设置推送错误配置查看当前配置 日常使用仓库分组my profile修改上传代码简洁 网页访问 点击Advanced... 点击Accept the Risk and Contiue 初始用户名和密码都是admin,点击login…...
8.3Jmeter使用json提取器提取数组值并循环(循环控制器)遍历使用
Jmeter使用json提取器提取数组值并循环遍历使用 响应返回值例如: {"code":0,"data":{"totalCount":11,"pageSize":100,"totalPage":1,"currPage":1,"list":[{"structuredId":&q…...
SNERT预备队招新CTF体验赛-Misc(SWCTF)
目录 1、最简单的隐写 2、旋转我 3、is_here 4、zip伪加密 5、压缩包密码爆破 6、我就藏在照片里 7、所以我放弃了bk 8、套娃 9、来自银河的信号 10、Track_Me 11、勇师傅的奇思妙想 1、最简单的隐写 下载附件后,图片格式并不支持打开 根据题目提示&…...
MySql017——组合查询
一、UNION作用 可用UNION操作符来组合数条SQL查询。 二、UNION 使用规则 1、UNION的使用很简单。所需做的只是给出每条SELECT语句,在各条语句之间放上关键字UNION。2、UNION必须由两条或两条以上的SELECT语句组成,语句之间用关键字UNION分隔ÿ…...
【0224】源码分析RelFileNode对smgr访问磁盘表文件的重要性(2)
1. RelFileNode的角色 RelFileNode 是一个结构体数据类型,声明于relfilenode.h(src\include\storage )头文件中,该数据类型十分重要,因为它 “提供所有我们需要知道的物理访问关系表的信息。” smgr要访问磁盘上面的数据表文件,则需要此RelFileNode提供必要信息。 可以说…...
2310C++λ中完美转发
原文 C11里面就引入了完美转发概念,通过它,可按参数实际类型转发参数. 元<型名 T>空 处理(T&t){输出<<"左值\n";} 元<型名 T>空 处理(T&&t){输出<<"右值\n";} 元<型名 T>空 测试转发(T&&t){处理(前向&…...
【C++11】std::function 包装器(又叫适配器),std::bind 绑定
文章目录 std::function 包装器1. 使用方法2. 包装器的应用场景:题目 - - 逆波兰表达式求值3. 成员函数 和 static 静态成员函数 使用 包装器 std::bind 适配器绑定1. 使用方法2. 调整参数 顺序3. 指定参数 / 参数个数的调整 std::function 包装器 std::function 包…...
Linux系统编程系列之线程
一、什么是线程 线程(Thread)是计算机中的基本执行单元,是操作系统调度的最小单位。线程是进程内的一个独立执行流程,一个进程可以包含多个线程,这些线程共享进程的资源,但每个线程都有自己的独立栈空间以及…...
CV面试知识点总结
一.卷积操作和图像处理中的中值滤波操作有什么区别? 1.1卷积操作 卷积操作是一种线性操作,通常用于特征的提取,通过卷积核的加权求和来得到新的像素值。1.2中值滤波 原文: https://blog.csdn.net/weixin_51571728/article/detai…...
Centos一键安装、切换各版本JDK
查看服务中的安装的jdk rpm -qa | grep java获取jdk各版本信息 yum -y list java*查看指定版本 yum -y list java*|grep 1.8安装jdk yum install java-11-openjdk当服务器中有多个版本jdk,切换指定jdk版本 alternatives --config java按照提示输入编号即可切换&…...
JavaWeb项目:smbms(mysql)
1.准备工作,创建数据库 CREATE DATABASE smbms;USE smbms;CREATE TABLE smbms_address (id BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT 主键ID,contact VARCHAR(15) COLLATE utf8_unicode_ci DEFAULT NULL COMMENT 联系人姓名,addressDesc VARCHAR(50) COLLATE u…...
shell脚本的多线程介绍
shell脚本的多线程介绍 shell脚本中,实现多线程可以使用以下方法: 1)使用&符号 在Shell中,可以使用&符号将命令放在后台执行,这样就可以同时执行多个命令。例如: #!/bin/bash command1 & #…...
周记之反思
9.25 这篇总结我承认,是在26号上午写的,那昨天晚上又聊天了,但是对比之前来说好很多了,所以26号上午也就是今天我起了个大早,然后把昨天的尾巴收了一下,没收完,先说说成果: 完成了…...
信创办公–基于WPS的EXCEL最佳实践系列 (数据整理复制粘贴)
信创办公–基于WPS的EXCEL最佳实践系列 (数据整理复制粘贴) 目录 应用背景操作步骤1、数据查找与替换2、复制或粘贴数据3、使用自动填充工具4、将数据拆分到多列5、应用数字格式 应用背景 数据的整理复制粘贴等在日常的工作中经常使用。本章内容主要学习…...
二极管的直流等效电路和微变等效电路
二级管的主要参数 1.IF(最大整流的电流) 二极管长期工作做能够通过电流的平均最大值:物理意义:功率电流值。 2.UR 二极管最高反向工作电压 需要留有裕度,通常能达到一半的裕度;UR不能等于UBR。 3.IR 未击穿…...
Python无废话-基础知识字典Dictionary详讲
“字典Dictionary” 是一种无序、可变且可嵌套的数据类型,用于存储键值对。字典使用花括号{}来定义,并用逗号分隔键值对。本文对字典常使用方法,创建字典、添加字典、删除字典、如何获取字典做了知识归纳。 字典有以下几个特征: …...
ChatGPT多模态升级,支持图片和语音,体验如何?
一、前言 9 月 25 日,ChatGPT 多模态增加了新的语音功能和图像功能。这些功能提供了一种新的、更直观的界面,允许我们与 ChatGPT 进行语音对话或展示我们正在谈论的内容。 ChatGPT 现在可以看、听、和说话了,而不单单是一个文本驱动的工具了。…...
(SAR)Sentinel-1影像自动下载
基于ASF网站提供的python代码,实现Sentinel-1影像的自动下载; 1、登录ASF网站 登录Sentinel-1影像ASF网站:https://search.asf.alaska.edu/; 点击网站最右侧Sign in图标,进行用户注册; 注册完用户之后&…...
设计模式10、外观模式Facade
解释说明:外观模式(Facade Pattern)又称为门面模式,属于结构型模式 Faade 为子系统中的一组接口提供了一个统一的高层接口,该接口使得子系统更加容易使用 外观(Facade)角色:为多个子系统对外提供…...
华为数通方向HCIP-DataCom H12-831题库(单选题:181-200)
第181题 以下关于OSPF的5类LSA中的转发地址(ForwardingAddress,FA) 的描述,正确的是哪一项? A、当FA地址为0.0.0.0时,收到该LSA的路由器认为到达目的网段的数据包应该发往对应的ABR,因此将到达ABR的下一跳地址作为这条外部路由的下一跳 B、当FA地址为0.0.0.0时,收到该LS…...
Java 中的参数传递方式
Java 中的参数传递方式通常被称为“值传递”,这意味着在方法调用时,实际上传递给方法的是变量的副本,而不是变量本身。尽管这被广泛称为“值传递”,但需要注意的是,这并不意味着 Java 不支持引用传递。事实上ÿ…...
从0开始python学习-27.selenium 简单登录页面脚本
url https://test.com.cn/login driver.get(url)# 获取登录页面需要输入账号密码进行模拟登录操作 user driver.find_element(By.XPATH,//*[id"username"]).send_keys(username) pwd driver.find_element(By.XPATH,//*[id"selfpwd"]).send_keys(123456)…...
华为智能企业上网行为管理安全解决方案(2)
本文承接: https://blog.csdn.net/qq_37633855/article/details/133339254?spm1001.2014.3001.5501 重点讲解华为智能企业上网行为管理安全解决方案的部署流程。 华为智能企业上网行为管理安全解决方案(2) 课程地址方案部署整体流程组网规划…...
【python海洋专题九】Cartopy画地形等深线图
【python海洋专题九】Cartopy画地形等深线图 水深图基础差不多了,可以换成温度、盐度等 本期加上等深线 本期内容 1:地形等深线 cf ax.contour(lon, lat, ele[:, :], levelsnp.linspace(-9000,-100,10),colorsgray, linestyles-,linewidths0.25, t…...
Java后端模拟面试,题集①
1.Spring bean的生命周期 实例化 Instantiation属性赋值 Populate初始化 Initialization销毁 Destruction 2.Spring AOP的创建在bean的哪个时期进行的 (图片转载自Spring Bean的完整生命周期(带流程图,好记)) 3.MQ如…...
怎样看是静态网站还是动态网站 怎么操作/新闻最新头条10条
环景: 电脑:联想天逸510pro-181kl 台式电脑 操作系统:Windows 10 专业版 64位 问题描述: 电脑正常关机然后就开不了机, 拔电源线插上开机才行 解决方案: 1.临时办法 拆掉硬盘直接安装在备用主机上面 …...
上海专业网站建设网站/百度搜索竞价推广
Xor and Sum 之前做过一道异或的。感觉有点眼熟,发现不是。由于对异或一点也不熟悉。所以直接放弃了 首先写出来几项看看。 a: 1 2 4 1 1 2 4 prex : 1 3 7 6 7 5 1 prey: 1 3 7 8 9 11 15 可以…...
wordpress摘要全部显示/整合营销传播策划方案
我们的手机在很多的情况下都会遇到打不开网页的情况,那这个时候,我们该怎么办呢?首先你可以检查WiFi是否连接,接着看下手机数据网络有没有打开,再查看网速是否正常,最后检查手机内存大小。下面就给大家讲一…...
网站建设优化论坛/北京seo优化分析
系统更新安装完系统之后,需要更新一些补丁。CtrlAltT调出终端,执行一下代码:$sudo apt-get update$sudo apt-get upgrade卸载libreOfficelibreoffice事ubuntu自带的开源office软件,体验效果不如windows上的office,于是…...
帮我搜一下长沙做网络销售/中山seo排名
MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的。 character-set-database:数据库字符集。 character-set-table:数据库表字符集。 优先级依次增加。所以一般情况下只需要…...
wordpress twenty thirteen/惠州seo推广优化
74HC595驱动4位7段数码管 1、74HC595介绍 74HCT595 是一个 8 位串行输入/串行或并行输出移位寄存器,带有一个存储寄存器和三态输出。移位寄存器和存储寄存器都有独立的时钟。该器件具有串行输入 (DS) 和串行输出 (Q7S) 以启用级联和异步复位 MR 输入。 MR 上的低电平将复位移…...