Linux技能篇-恢复lvm物理卷

news2024/12/23 16:16:20

项目场景:

今天遇到一个很有意思的故障,我用虚拟机来还原了当前的故障场景。
首先来看,系统中只有一个lvn卷组
在这里插入图片描述
我们给系统中添加一块磁盘,使用pvcreate创建物理卷

pvcreate /dev/sdb

并将容量添加到当前的卷组中

在这里插入图片描述
创建一个lvm逻辑卷
在这里插入图片描述
格式化分区并挂载,我这里mnt分区没有用,挂载到mount分区
在这里插入图片描述
查询mylv分区的uuid
在这里插入图片描述
在fstab中做开机自动挂载
在这里插入图片描述
重启机器验证是否正常。

在这里插入图片描述
我们给mylv中添加一部分数据信息进去,复制/etc下的内容到mylv中
下一步,重装系统,模仿pv和vg被破坏的故障场景
(也有可能是共享存储被移动到了其他机器引起,我这里没有存储移动的条件,设备不允许)

注意: 我这里是centos7.9的系统,重装使用的是openEuler20.03,centos会在安装时提示磁盘为一个集合无法安装的报错。

ok,重启挂载你会发现问题,这时候sdb盘是无法挂载成功的。
接下来的步骤由于机器限制,无法用虚拟机还原成功,emmm,都写到这里了,还是决定将它写完。


问题描述

如果物理卷的卷组元数据区域意外覆盖或被破坏,你将收到一条错误消息,表明元数据区域不正确,或者系统无法找到带有特定 UUID 的物理卷。这时候可以通过在物理卷中编写新元数据区域来从物理卷中恢复数据,并指定与丢失的元数据相同的 UUID。


原因分析:

发生该故障的原因就是因为PV和VG的丢失。


解决方案:

明确了故障是由于PV和VG的的丢失引起的,那接下来需要做的就是修复PV和VG。
系统中内置的LVM信息,由于操作系统的覆盖,已无法利用/etc/lvm目录中的记录恢复。

恢复方法:

  1. 找到故障lvm逻辑卷的UUID,通过在 /etc/lvm/archive 目录中记录的信息可以得到UUID信息。查看卷组的最后一个已知有效归档 LVM 元数据的 VolumeGroupName_xxxx.vg 文件。或者通过之前系统的备份文件或其他记录寻找。
# vgchange -an --partial
Partial mode. Incomplete volume groups will be activated read-only.
  Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
  Couldn't find device with uuid 'FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk'.
-a|--activate y|n

Change the active state of LVs. An active LV can be used through a block device, allowing data on the LV to be accessed. y makes LVs active, or available. n makes LVs inactive, or unavailable. The block device for the LV is added or removed from the system using device-mapper in the kernel. A symbolic link /dev/VGName/LVName pointing to the device node is also added/removed. All software and scripts should access the device through the symbolic link and present this as the name of the device. The location and name of the underlying device node may depend on the distribution, configuration (e.g. udev), or release version.
翻译过来就是:更改 LV 的活动状态。活动 LV 可以通过块设备使用,允许访问 LV 上的数据。

  • y 使 LV 处于活动状态或可用状态
  • n 使 LV 不活动或不可用。在内核中使用设备映射器从系统中添加或删除 LV 的块设备。指向设备节点的符号链接/dev/VGName/LVName 也被添加/删除。所有软件和脚本都应该通过符号链接访问设备,并将其作为设备的名称。底层设备节点的位置和名称可能取决于发布版本、配置(例如 udev)或发布版本。
-P|--partial

Commands will do their best to activate LVs with missing PV extents. Missing extents may be replaced with error or zero segments according to the missing_stripe_filler setting. Metadata may not be changed with this option.
翻译过来就是:命令将尽最大努力激活缺少 PV 区段的 LV。缺少的区段可以根据 miss _ stripe _ fill 设置用错误或零段替换。此选项不能更改元数据。

  1. 使用 pvcreate 命令的 --uuid--restorefile 参数来恢复物理卷。以下示例将 /dev/sdh1 设备标记为带有上述 UUID 的物理卷,FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk。此命令使用 VG_00050.vg 中包含的元数据信息恢复物理卷标签,这是卷组的最新归档元数据。restorefile 参数指示 pvcreate 命令使新物理卷与卷组中的旧物理卷兼容,或者新元数据不会放置在旧的物理卷包含数据的位置(例如,如果原始 pvcreate 命令使用了控制元数据放置的命令行参数,或者物理卷最初是使用不同默认值的不同软件版本创建的)。pvcreate 命令只覆盖 LVM 元数据区域,不会影响现有数据区域。
