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

    文章

    11628

    浏览量

    218020
  • 终端
    +关注

    关注

    1

    文章

    1240

    浏览量

    31500

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

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

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

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

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

    NetApp存储数据恢复环境: NetApp某型号存储存储上有96块SAS接口硬盘,硬盘扇区大小是520字节。所有lun映射到小型机使用,存放Oracle数据库文件,采用ASM裸设备存储方式
    的头像 发表于 11-25 14:33 76次阅读
    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 178次阅读
    <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 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 509次阅读
    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 746次阅读
    服务器数据<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 609次阅读

    分布式存储数据恢复—虚拟机上hbase和hive数据库数据恢复案例

    分布式存储数据恢复环境: 16台某品牌R730xd服务器节点,每台服务器节点上有数台虚拟机。 虚拟机上部署Hbase和Hive数据库。 分布式存储故障: 数据库底层文件误删除,数据库不能使用。要求
    的头像 发表于 04-17 11:05 518次阅读

    服务器数据恢复—AIX小型机误删数据如何恢复

    和oradata2。 AIX小型机采用JFS2文件系统分配和管理逻辑卷。JFS2文件系统的根目录存储Oracle数据库核心文件(.dbf文件
    的头像 发表于 04-16 18:12 465次阅读
    服务器数据<b class='flag-5'>恢复</b>—AIX小型机<b class='flag-5'>误删</b>数据如何<b class='flag-5'>恢复</b>!

    CHK文件恢复专家辅助程序

    CHK文件恢复专家u盘文件格式的辅助程序 
    发表于 03-06 17:21 0次下载

    数据库数据恢复——MySQL数据库误删除表记录的数据恢复案例

    误操作,在用Delete命令删除数据时未添加where子句进行筛选导致全表数据被删除删除后未对该表进行任何操作。
    的头像 发表于 02-22 09:44 1209次阅读
    数据库数据<b class='flag-5'>恢复</b>——MySQL数据库<b class='flag-5'>误删除</b>表记录的数据<b class='flag-5'>恢复</b>案例

    优化企业数据处理效能:MySQL大规模应用中的顶尖实践与案例分析

    10点开发人员误删除一个核心业务表,如何恢复? 思路: 1)停业务避免数据的二次伤害 2)找一个临时的库,恢复前一天的全备 3)截取前一天23:00到第二天10点误删除之间的binlo
    的头像 发表于 02-10 11:20 715次阅读

    服务器数据恢复—Zfs文件系统服务器数据恢复案例

    服务器数据恢复环境&故障: 一台zfs文件系统的服务器,管理员误操作删除了服务器的数据。
    的头像 发表于 01-16 17:27 636次阅读

    Netapp数据恢复—Netapp存储误删除lun如何恢复数据?

    一台Netapp存储中有72块SAS硬盘,管理员误操作删除了12个lun。
    的头像 发表于 01-06 15:05 717次阅读
    Netapp数据<b class='flag-5'>恢复</b>—Netapp存储<b class='flag-5'>误删除</b>lun如何<b class='flag-5'>恢复</b>数据?

    Linux文件查找神器对决:Locate与find选谁

      注意 :如果这个文件删除了,locate就无法使用了。需手动手动更新数据库( updatedb ),重启系统,locate才能恢复作用 依赖于事先构建的索引: 索引的构建是
    的头像 发表于 12-18 14:00 898次阅读
    <b class='flag-5'>Linux</b><b class='flag-5'>文件</b>查找神器对决:Locate与find选谁