记一次磁盘扩容失败并恢复
扩容前:
然后准备给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/
记一次磁盘扩容失败并恢复相关推荐
- 记一次磁盘扩容,以及Can‘t open /dev/vdb1 exclusively. Mounted filesystem?报错处理的过程
由于本人的误操作导致无法扩容磁盘,卷组也没有了,删除逻辑卷也报错,怎样处理还原磁盘呢:下面是根据本人各种百度找到的处理方法: 查看磁盘空间情况,发现挂载的磁盘还在 [root@localhost ~] ...
- 虚拟服务器的磁盘,虚拟服务器磁盘扩容
虚拟服务器磁盘扩容 内容精选 换一换 华为云帮助中心,为用户提供产品简介.价格说明.购买指南.用户指南.API参考.最佳实践.常见问题.视频帮助等技术文档,帮助您快速上手使用华为云服务. 磁盘有如下几 ...
- linux磁盘扩容:新增磁盘、原磁盘扩容、home/root分区扩容
一.背景 linux使用中经常遇到磁盘空间不足,需要对磁盘进行扩容.根据自己的经验进行归纳整理,多种场景,帮助需要者和备查 本文执行的命令,均在centos7 环境下运行的,其他环境思路和相似,命 ...
- 小新air扩容 重装系统 恢复系统
小新air扩容 重装系统 恢复系统 本人设备 小新air 2019 win10中文家庭版 2022 9/12 20:22 2022 9/12 21:24 因为C盘容量不足,(之前看网上都是说分100G ...
- VCSA6.7的磁盘扩容与备份、还原
VCSA6.7的磁盘扩容与备份.恢复 [VCSA磁盘扩容] 第一步:查看VCSA6.7虚拟机的VMDK信息,6.7版本共使用13个VMDK,VMDK相关信息如下: 注:每一个VMDK都有其对应的作用, ...
- linux磁盘扩容大全
当我们租了服务器之后,肯定会需要到磁盘扩容的. 一.背景 linux使用中经常遇到磁盘空间不足,需要对磁盘进行扩容.根据自己的经验进行归纳整理,多种场景,帮助需要者和备查 本文执行的命令,均在cent ...
- centos7.x磁盘扩容之一
centos7.x磁盘扩容之一 条件: 针对虚机.云主机等,磁盘是lvm分区方式 前言: PV(physical volume):物理卷在逻辑卷管理系统最底层,可为整个物理硬盘或实际物理硬盘上的分区. ...
- 虚拟机系统的磁盘扩容妙招及案例
转载请通知老方,获许后方可(本文首发于CUblog). 随着服务器虚拟化在企业中的应用越来越广,对寄宿其上的虚拟机系统的管理也越来越受到重视,在本文中,笔者通过实例来帮助大家如何实现虚拟机系统在磁盘空 ...
- KVM日常管理-克隆-快照-磁盘扩容-虚拟磁盘挂载
常用安装管理 创建虚拟机的桥接网卡,并将原来物理网卡上IP自动添加到桥接网卡上: virsh iface-bridge eth0 br0 输入此命令后,如果没有报错,网络会断开,需要重启网卡,br0就 ...
最新文章
- legacy引导gpt分区_windows分区模式和启动模式(UEFI+GPT或Legacy+MBR组合)
- ES6入门之对象扩展
- 【PM模块】预防性维护(上)
- idea 拉取分支代码
- SpringMVC 返回json的两种方式
- 设计模式 之 创建者
- oracle sql 语句 start with ...... connect by prior .......
- 人一生中最该看清的5个真相
- 最新京东炸年兽活动一键做任务工具v1.4
- android服务器连接失败,Android Studio服务器连接失败
- 标准模板库(STL)之 queue 列传
- ACDSee Photo Studio 8 for Mac(数字图象处理软件)
- 一篇文章看懂自然语言处理——word表示技术的变迁(从bool模型到BERT)
- STC - 非标连接的7段数码管赋值
- Error:Apostrophe not preceded by \ (
- matlab动态图阿基米德螺旋,魔兽世界M基尔加丹阿基米德螺旋线之Matlab动图!国服加油...
- mysql 特性之一 double write (双写)
- CentOS7下安装jmeter5.3
- 视频教程-PHP零基础七天入门视频课程(免费50章)-PHP
- yox.js 的使用