手一抖误删了根目录 /usr 之后的挽救过程
一切悲剧来源于写的Shell没有好好检查,执行后把开发机的根目录 /usr 目录给删除了,而且是root执行,众所周知,/usr目录里有大量的应用层程序,删除之后导致大量命令无法使用,如 ssh / rz / sz / nc / wget /yum 等,不夸张地说,当时就要不行了。。好吧,首先想到的挽救方式就是到另一个虚拟机下将 /usr目录整个拷贝过来,然而发现,没有命令可以往这台机器里拷东西了,上天入地无门。。
好在,这台机器是虚拟机,一切都是虚的,虚的比实的更能应付变化(在某些情况下不对,后面说)。。
于是,用vmware的虚拟磁盘热加载特性,赶紧开了另一个虚拟centos机(后面一律用centos-rescue指明),然后添加一个全新的虚拟磁盘,挂载之后,将 /usr 目录拷贝到挂载的目录,解除挂载,卸掉虚拟磁盘。然后再加入出事的虚拟机(后面一律叫 centos-pity),同样是挂载,将 /usr 拷贝到根 / 目录下,拷贝完立马执行几个命令试试 wget / rpm / yum 发现, 有些命令能成功,有些提示依赖的 .so 缺失,明显是 yum 系统乱了。。。尼玛哪都可以乱,yum 包管理课别乱,哎!
于是,开始整理yum系统,由于 centos-pity 是主要工作用的开发机,里边安装了大量开发使用的第三方包,主要是c库和python库,整个整理过程历时2个小时左右,只要是各种 yum -y remove XXX 然后 yum -y install XXX , 即将原有的东西先删除然后再安装。。最后,终于看起来yum系统稳定了,到一个C项目里执行 configure && make 都正常了,好开心。。
打铁趁热,之前那么被动就是因为吃了没有及时快照的苦,赶紧关了centos-pity , 用vmware打了个漂亮的快照,心里的石头放下了,开启虚拟机打算进入正常工作,然后,centos-pity 启动比之前慢了好多,最后停止了(一段白条),按F5看输出,尼玛的! lv-root 没有能正常启动。。,直观感觉,往根分区硬删掉一块东西再拷入一块大小不一样的东西,会将分区搞坏,这下事情搞大了。。
这里介绍一下centos-pity的硬盘和分区情况,一开始新建虚拟机时用了一块默认的硬盘20G,叫 sda 然后安装了 centos-6.2-minimal, 这个发行版会将/sda切成两块 , /sda1 挂载到 /boot 目录并安装系统, /sda2 变成一个pv并加入一个默认叫 VolGroup 的逻辑卷组,在VolGroup卷组上再新建2个逻辑分区 lv-root ,lv-swap, 其中,lv-root作为根分区挂载的是根目录 / , 我的主要工作就是在根目录 / 下,比如开发环境安装在 /usr 下,项目代码在 /data 下, 用了一段时间后,磁盘空间不够了,我又增加了一块虚拟硬盘,叫 sdb(100G) ,然后在上面新建pv,同样加入 VolGroup , 然后为 lv-root 逻辑分区扩容,扩到100G 左右。。
所以,lv-root 一出问题,心就慌了,里面是几个月的工作。。
初始想法还是利用 centos-rescue, 赶紧将 sda sdb 从 centos-pity 卸载,然后插入centos-rescue 上, Centos-rescure 是默认安装得到的,只有一块硬盘20G,分区类似上面说的sda1 , sda2(lvm) 的情况,现在centos-pity的两块虚拟硬盘加入后,作为 centos-rescue 的 sdb ,sdc 出现, 系统启动后,又傻了。 centos 默认建立的逻辑眷族都叫 VolGroup , 这导致出现了名字冲突而无法正常使用(两个VolGroup, 两个 lv-root 等) ,之前在另外的场合试图人工修改过lvm名字冲突问题,深知水很深,这次不打算人工搞。。
于是,先将 sdb sdc 又卸载了,然后再进入 centos-rescue , 没错,我打算直接改掉 centos-rescue的默认卷组的名字
vgrename VolGroup VolGroupNew
vgchange -ay VolGroup
执行完后用 vgs, lvs 等查看都是正常的,好吧,插入 sdb sdc 再次重启,又傻了。。。kernel panic ,挖了了去。。
一番搜索,发现lvm尼玛是傻逼,vgrename改名字后,尼玛不会自己修改 /boot/grub/grub.cfg 配置里的名字,grub.cfg boot选项还是从 VolGroup-lv-root 启动,而这个分区已经没有了,好吧,人工修改为 VolGroupNew-lv-root 并将其他地方都换为 VolGroupNew ,再重启, 又傻了。。。filesystem checking 失败,挖了个去。。
一番搜索,发现lvm真是傻逼,/etc/fstab 里的挂载项目也需要人工修改,修改后再重启,这次OK了,lvs一下出现
lv_root VolGroup -wi-ao---- 96.57g
lv_swap VolGroup -wi-a----- 1.94g
lv_root VolGroupNew -wi-ao---- 17.57g
lv_swap VolGroupNew -wi-ao---- 1.94g
centos-pity 的两个盘都以 lvm 逻辑分区的形式在 centos-rescure出现了,赶紧将 /dev/VolGroup/lv_root 挂载到一个目录,然后将里边重要的目录拷贝出来,这里因为前面lvm各种折磨,不打算用 lvm 了,直接用 vmware 新增一个普通的虚拟磁盘,叫 sdd , 这块就是干净的普通磁盘,mkfs.ext4 新建一个文件系统并挂载,然后将重要的项目文件拷进去,再卸载。 然后将这个虚拟磁盘放入 360 云盘里,直接上传到云。。这叫吃一亏长一智,以后重要的项目数据都这么来,直接用普通虚拟磁盘不做任何lvm,空间不够增加磁盘就行了,磁盘文件都放入云盘及时同步,也不用惦记着去做快照了,一旦发生问题,新建一台虚拟机,挂上虚拟磁盘,屁事没有,又可以开始工作了。。
好了,数据算是挽救回来了,接下去想救救 centos-pity , 于是再将磁盘挂回去启动,出现错误
"打不开文件“E:\00-worker-centos\centos-pity.vmdk”:
该虚拟机的某个磁盘已经由虚拟机或者快照使用。"
这个错误还没解决,据说是因为虚拟机centos-pity记录了一些中间状态导致的。反正数据救回来了,开发环境有专门的脚本安装,干脆新建个虚拟机重建一个系统,再用安装脚本安装开发环境。
参考
http://www.novell.com/coolsolutions/appnote/19386.html
http://www.duo66.com/post-4095.html
手一抖误删了根目录 /usr 之后的挽救过程的更多相关文章
- linux下rm -r误删NTFS文件恢复方法
一时疏忽,手一抖,把整个挂载的F盘删了一半!顿时傻眼!! 被删的F盘是Windows下NTFS分区,在Ubuntu12.04中挂载了F盘,使用rm命令时粗心大意,误删了一半的数据. 血的教训告诉我们, ...
- mysql误删数据快速恢复
相信后端研发的同学在开发过程经常会遇到产品临时修改线上数据的需求,如果手法很稳那么很庆幸可以很快完成任务,很不幸某一天突然手一抖把表里的数据修改错误或者误删了,这个时候你会发现各种问题反馈接踵而来.如 ...
- Linux Shell 从入门到删除根目录跑路指南
1.变量为空导致误删文件base_path=/usr/sbintmp_file=`cmd_invalid`# rm -rf $base_path/$tmp_file这种情况下如果 cmd 执行出错或者 ...
- shell 如何避免误删目录
1.变量为空导致误删文件 base_path=/usr/sbin tmp_file=`cmd_invalid` # rm -rf $base_path/$tmp_file 这种情况下如果 cmd 执行 ...
- 前端福利,用 JS 就能实现抖音养号等诸多功能
我是风筝,公众号「古时的风筝」,一个不只有技术的技术公众号,一个在程序圈混迹多年,主业 Java,另外 Python.React 也玩儿的 6 的斜杠开发者. Spring Cloud 系列文章已经完 ...
- 【转】手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)
1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理! 我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...
- 手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)
1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理! 我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...
- Microsoft Tech Summit 2018 课程简述:利用 Windows 新特性开发出更好的手绘视频应用
概述 Microsoft Tech Summit 2018 微软技术暨生态大会将于10月24日至27日在上海世博中心举行,这也会是国内举办的最后一届 Tech Summit,2019 年开始会以 Mi ...
- 如何在linux设置回收站
修改用户的环境变量 vi ~/.bashrc 注释第5行的别名 #alias rm='rm -i' 最后一行添加如下内容 mkdir -p ~/.trash alias rm=trash alias ...
随机推荐
- 笔记-scrapy-cookie
笔记-scrapy-cookie传递 1. scrapy cookie传递 1.1. 开始 与cookie相关的设置参数有两个: COOKIES_ENABLED 决定是否使用cooki ...
- P2183 巧克力(二分答案)
P2183 巧克力 题目描述 佳佳邀请了M个同学到家里玩.为了招待客人,她需要将巧克力分给她的好朋友们.她有N(1<=N<=5000)块巧克力,但是大小各不一样,第i块巧克力大小为为1*X ...
- VSX-2 搭建项目
由于是公司的项目,也不可能直接拿过来写博客,所以准备搭建一个自己的VSX项目. 项目需求这里就不写了,大体可参考曾经的一篇文章,这个VSX项目就是用来简化插件式开发. 本文开始正式记录做这个VSX项目 ...
- 剑指Offer - 九度1510 - 替换空格
剑指Offer - 九度1510 - 替换空格2013-11-29 20:53 题目描述: 请实现一个函数,将一个字符串中的空格替换成“%20”.例如,当字符串为We Are Happy.则经过替换之 ...
- python3知识点之---------字符串的介绍
1. 定义 其实字符串就是一系列字符,用引号括起来的就是字符串,其中的引号可以是单引号或者双引号. 比如 "This is a string" 'This is a strin ...
- Python全栈工程师(列表、拷贝)
ParisGabriel 感谢 大家的支持 你们的阅读评价就是我最好的更新动力 我会坚持吧排版做的越来越好 每天坚持 一天一篇 点个订阅吧 灰常感谢 当个死粉也阔以 Py ...
- 孤荷凌寒自学python第二十五天初识python的time模块
孤荷凌寒自学python第二十五天python的time模块 (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 通过对time模块添加引用,就可以使用python的time模块来进行相关的时间操 ...
- 编译Code::Blocks源码 with MinGW on Win
Build Code::Blocks源码 ---By 狂徒归来 CodeBlocks是一款非常优秀的IDE !可惜的是没有64位的版本,而且本来是轻量级别的IDE就应该够轻,能够像记事本工具一样,迅速 ...
- Error “can't use subversion command line client : svn” Probably the path to Subversion executable is wrong
错误提示如图. 大概意思就是SVN路径不对 解决方法如下: 首先下载Subversion 1.8.13(1.8) 下载链接(https://www.visualsvn.com/downloads/) ...
- JavaScript里面的基本函数
1.主要有三类基本函数 <script type="text/javascript"> // 普通函数 function func1(arg){ return true ...