修复lvm的逻辑卷

一、背景

公司传统的服务器不知道什么朝代的朝臣用lvm分区,1T的硬盘分了50G挂载到根目录“/”里面有/var、/usr……,剩下的挂载到了“/home"目录,逻辑卷组一点都不剩。后面用docker的时候容器镜像一股脑儿到了/var/lib/docker。空间严重不足,在万分紧急的情况下,我机智地削了home目录的空间,在没有卸载的情况下增加了根目录的空间。因为当初是直接挂载到根目录的,所以var目录没办法分开。

我按照扩容的步骤来做,先卸载,umount,然后lvreduce,然后resize2fs。根目录所在的逻辑卷只能在线扩容,不umount,直接lvextend,然后resize2fs。一切正常,但是home逻辑卷的数据不正确,其他正常使用,我就不管他了。

二、服务器正常启动

后来,个别目录执行失败,我重启服务器。很久ssh都连不上,估计服务器启动失败,我赶紧跑去机房在本机登录,想改了fstab.conf文件,好让服务器起码正常启动,然后我再ssh操作。但是没权限。

1、重新挂载: mount -o remount,rw /

2、然后可以:vi /etc/fstab,不然fstab是制度文件。然后注释掉home目录的挂在信息。

三、恢复home的正常使用

我先尝试挂载,看看有没有什么错误再试试修复。

1、查看服务器上面的lv信息:lvscan

2、尝试挂载: mount /dev/VolGroup/lv_home /home

报这个错误:

mount: wrong fs type, bad option, bad superblock on /dev/mapper/VolGroup-lv_home,

missing codepage or helper program, or other error

In some cases useful info is found in syslog - try

dmesg | tail or so

3、确定错误类型: dmesg | tail

EXT4-fs (dm-2): bad geometry: block count 226699264 exceeds size of device (200484864 blocks)

错误类型是文件系统块数超过设备块数。

主要的错误来自于我再缩小逻辑卷空间的时候没有事先缩小文件系统。这是个致命的错误。

4、构思

网上很多兄弟都说数据肯定没了,特别是我这种逻辑卷组已经没有空间给我还原之前的大小。后来综合了网上的资料和同僚讨论,拿一个移动硬盘去做成pv,加入vg。再按量分给home逻辑卷组,就挂上home盘,然后再按照正确的顺序把移动硬盘腾出来。这里我在腾讯互移动硬盘的时候先把home挂载上去,主要是不知道后面的操作风险多大,先把资料备份出来。

5、恢复操作

a、插入移动硬盘,执行fdisk -l|tail查看磁盘信息。

可以看到sdb一有已经建好的分区,提供直接使用。

b、创建物理卷,pvcreate /dev/sdb1

c、加入逻辑卷组, vgextend VolGroup /dev/sdb1

d、查看信息。vgs

vg已经像计划中变大。

e、扩大home逻辑卷。lvextend -L +55G /dev/mapper/VolGroup-lv_home

实质上是恢复home原有的容量。

f、把home挂在起来。mount /dev/mapper/VolGroup-lv_home /home

资料全部都在,有些文件夹损坏。赶紧备份数据了,后面还有更高风险的操作。

四、移除移动硬盘

1、卸载home盘。umount /home

没报错。

2、查看pv的使用情况。pvscan

3、检查修复损坏的逻辑卷。e2fsck -f -y /dev/mapper/VolGroup-lv_home

4、缩小文件系统。resize2fs -p /dev/mapper/VolGroup-lv_home 500G

压缩成功。

5、缩小逻辑卷。lvreduce -L 500G /dev/mapper/VolGroup-lv_home

6、移除pv。vgreduce VolGroup /dev/sdb1

7、检查有没有移除成功了。vgs&&lvs&&pvs

以上看来,移除都操作全部顺利

8、销毁物理卷。pvremove /dev/sdb1

9、复检物理卷。pvs

没有/dev/sdb1,我就放心拔移动硬盘了。

10、测试自动挂载。mount -a

五、总结

其实就一个简单的步骤,既然磁盘有问题,那就回复原来的状态,没什么问题。但是,我这里的情况是,reduce了空间,又extend了/root,然后只能借助外力了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏木子昭的博客

迈出黑客第一步, 安装配置Kali虚拟机

? Kali Kali是一套用于安全渗透(黑客)的Linux发行版, 好处在于, 系统内置了大量的安全渗透方面的软件, 新手可以免于配置, 开...

3766
来自专栏数据和云

时过境迁:Oracle跨平台迁移之XTTS方案与实践

作者简介 ? 谢金融 云和恩墨东区交付部 Oracle 工程师,多年来从事 Oracle 第三方服务,曾服务过金融、制造业、物流、政府等许多行业的客户,精通数据...

43710
来自专栏点滴积累

OpenStack(企业私有云)万里长征第六步——OpenStack网络及虚拟机存储位置

一、前言 昨天又装了一遍OpenStack。码农这项工作就如同人生,永远有你想不到的意外在等着你,时而是惊喜时而是悲伤。在装的过程中倒是很顺利,只是在安装完成之...

37610
来自专栏mySoul

Linux基础知识

软件运行时输入单元输入内容,进入内存,CPU由控制单元和算术逻辑单元组成,控制单元控制算术逻辑单元从内存中读取数据,内存和外部存储设备进行交互,运算完毕以后输出...

1064
来自专栏Coding01

深入浅出 Laravel Echo (3)

看完 public channel 的流程,我们该来说说怎么跑通 private channel 了。

913
来自专栏嵌入式程序猿

赶快来更新你的bootloader吧

不知大家是否还记得在之前给大家介绍过NXP的kinetis bootloader1.2版本的, 嵌入式工程师必须会的技能:玩转bootloader 时隔一年多,...

3449
来自专栏Android 开发者

ProGuard 在 Android 上的使用姿势

2404
来自专栏jessetalks

C#移动跨平台开发(2)Xamarin移动跨平台解决方案是如何工作的?

概述   上一篇 C#移动跨平台开发(1)环境准备发布之后不久,无独有偶,微软宣布了开放.NET框架源代码并且会为Windows、Mac和Linux开发一个核心...

28211
来自专栏恰同学骚年

CMS项目实践学习总结

  这个暑假把ITCAST的2011年2月的.NET就业班的视频看了一遍,因为以前把免费的2010版和2011版的视频都看了一遍,所以这次选择了其中的几个部分作...

935
来自专栏北京马哥教育

CentOS 7.0.1406 正式版发布

美国当地时间2014年7月7日 17:39:42,CentOS官方放出CentOS7.0.140 64位的版本下载地址,主要更新:内核更新至 3.10.0、支持...

2616

扫码关注云+社区