0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Linux上恢复误删除的文件或目录的小妙招

Q4MP_gh_c472c21 来源:21运维 作者:21运维 2021-11-18 11:33 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Linux不像windows有那么显眼的回收站,不是简单的还原就可以了。linux删除文件还原可以分为两种情况:一种是删除以后在进程存在删除信息,另一种是删除以后进程都找不到,只有借助于工具还原。这里分别简单介绍一下。

一、误删除文件进程还在的情况

这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程PID还是存在。这也就是有些服务器删除一些文件但是磁盘不释放的原因。比如,当前举例说明:通过一个shell终端对一个测试文件做cat追加操作:

[root@21yunwei_backup ~]# echo  "hello  py"> testdelete.py[root@21yunwei_backup ~]# cat  >> testdelete.py hello delete

另外一个终端查看这个文件可以清楚看到内容:

[root@21yunwei_backup ~]# cat testdelete.py hello  pyhello delete

此时,在当前服务器删除文件rm -f ./testdelete.py

命令查看这个目录,文件已经不存在了,那么现在我们将其恢复出来。

1、lsof查看删除的文件进程是否还存在

这里用到一个命令lsof,如没有安装请自行yum或者apt-get。类似这种情况,我们可以先lsof查看删除的文件是否还在:

[root@21yunwei_backup ~]# lsof | grep deletedmysqld     1512   mysql    5u      REG              252,306312397/tmp/ibzW3Lot (deleted)cat       20464    root    1w      REG              252,3231310722/root/testdelete.py (deleted)

幸运的是这种情况进程还存在 ,那么开始进行恢复 操作。

2、恢复

恢复命令:

cp /proc/pid/fd/1/指定目录/文件名

进入进程目录,一般是进入/proc/pid/fd/,针对当前情况:

[root@21yunwei_backup ~]# cd   /proc/20464/fd[root@21yunwei_backup fd]# lltotal 0lrwx------ 1 root root 64Nov1518:120> /dev/pts/1l-wx------ 1 root root 64Nov1518:121> /root/testdelete.py (deleted)lrwx------ 1 root root 64Nov1518:122> /dev/pts/1

恢复操作:

cp 1/tmp/testdelete.py

查看文件:

[root@21yunwei_backup fd]# cat  /tmp/testdelete.pyhello  pyhello delete

恢复完成。

二、误删除的文件进程已经不存在,借助于工具还原

创建准备删除的目录并echo一个 带有内容的文件:

[root@21yunwei_backup 21yunwei]# tree.├── deletetest│   └── mail│       └── test.py├── lost+found└── passwd3 directories, 2 files[root@21yunwei_backup 21yunwei]# cat /21yunwei/deletetest/mail/test.py hello Dj[root@21yunwei_backup 21yunwei]# tail  -2  passwd haproxy500:502::/home/haproxy:/bin/bashtcpdump72:72::/:/sbin/nologin

执行删除操作:

[root@21yunwei_backup 21yunwei]# rm  -rf    ./*[root@21yunwei_backup 21yunwei]# lltotal 0

现在开始进行误删除文件的恢复。这种情况一般是没有守护进程或者后台进程对其持续输入,所以删除就删除了,lsof也看不到。就要借助于工具。这里我们采用的工具是extundelete第三方工具。恢复步骤如下:

停止对当前分区做任何操作,防止inode被覆盖。inode被覆盖基本就告别恢复了。比如停止所在分区的服务,卸载目录所在的设备,有必要的情况下都可以断网。2.通过dd命令对当前分区进行备份,防止第三方软件恢复失败导致数据丢失。适合数据非常重要的情况,这里测试,就没有备份,如备份可以考虑如下方式:

dd if=/path/filename of=/dev/vdc1

通过umount命令,对当前设备分区卸载。或者fuser 命令。

umount /dev/vdb1 或者 umount /21yunwei

如果提示设备busy,可以用fuser命令强制卸载:

fuser -m -v -i -k /21yunwei

下载第三方工具extundelete安装,搜索误删除的文件进行还原。

wget  http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2tar jxvf extundelete-0.2.4.tar.bz2cd  extundelete-0.2.4./configure makemake  install

扫描误删除的文件:

[root@21yunwei_backup extundelete-0.2.4]# extundelete  --inode 2/dev/vdb1NOTICE: Extended attributes are not restored.Loading filesystem metadata ... 8 groups loaded.Group: 0Contents of inode 2:..省略N行File name                                       | Inode number | Deleted status.                                                 2..                                                2lost+found                                        11Deleteddeletetest                                        12Deletedpasswd                                            14Deleted