# pvcreate --uuid "FmGRh3-zhok-iVI8-7qTD-S5BI-MAEN-NYM5Sk" --restorefile /etc/lvm/archive/VG_00050.vg /dev/sdh1
Physical volume "/dev/sdh1" successfully created

到这里PV就已经恢复了。

  1. 然后,使用 vgcfgrestore 命令恢复卷组的元数据。
# vgcfgrestore VG
  Restored volume group VG

如果不出意外的话,使用lvs命令查询逻辑卷的具体信息就可以正常显示了。

# lvs -a -o +devices
  LV     VG   Attr   LSize   Origin Snap%  Move Log Copy%  Devices
  stripe VG   -wi--- 300.00G                               /dev/sdh1 (0),/dev/sda1(0)
  stripe VG   -wi--- 300.00G                               /dev/sdh1 (34728),/dev/sdb1(0)

4.确认逻辑卷的激活状态,如果是未激活,使用lvchange -ay /dev/VG_NAME/LV_NAME 命令激活。

# lvchange -ay /dev/VG/stripe
# lvs -a -o +devices
  LV     VG   Attr   LSize   Origin Snap%  Move Log Copy%  Devices
  stripe VG   -wi-a- 300.00G                               /dev/sdh1 (0),/dev/sda1(0)
  stripe VG   -wi-a- 300.00G                               /dev/sdh1 (34728),/dev/sdb1(0)

注意

1.首先要确保发生故障后,磁盘未做格式化等操作;
2.发生故障后没有对数据进行其他方式的强制读取;
3.还是要规范使用LVM,不要把数据盘合到系统盘的卷组中;
4.数据恢复并不保证百分百成功。

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

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

相关文章

基于Spring Boot医护人员排班系统

设计技术: 开发语言:Java数据库:MySQL技术:SpringbootMybatisvue 工具:IDEA、Maven、Navicat 主要功能: 医护类型管理 医护人员排班系统的系统管理员可以对医护类型添加修改删除以及查询操作。具体界面…

Opencv学习项目7——face_recognition

