扩容前:

然后准备给home扩容:
扩容前先备份一下:
分两步:
1.备份VG,这个是系统会自动备份的,文件在/etc/lvm/archive/目录下
2.备份superblock
superblock记录了磁盘的格式、已经使用大小等等信息

dd if=/dev/mapper/centos-home of=./backup_before_add bs=4096 count=1

扩容

添加新硬盘后:

fdisk /dev/sda


扩容完成 增加了500M

模拟错误

我遇到的错误是新添加的硬盘离线了,我模拟下把新加入的sdb磁盘删除,重启后显示如下错误:
Warning: Device for PV uuid not found or rejected by a filter

来分析下原因:
本来名叫centos的vg是有sda2和sdb1共同组成的,共计4.5G,现在sdb磁盘找不到了,sdb1也就找不到了。
通过vi打开/etc/lvm/arichive/下最新的.vg文件可以印证这一点:

正确处理 Device for PV uuid not found的姿势

先说正确的处理方式:
1.先备份vg和superblock,vg系统自动备份了,superblock的备份还是通过dd命令
dd if=/dev/mapper/centos-home of=./backup_after_add bs=4096 count=1

2.关机,插入之前丢失的硬盘,重新开机
3.如果新硬盘丢失了或数据损坏了也不用担心,因为新硬盘上还没存数据呢,只需要重新格式化新硬盘好了:
a. fdisk /dev/sdb 和上面fdisk一样的参数
b. vg需要指定参数:
pvcreate --uuid 0Zy8yU-58II-TKr2-FSV7-c1tO-Tay4-revC3p --norestore-file /dev/sdb1
其中0Zy8yU-58II-TKr2-FSV7-c1tO-Tay4-revC3p是上文提示miss的uuid
c. pvscan
d. lvchange -ay centos # centos是我的vg名字
e.如果正常,你又可以正常挂载磁盘了

再说我的错误操作及恢复方法

我轻信了网上的文章,执行了:vgreduce --removemissing --force centos
然后变成了这样:

lvs已经没有了