通过扫描发现了我们删除的文件夹,现在执行恢复操作。

1、恢复单一文件passwd

[root@21yunwei_backup /]# extundelete /dev/vdb1 --restore-file passwd   NOTICE: Extended attributes are not restored.Loading filesystem metadata ... 8 groups loaded.Loading journal descriptors ... 46 descriptors loaded.Successfully restored file passwd

恢复文件是放到了当前目录RECOVERED_FILES。查看恢复的文件:

[root@21yunwei_backup /]# tail  -5  RECOVERED_FILES/passwd mysql497:500::/home/mysql:/bin/falsenginx496:501::/home/nginx:/sbin/nologinzabbix495:497:ZabbixMonitoringSystem:/var/lib/zabbix:/sbin/nologinhaproxy500:502::/home/haproxy:/bin/bashtcpdump72:72::/:/sbin/nologin

2、恢复目录deletetest

[root@21yunwei_backup /]# extundelete /dev/vdb1 --restore-directory  deletetest NOTICE: Extended attributes are not restored.Loading filesystem metadata ... 8 groups loaded.Loading journal descriptors ... 46 descriptors loaded.Searchingfor recoverable inodes in directory deletetest ... 5 recoverable inodes found.Looking through the directory structure for deleted files ... [root@21yunwei_backup /]# cat  RECOVERED_FILES/deletetest/mail/test.py hello Dj

3、恢复所有

[root@21yunwei_backup /]# extundelete /dev/vdb1 --restore-allNOTICE: Extended attributes are not restored.Loading filesystem metadata ... 8 groups loaded.Loading journal descriptors ... 46 descriptors loaded.Searchingfor recoverable inodes in directory / ... 5 recoverable inodes found.Looking through the directory structure for deleted files ... 0 recoverable inodes still lost. [root@21yunwei_backup /]# cd RECOVERED_FILES/[root@21yunwei_backup RECOVERED_FILES]# tree.├── deletetest│   └── mail│       └── test.py└── passwd2 directories, 2 files

4、恢复指定inode

[root@21yunwei_backup /]# extundelete /dev/vdb1 --restore-inode 14NOTICE: Extended attributes are not restored.Loading filesystem metadata ... 8 groups loaded.Loading journal descriptors ... 46 descriptors loaded.[root@21yunwei_backup /]# tail  -5/RECOVERED_FILES/file.14mysql497:500::/home/mysql:/bin/falsenginx496:501::/home/nginx:/sbin/nologinzabbix495:497:ZabbixMonitoringSystem:/var/lib/zabbix:/sbin/nologinhaproxy500:502::/home/haproxy:/bin/bashtcpdump72:72::/:/sbin/nologin

注意恢复inode的时候,恢复出来的文件名和之前不一样,需要单独进行改名。内容是没问题的。

更多的extundelete用法请参考extundelete –help选项参数说明,当前恢复所有的操作完成。

来源:www.21yunwei.com/archives/6030
版权归原作者所有,如有侵权,请联系删除。
编辑:jq
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11807

    浏览量

    219512
  • 终端
    +关注

    关注

    1

    文章

    1267

    浏览量

    31723

原文标题:如何在Linux上恢复误删除的文件或目录?

