生产误操作mv根分区恢复数据过程
误操作恢复记录(如何挂在其他硬盘的lvm卷)
生产环境 CentOS7
误操作过程
执行mv * /mysql_back命令,因为要讲mysql自动备份的数据库文件挪到对应文件夹下。但是执行该命令时所在路径为/ 根目录,导致将系统所有文件都挪到/mysqlbak 文件夹下,系统基本崩溃,除了bash的内建命令cd还能去ls 等/usr/bin系统命令都已经找不到。
恢复思路
- 硬盘上的虚拟机系统重启已经无法启动
- 硬盘上的数据只是被mv到/mysqlbak 文件夹下,应该还没有被删除
- 需要通过介质(光盘或者u盘)中的linux系统启动(非救援模式,救援也无法重新整理整个操作系统的文件结构了,还有可能导致数据丢失)
- 将硬盘挂在到光盘启动的微型Linux系统上,通过网络拷贝出去
配置光盘内的linux环境
通过光盘启动,选择安装Centos7
选择语言后,进入安装配置界面,不要配置硬盘,只配置网络(方便通过网络将数据拷出)
配置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/文件夹下
注意修改权限 否则启动时会失败