生产误操作mv根分区问题(如何挂载其他硬盘的lvm卷)

2016/7/23 10:50 上午 目录  经验教训 评论

生产环境 centos7 Cloudthinking1.0.4

误操作过程

执行mv * /mysql_back命令,因为要讲mysql自动备份的数据库文件挪到对应文件夹下。但是执行该命令时所在路径为/ 根目录,导致将系统所有文件都挪到/mysqlbak 文件夹下,系统基本崩溃,除了bash的内建命令cd还能去ls 等/usr/bin系统命令都已经找不到。

恢复思路

  • 硬盘上的虚拟机系统重启已经无法启动
  • 硬盘上的数据只是被mv到/mysqlbak 文件夹下,应该还没有被删除
  • 需要通过介质(光盘或者u盘)中的linux系统启动(非救援模式,救援也无法重新整理整个操作系统的文件结构了,还有可能导致数据丢失)
  • 将硬盘挂在到光盘启动的微型Linux系统上,通过网络拷贝出去

配置光盘内的linux环境

  1. 通过光盘启动,选择安装Centos7

  2. 选择语言后,进入安装配置界面,不要配置硬盘,只配置网络(方便通过网络将数据拷出)

配置ip地址确保能够访问到接收数据的机器

检查旧硬盘上的文件系统,默认都是LVM

按下Ctrl+Alt+Win+ F2切换到安装光盘的Linux的后台终端界面
通过查看/dev /dev/mapper 及mount命令可以看到,光盘的linux系统并没有自动将硬盘的lvm识别,并加载,/dev/mapper 只有live-开头的光盘的lvm逻辑卷。

通过pvscan lvscan vgscan 命令可以看到实际上能够检索出lvm卷组,但是当前状态是inactive,需要激活 参考文章:Moving a volume group to another system

上图不清楚贴一个 虚拟机模拟环境截图

执行命令激活lvm卷组,并通过lvscan查看逻辑卷已经active,查看/dev/多了一个centos目录,并且旧硬盘的逻辑卷root也出现了

生产上的截图可以看出出现在了/dev/mapper 下

挂载旧硬盘的lvm卷组

带上 -o ro 参数,已只读模式访问硬盘数据,避免损失数据

检查旧数据完整性,迁移旧数据

可以看到mv命令把大部分数据都移到/mysqlbak 目录下,还有一部分因为权限或者关机的原因没有移动完,因此有可能数据文件没有丢失,但会有损坏

检查需要拷贝的数据文件,通过scp或者sftp等方式转移到新的环境,并导入新机器,启动测试数据是否完整。

迁移旧的mysql数据库文件到新的机器上去

参考MySQL数据库迁移
/var/lib/mysql 下所有文件(除了ib_logfile* 和 *.err)到新的机器下的/var/lib/mysql/文件夹下

注意修改权限 否则启动时会失败

chown -R mysql:mysql /var/lib/mysql/*