原文链接:http://www.prudentwoo.com/archives/559
“命令敲得多了,常在河边走,难免会湿鞋”
前几天,一手误,敲错了命令,把在线的ORACLE数据文件给rm -rf掉了,当时大脑翁的一下,彻底蒙了,10分钟内我什么也没有坐,让自己的情绪平和下来。想了下要怎么办,还好数据库是做了定时rman备份,直接将所有的数据库文件进行了restore和recover,索性比较顺利,如果不是备份的数据库文件被删除,那可能就得用到ext3grep工具来做恢复了。
通过这次的失误,总结血的教训:
1.再次验证rm是极其危险,小心,三思,或者直接将命令改写掉
2.所有的备份必须测试有效,能够快捷恢复
3.备份是一个长期的过程
首先,搞个回收站
1 | mkdir -p ~/.trash |
进入用户目录下,在 .bashrc或者.bash_profile加入如下内容
1 2 3 4 5 6 7 8 9 10 11 12 13 | alias rm=trash alias r=trash alias rl='ls ~/.trash' alias ur=undelfile undelfile() { mv -i ~/.trash/$@ ./ } trash()
{ mv $@ ~/.trash/ } |
同时在.bashrc中再添加如下函数,用来删除错误后可以直接通过回收站恢复:
1 2 3 4 5 | cleartrash() { read -p "clear sure?[n]" confirm [ $confirm == 'y' ] || [ $confirm == 'Y' ] && /usr/bin/rm -rf ~/.trash/* } |
将如上代码添加好后,重新登录用户后生效。
注:
rm 就相当于执行mv了,删除的文件会在.trash中出现
此时已经木有rm -rf了
通过unrm filename,则可以经删除的文件恢复。
通过 cleartrash,则清空回收站,从此不可再恢复。
egg:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | [root@db01 bak]# ll ---目录下是有两个目录和一个文件 ?? 8 drwxr-xr-x 2 root root 4096 11-15 11:42 mem drwxr-xr-x 2 root root 4096 11-15 11:42 prudent -rw-r--r-- 1 root root 0 11-15 11:42 prudent.log
[root@db01 bak]# rm * ---将所有文件删除后目录为空 [root@db01 bak]# ls
[root@db01 bak]# unrm prudent ---开始做数据恢复 [root@db01 bak]# unrm prudent.log [root@db01 bak]# unrm mem
[root@db01 bak]#ll ---恢复完成后数据回来了 ?? 8 drwxr-xr-x 2 root root 4096 11-15 11:42 mem drwxr-xr-x 2 root root 4096 11-15 11:42 prudent -rw-r--r-- 1 root root 0 11-15 11:42 prudent.log [root@db01 bak]# |