尝试从备份恢复vg:
先尝试恢复到执行removemissing前的
![在这里插入图片描述](https://img-blog.csdnimg.cn/20200120183251758.png恢复失败,这时应该是用上面pvcreate --uuid 创建好丢失的pv再恢复。

而我当时脑子一热,恢复到了原始的添加硬盘前到pv状态,初看起来一切正常了:

但是但是,mount出错,提示:
mount: can’t read superblock

什么是superblock呢?简单说就是描述这个分区信息的,比如磁盘大小,是使用的ext4还是xfs分区格式等等。

尝试修复,由于我的分区是xfs格式的,执行xfs_repair,报错

修复失败,被这个问题困扰很久后,我研究了下xfs的文件系统格式,发现superblock是分散在多个地方的,他有一个ag的概念,简单理解就是把一个大分区等分成N个ag,每个ag独立,superblock在每个ag的开头,添加磁盘空间会增加ag,上面这个错误就是新加的ag在新磁盘上,而现在新磁盘丢失了,导致读取不到第4个ag的superblock信息。

到目前都还不用担心数据丢失,因为ag是独立的,而且我们没有做删除操作,仅仅是superblock里记录扩容了,而实际没扩容而已,可以证明下superblock是不是存在的:

使用sb 0读取第0个superblock,是正常的,而且读出agcount是5,默认应该是4,说明superblock已经是扩容后的了。
可以使用dd dump下现在的superblock,跟扩容前的比较下:

偏移说明:
8-15 Total blocks in file system
88-91 Number of AGs
144-151 Number of free blocks
224-227 CRC32 checksum for superblock
248-263 UUID used if INCOMPAT_META_UUID feature
可以看到主要改了ag数目、总空间大小、剩余空间大小。
我想大部分人是没有扩容前的superblock的备份的,包括我自己。

到了现在,正确的恢复姿势应该还是上面说的添加硬盘:
1.先用上面正确处理的方式来fdisk一块新硬盘,pvcreate创建好
2.pvcreate --uuid 0Zy8yU-58II-TKr2-FSV7-c1tO-Tay4-revC3p --norestore-file /dev/sdb1
3.vgcfgestore恢复到扩容后的状态

恢复的思路是把丢失的磁盘再加回去,让lv能重新找到,而我遇到的情况比较特别,我手上没有空余的磁盘了,之前添加的磁盘已经被我用来备份数据了。

下面介绍的方法是我研究xfs的superblock后手动修复superblock的方法

手动修改superblock到扩容前

前面说过,扩容前后改了superblock中的以下内容:
8-15 Total blocks in file system
88-91 Number of AGs
144-151 Number of free blocks
224-227 CRC32 checksum for superblock
248-263 UUID used if INCOMPAT_META_UUID feature

那我只要把这些内容恢复到修改前就可以了,看起来应该是可行的:
唯一的难点是如何找到修改前的数据
Total blocks in file system = extent_count*1024,extent_count可以在/etc/lvm/archive/下备份的vg文件中找到

Number of free blocks 这个值我一直没找到找回的方法,可以暂时不修改
crc是需要重新计算的,最后我写了段代码来修改:
方法是先备份

dd if=/dev/mapper/centos-home of=./backup_ag5 bs=4096 count=1

然后用附件代码修改backup_ag5文件,生成backup_ag5_ag4,再导入到分区:

dd of=/dev/mapper/centos-home if=./backup_ag5_ag4 bs=4096 count=1

导入完成后执行xfs_db /dev/mapper/centos-home,不报错了, mount -o ro /dev/mapper/centos-home /home/也正常了,文件也能看到了
唯一的小问题是剩余大小有问题,因为上面我们没修正剩余块数

而且不能xfs_repaire, 否则又会修复为5个ag。。但数据已经恢复了,赶紧备份出来吧

参考文献:
https://righteousit.wordpress.com/2018/05/21/xfs-part-1-superblock/

记一次磁盘扩容失败并恢复相关推荐

  1. 记一次磁盘扩容,以及Can‘t open /dev/vdb1 exclusively. Mounted filesystem?报错处理的过程

    由于本人的误操作导致无法扩容磁盘,卷组也没有了,删除逻辑卷也报错,怎样处理还原磁盘呢:下面是根据本人各种百度找到的处理方法: 查看磁盘空间情况,发现挂载的磁盘还在 [root@localhost ~] ...

  2. 虚拟服务器的磁盘,虚拟服务器磁盘扩容

    虚拟服务器磁盘扩容 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 磁盘有如下几 ...

  3. linux磁盘扩容:新增磁盘、原磁盘扩容、home/root分区扩容

    ​ 一.背景 linux使用中经常遇到磁盘空间不足,需要对磁盘进行扩容.根据自己的经验进行归纳整理,多种场景,帮助需要者和备查 本文执行的命令,均在centos7 环境下运行的,其他环境思路和相似,命 ...

  4. 小新air扩容 重装系统 恢复系统

    小新air扩容 重装系统 恢复系统 本人设备 小新air 2019 win10中文家庭版 2022 9/12 20:22 2022 9/12 21:24 因为C盘容量不足,(之前看网上都是说分100G ...

  5. VCSA6.7的磁盘扩容与备份、还原

    VCSA6.7的磁盘扩容与备份.恢复 [VCSA磁盘扩容] 第一步:查看VCSA6.7虚拟机的VMDK信息,6.7版本共使用13个VMDK,VMDK相关信息如下: 注:每一个VMDK都有其对应的作用, ...

  6. linux磁盘扩容大全

    当我们租了服务器之后,肯定会需要到磁盘扩容的. 一.背景 linux使用中经常遇到磁盘空间不足,需要对磁盘进行扩容.根据自己的经验进行归纳整理,多种场景,帮助需要者和备查 本文执行的命令,均在cent ...

  7. centos7.x磁盘扩容之一

    centos7.x磁盘扩容之一 条件: 针对虚机.云主机等,磁盘是lvm分区方式 前言: PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区. ...

  8. 虚拟机系统的磁盘扩容妙招及案例

    转载请通知老方,获许后方可(本文首发于CUblog). 随着服务器虚拟化在企业中的应用越来越广,对寄宿其上的虚拟机系统的管理也越来越受到重视,在本文中,笔者通过实例来帮助大家如何实现虚拟机系统在磁盘空 ...

  9. KVM日常管理-克隆-快照-磁盘扩容-虚拟磁盘挂载

    常用安装管理 创建虚拟机的桥接网卡,并将原来物理网卡上IP自动添加到桥接网卡上: virsh iface-bridge eth0 br0 输入此命令后,如果没有报错,网络会断开,需要重启网卡,br0就 ...

最新文章

  1. legacy引导gpt分区_windows分区模式和启动模式(UEFI+GPT或Legacy+MBR组合)
  2. ES6入门之对象扩展
  3. 【PM模块】预防性维护(上)
  4. idea 拉取分支代码
  5. SpringMVC 返回json的两种方式
  6. 设计模式 之 创建者
  7. oracle sql 语句 start with ...... connect by prior .......
  8. 人一生中最该看清的5个真相
  9. 最新京东炸年兽活动一键做任务工具v1.4
  10. android服务器连接失败,Android Studio服务器连接失败
  11. 标准模板库(STL)之 queue 列传
  12. ACDSee Photo Studio 8 for Mac(数字图象处理软件)
  13. 一篇文章看懂自然语言处理——word表示技术的变迁(从bool模型到BERT)
  14. STC - 非标连接的7段数码管赋值
  15. Error:Apostrophe not preceded by \ (
  16. matlab动态图阿基米德螺旋,魔兽世界M基尔加丹阿基米德螺旋线之Matlab动图!国服加油...
  17. mysql 特性之一 double write (双写)
  18. CentOS7下安装jmeter5.3
  19. 视频教程-PHP零基础七天入门视频课程(免费50章)-PHP
  20. yox.js 的使用

热门文章

  1. 怎么样说一口地道的英语
  2. 浙江义乌外商当志愿者助力春运 一口流利汉语获赞
  3. bzoj3538[Usaco2014 Open]Dueling GPS*
  4. 《道德经》第三十五章
  5. yolov5s 预训练模型_GitHub上YOLOv5开源代码的训练数据定义
  6. DSY2748*音量调节
  7. vba 根据字节数截取字符串
  8. 2020低压电工考试及低压电工模拟考试题库
  9. 【python】无限量PPT免费下载?找模板在不怕心仪得不能用啦
  10. 新纪元出纳专用软件 v5.5 绿色