前面两篇博客解决了安装dlib库的问题和numpy和dlib不兼容的问题,今天开始做人脸识别第一个项目 我们可以从网上下载一张带有人脸的图片或者自己电脑有的也可以,我这里使用lyf的图片进行演示 加载图像文件 img1 face_recognition.load_image_file(lyf1.…

mac菜单栏应用管理软件:Bartender 4 for Mac 中文激活版

Bartender 4 是一款由Bearded Men Games开发的适用于Mac操作系统的应用程序,它被设计用来优化和美化Mac菜单栏的功能。自从macOS Big Sur开始,Mac的菜单栏可以自定义,用户可以添加和移除各种图标。Bartender 4就是在这个背景下应运而生&#…

论文阅读Vlogger: Make Your Dream A Vlog

摘要 论文介绍了一个名为“Vlogger”的通用人工智能系统,它能够根据用户的描述生成分钟级的视频博客(vlog)。与通常只有几秒钟的短视频不同,vlog通常包含复杂的故事情节和多样化的场景,这对现有的视频生成方法来说是一…

CPPTest设计分析

目录 1 概述2 设计3 扩展Output3.1 扩展实例 1 概述 CppTest是一个可移植、功能强大但简单的单元测试框架,用于处理C中的自动化测试。重点在于可用性和可扩展性。支持多种输出格式,并且可以轻松添加新的输出格式。 CppTest下载地址Sourceforge Github地…

django学习入门系列之第三点《伪类简单了解》

文章目录 hover&#xff08;伪类&#xff09;after&#xff08;伪类&#xff09;往期回顾 hover&#xff08;伪类&#xff09; 伪类指的是用冒号加的 hover样式指的是&#xff0c;当用户光标移动到设定区域后&#xff0c;所执行的用法 如&#xff1a; <!DOCTYPE html>…

视频网站系统

摘 要 随着互联网的快速发展和人们对视频内容的需求增加&#xff0c;视频网站成为了人们获取信息和娱乐的重要平台。本论文基于SpringBoot框架&#xff0c;设计与实现了一个视频网站系统。首先&#xff0c;通过对国内外视频网站发展现状的调研&#xff0c;分析了视频网站的背景…

静态资源服务器

上一章【认识 MIME 和 HTTP】。 我们认识和了解了 MIME 的概念和作用&#xff0c;也简单地学习了通过浏览器控制台查看请求和返回的用法。 通过对不同的 HTML、CSS、JS 文件进行判断&#xff0c;设置不同的 MIME 值&#xff0c;得以让我们的浏览器正正确地接收和显示不同的文…

2-18 基于matlab的关于联合对角化盲源分离算法的二阶盲识别(SOBI)算法

基于matlab的关于联合对角化盲源分离算法的二阶盲识别&#xff08;SOBI&#xff09;算法。通过联合对角化逼近解混矩阵。构建的四组信号&#xff0c;并通过认为设置添加噪声比例&#xff0c;掩盖信号信息。通过SOBI算法实现了解混。程序已调通&#xff0c;可直接运行。 2-18联合…

技术速递|Visual Studio Code 的 .NET MAUI 扩展现已正式发布

作者&#xff1a;Maddy Montaquila 排版&#xff1a;Alan Wang 今天&#xff0c;我们非常高兴地宣布 .NET MAUI VS Code 扩展插件结束了预览阶段&#xff0c;并将包含一些期待已久的新功能 - 包括 XAML IntelliSense 和 Hot Reload&#xff01; 什么是 .NET MAUI 扩展插件&…

成功解决​​​​​​​TypeError: __call__() got an unexpected keyword argument ‘first_int‘

成功解决TypeError: __call__() got an unexpected keyword argument first_int 目录 解决问题 解决思路 解决方法 T1、直接调用原始函数 T2、检查装饰器实现 T3、使用不同的调用方式 解决问题 result = multiply(**arguments) File "D:\ProgramData\Anaconda3\Li…

BFS:队列+树的宽搜

一、二叉树的层序遍历 . - 力扣&#xff08;LeetCode&#xff09; 该题的层序遍历和以往不同的是需要一层一层去遍历&#xff0c;每一次while循环都要知道在队列中节点的个数&#xff0c;然后用一个for循环将该层节点走完了再走下一层 class Solution { public:vector<vec…

【教程】简介nccl-test工具

转载请注明出处&#xff1a;小锋学长生活大爆炸[xfxuezhagn.cn] 如果本文帮助到了你&#xff0c;欢迎[点赞、收藏、关注]哦~ GitHub - NVIDIA/nccl-tests: NCCL TestsNCCL Tests. Contribute to NVIDIA/nccl-tests development by creating an account on GitHub.https://githu…

Unity3D 物体的运动

运动方式1 修改 position / localPosition &#xff0c;可以让物体运动 例如&#xff0c; Vector3 pos this.transform.localPosition; pos.z distance; this.transform.localPosition pos; 此时&#xff0c;小车向Z 方向运动 具体代码如下 using System.Collection…

[C#]基于opencvsharp实现15关键点人体姿态估计

数据集 正确选择数据集以对结果产生适当影响也是非常必要的。在此姿势检测中&#xff0c;模型在两个不同的数据集即COCO关键点数据集和MPII人类姿势数据集上进行了预训练。 1. COCO&#xff1a;COCO关键点数据集是一个多人2D姿势估计数据集&#xff0c;其中包含从Flickr收集的…

matlab绘制二维曲线,如何设置线型、颜色、标记点类型、如何设置坐标轴、matlab 图表标注、在图中标记想要的点

matlab绘制二维曲线&#xff0c;如何设置线型、颜色、标记点类型、如何设置坐标轴、matlab 图表如何标注、如何在图中标记想要的点 matlab绘制二维曲线&#xff0c;如何在图中标记想要的点。。。如何设置线型、颜色、标记点类型。。。如何设置坐标轴。。。matlab 图表标注操作…

头歌资源库(18)接龙序列

一、 问题描述 二、算法思想 首先&#xff0c;我们需要判断一个数列是否是接龙数列。可以通过遍历数列的每一个元素&#xff0c;判断该元素的首位数字是否等于前一个元素的末位数字。如果所有元素都满足条件&#xff0c;则该数列是接龙数列。 接下来&#xff0c;我们需要计算…

Java | Leetcode Java题解之第201题数字范围按位与

题目&#xff1a; 题解&#xff1a; class Solution {public int rangeBitwiseAnd(int m, int n) {while (m < n) {// 抹去最右边的 1n n & (n - 1);}return n;} }

Java | Leetcode Java题解之第202题快乐数

题目&#xff1a; 题解&#xff1a; class Solution {private static Set<Integer> cycleMembers new HashSet<>(Arrays.asList(4, 16, 37, 58, 89, 145, 42, 20));public int getNext(int n) {int totalSum 0;while (n > 0) {int d n % 10;n n / 10;totalS…

在eclipse中导入idea项目步骤

一、可以把其它项目的.project&#xff0c; .classpath文件拷贝过来&#xff0c;修改相应的地方则可。 1、.project文件只需要修改<name>xxx</name>这个项目名称则可 2、.classpath文件通常不用改&#xff0c; 二、右击 项目名 >选择“Properties”>选择 Re…