文章出处:【微信号:gh_c472c2199c88,微信公众号:嵌入式微处理器】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    Linux Kernel 6.1 tools目录全解析 | RK平台ARM64交叉编译实战指南

      瑞芯微( RK ) ARM64 平台嵌入式 Linux 开发、内核调试与硬件外设测试中, Linux 内核源码自带的 tools 目录 是官方标配的工具集合,涵盖性能分析、设备调
    的头像 发表于 04-16 18:42 4936次阅读
    <b class='flag-5'>Linux</b> Kernel 6.1 tools<b class='flag-5'>目录</b>全解析 | RK平台ARM64交叉编译实战指南

    无法获得 StarFive 运行的 StarFive Linux 映像的 55 69 版本,怎么解决?

    我是 VisionFive 2 的超级早鸟支持者,我无法获得 StarFive 运行的 StarFive Linux 映像的 55 69 版本。绿色 LED 永远不会亮起。我尝
    发表于 03-20 07:39

    Linux文件删除的底层原理和恢复方法

    rm -rf 大概是 Linux 世界里杀伤力最大的命令,没有之一。手一抖、路径一错、通配符一飘,几个 G 的数据就没了。更要命的是 Linux 默认没有回收站机制,rm 删掉的文件不会像 Windows 那样安静地躺在回收站里
    的头像 发表于 02-11 09:14 878次阅读

    虚拟机数据恢复—虚拟机vmdk文件删除的数据恢复案例

    xxx-flat.vmdk磁盘文件和xxx-000001-delta.vmdk快照文件还在。管理员尝试恢复时,删除了原虚拟机内的xxx-flat.vmdk,新建了一个虚拟机,分配了20
    的头像 发表于 02-10 17:05 475次阅读
    虚拟机数据<b class='flag-5'>恢复</b>—虚拟机vmdk<b class='flag-5'>文件</b>被<b class='flag-5'>删除</b>的数据<b class='flag-5'>恢复</b>案例

    飞凌嵌入式ElfBoard-读取软连接文件删除目录

    rmdir用于删除目录。1.头文件#include 2.函数原型int rmdir(const char *pathname);3.参数pathname:要删除
    发表于 01-05 08:44

    飞凌嵌入式ElfBoard-创建目录

    Linux系统中,目录也是系统中的一种特殊文件,毕竟Linux系统中一切皆文件
    发表于 01-04 09:30

    Netapp数据恢复误删NetApp卷数据:从崩溃到恢复的实战复盘

    NetApp存储数据恢复环境: NetApp某型号存储存储上有96块SAS接口硬盘,硬盘扇区大小是520字节。所有lun映射到小型机使用,存放Oracle数据库文件,采用ASM裸设备存储方式
    的头像 发表于 11-25 14:33 321次阅读
    Netapp数据<b class='flag-5'>恢复</b>—<b class='flag-5'>误删</b>NetApp卷数据:从崩溃到<b class='flag-5'>恢复</b>的实战复盘

    Linux新手通关!5分钟掌握文件/目录管理,告别“找不到北”

    新手入门:Linux 文件 / 目录管理实操指南 刚上手 Linux 的小伙伴,是不是常陷入这些 “混乱时刻”:想找的文件藏在层层
    的头像 发表于 11-17 10:42 610次阅读
    <b class='flag-5'>Linux</b>新手通关!5分钟掌握<b class='flag-5'>文件</b>/<b class='flag-5'>目录</b>管理,告别“找不到北”

    Windows10运行vivado使用tcl文件创建E203项目路径错误的问题

    prologue_setup.tcl文件后,都会出现文件路径不匹配,总是路径前多出一个盘符加冒号,类似“e:e:....”,所以查阅了相关资料后,手动将prologue_setup
    发表于 10-28 07:19

    飞凌嵌入式ElfBoard-Linux系统基础入门-文件操作相关shell命令

    时保留链接-f强制复制,如果目标文件已存在则删除不提示-i若存在目标文件需要用户确认操作-p将访问权限以及修改时间也复制到新文件中-r递归复制目录
    发表于 09-30 09:46

    飞凌嵌入式ElfBoard ELF 1板卡-Linux系统基础入门-目录相关shell命令

    示例:rm删除命令命令:rm英文全拼:remove功能:删除文件目录,不管目录是否非空。参数:rm [选项]
    发表于 09-29 10:12

    Mysql数据恢复—Windows Server下MySQL(InnoDB)全表误删数据恢复案例

    本地服务器,操作系统为windows server。服务器上部署mysql单实例,innodb引擎,独立表空间。未进行数据库备份,未开启binlog。 人为误操作使用Delete命令删除数据时未添加where子句,导致全表数据被删除
    的头像 发表于 09-23 15:56 849次阅读
    Mysql数据<b class='flag-5'>恢复</b>—Windows Server下MySQL(InnoDB)全表<b class='flag-5'>误删</b>数据<b class='flag-5'>恢复</b>案例

    服务器数据恢复—服务器的卷被误删数据如何恢复

    工作人员不慎将一台服务器的卷误删除,服务器上有一组raid5阵列。需要恢复误删除的数据。
    的头像 发表于 08-14 11:33 1095次阅读
    服务器数据<b class='flag-5'>恢复</b>—服务器<b class='flag-5'>上</b>的卷被<b class='flag-5'>误删</b>数据如何<b class='flag-5'>恢复</b>?

    Linux系统目录结构全面剖析

    Linux文件系统采用层次化的目录结构,这种设计遵循了Unix哲学中的"一切皆文件"原则。理解Linux
    的头像 发表于 07-21 17:33 968次阅读

    服务器数据恢复Linux系统服务器崩溃的数据恢复案例

    服务器数据恢复环境: linux操作系统服务器中有一组由4块SAS接口硬盘组建的raid5阵列。 服务器故障: 服务器工作过程中突然崩溃。管理员将服务器操作系统进行了重装。 用户方需要恢复服务器中的数据库、办公文档、
    的头像 发表于 05-20 15:46 987次阅读