一个迷糊就把专门存放重要文件的目录 rm 掉了,心都在滴血了,,,
分别使用了debugfs、extundelete进行文件恢复,但debugfs恢复出来的是乱码;extundelete恢复过程中因只有一个硬盘无法umount(只因以前在安装RHEL的时候只划分一个硬盘,挂载在根目录上)。实操过程中出现一些问题及解决方法,遂对其进行记录总结。
extundelete的安装恢复操作过程可以参考博客文章,链接为:link
(1)tar解压缩下载的extundelete包后,在root下执行./configure,出现缺少 ext2fs库 的问题,可通过
sudo yum install e2fslibs*
进行依赖包的下载安装,我使用此命令并不能解决此问题 。
然后也尝试了在yum的核心配置文件夹(/etc/yum.repos.d/)下添加其他的国内下载地址,但也解决不了问题 。
解决方法: 后查找原因得知我的linux上缺少yum本地源镜像,遂通过查找安装对应版本的mirror包,实现相应镜像源的安装。此部分可参考链接:link2; 以及配置本地源后出现的 “Error parsing config…” 的解决办法:link3。
安装完本地mirror后,通过命令
yum list | grep e2fs
查找e2fs相关的软件包,再将未安装的包用** yum install e2fsxxxx.xxxx **进行安装。完成后再执行 ./configure、make、make install命令完成安装。
(1)当安装完成后可以通过在terminal中输入
extundelete -v
进行验证是否安装成功。如果成功,会返回显示安装版本号信息等。
(2)可通过命令
lsblk -f 或者命令 df -hl
进行查看磁盘树分区及相应的挂载点信息等。记录误删文件所在的磁盘Filesystem信息(如/dev/sda1)用于后续文件恢复前的磁盘解挂/挂载操作。
(3)但我遇到的问题是,在普通用户模式下,输入
extundelete --inode 2 /dev/sdb1
进行扫描误删除的文件,会返回extundelete:Permission denied when trying to open filesystem /dev/sdb1的问题;但使用超级用户模式的情况下,输入上述命令,它又会返回bash:extundelete:command not found的错误。(在普通用户模式下,已经验证了extundelete安装成功。)
解决方法: 在进入超级用户root时,输入命令
sudo su -
注意: su后面接【(空格)- 】。
此时,可在超级用户root下,使用extundelete进行2级目录下的误删除文件扫描分析。【出现Command not found的原因在于:在终端使用su变成超级用户的时候没有将root的路径环境一起切换过来,从而导致身份虽然已经是root,但是工作的环境和路径依旧是普通用户的。使用“sudo su -”可以在成为root的同时将root的工作路径也一起切换过来了。】
(1)误删文件后,不要再对该磁盘进行任何写入操作;
(2)立即对该磁盘分区进行解挂操作,命令如下
umount /dev/sdb1
如果上述命令提示busy,需要使用如下命令强制解挂:
fuser -m -v -i -k /home/IC_file
其中,我将新磁盘 /dev/sdb1 挂载在 /home/IC_file 路径下,所以使用 fuser 命令后面接的就是磁盘所在挂载点。
注意: 此时会提示kill一些进程的信息,输入y继续即可。然后便会退出 root 模式,进入普通用户模式,同时路径会自动进入 未解挂的磁盘 的home目录下。此情况下,再输入 ** sudo su - ** 命令,重新进入 root 模式,进行后续 extundelete 操作【下面(3)…】。
(3)使用extundelete进行误删文件扫描;
extundelete --inode 2 /dev/sdb1
(4)误删文件恢复:
extundelete /dev/sdb1 --restore-file del_file1 //恢复误删单个文件:del_file1
extundelete /dev/sdb1 --restore-directory del_directory //恢复误删文件目录:del_directory
extundelete /dev/sdb1 --restore-all //恢复误删的所有文件
(5)恢复出来的文件/目录都保存在未解挂的磁盘文件目录 RECOVERED_FILES 中,且有些文件的名字已经更改,需要自己辨认解决。
(6)恢复文件结束后,挂载被解挂的磁盘:
mount /dev/sdb1 /home/IC_file
即将磁盘 /dev/sdb1 重新挂载到 /home/IC_file上面,方可访问 /home/IC_file 内的文件信息。
注意: mount 及 umount 操作都需要进入 root 下进行。
挂载/解挂后,可通过lsblk -f 、 df -hl 或者 df /home/IC_file 命令查看是否 挂载上/解挂掉 相应的磁盘。