百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Linux下恢复rm删除的文件(linux 恢复误删文件)

nanshan 2024-11-04 13:06 13 浏览 0 评论

导读

在日常的运维工作中,大部分OP都习惯性的经常rm -rf 命令用于文件目录的删除,通过命令“rm -rf”可以将任何数据直接从硬盘删除,并且没有任何提示,同时Linux下也没有与Windows下回收站类似的功能,也就意味着,数据在删除后通过常规的手段是无法恢复的。所以当出现误操作时,很难快速的找回被删除的文件。

数据恢复工作选择

在Linux下,基于开源的数据恢复工具有很多,常见的有debugfs、R-Linux、ext3grep、extundelete等,比较常用的有ext3grep和extundelete,这两个工具的恢复原理基本一样,只是extundelete功能更加强大,本文重点介绍extundelete的使用。

数据恢复原理

首先我们稍微复习一下计算机基础知识:

硬盘

硬盘是一种采用磁介质的数据存储设备,数据『物理意义上的』存储在若干个磁盘片上。在磁盘片的每一面上,以转动轴为轴心、以一定的磁密度为间隔的若干个同心圆就被划分成磁道(track),每个磁道又被划分为若干个扇区(sector)。

主引导扇区和分区表

硬盘的0磁道0柱面1扇区是主引导扇区位,包括硬盘主引导记录MBR(Main Boot Record)和分区表DPT(Disk Partition Table)。操作系统通过分区表把硬盘划分为若干个分区,然后再在每个分区里面创建文件系统,写入数据文件。

分区日志

分区日志系统是一个文件系统,用于修复由于计算机关闭不当而导致的任何不一致。这种关闭通常是由于电源中断或软件问题造成的。即记录了分区的数据读写操作。通过这些日志,可以知道分区中的历史操作。

数据存储

具体的数据存储原理内容比较多,这里不做过多的概述。为了便于理解,可在此理解为:

操作系统中的文件在硬盘的表现形式是在硬盘一片数据区域记录二进制信息,并由操作系统的一个指针指向该物理地址

而操作系统级别的『删除文件』,即删除这个『指针』

原来的物理地址内没有『指针』指向后,相当于被释放,当操作系统需要时,可以被复写上新的数据。

由此得知,extundelete 通过查阅分区日志,找到被删除的指针,告诉用户,可以尝试恢复哪些数据。但由于操作系统随时可以复写空余磁盘,所以如果要恢复的物理地址已经被改写,数据将无法找回。

解决方案演示

演示环境:

操作系统: CentOS 6

需要恢复的文件: /mnt/data1/tmpdir/testDelete/test.log

1.创建文件

2.删除文件

3.安装 extundelete文件恢复工具

执行命令: yum install extundelete -y

4.查询被删除文件所处磁盘

[root@master-worksvr testDelete]# df /mnt/data1/tmpdir/testDelete
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 142433064 129081532 6116360 96% /mnt/data1

5.卸载磁盘,保护现场

umount /dev/sda3
备注: 不卸载也可以,这样会导致磁盘可能会被其他的进程写入数据,从而抹掉原来的数据,建议卸载

6.获取磁盘根inode值

磁盘根目录的inode值,一般情况下为2

[root@master-worksvr testDelete]# ls -id /
2 /

7.查询可恢复的数据

extundelete /dev/sda3 --inode 2 

从上图可看出tmpdir 的 inode 是 2883585,继续根据tmpdir的inode查询

extundelete /dev/sda3 --inode 2883585

从上图可看出testDelete 的 inode 是 2941415,继续根据testDelete的inode查询

extundelete /dev/sda3 --inode 2941415

最终找到了被删除的文件,也就意味着test.log这个我们之前删除的文件,是可以被恢复出来的。

8.恢复数据

采用extundelete命令恢复数据:

1.恢复单个文件使用参数“--restore-file”,恢复单个目录使用参数“--restore-directory”,需要使用文件的相对路径。

2.文件恢复成功后,在执行extundelete命令的当前目录下会创建一个RECOVERED_FILES目录,用于存放恢复出来的文件。

实际操作:

[root@master-worksvr ~]# extundelete /dev/sda3 --restore-file /tmpdir/testDelete/test.log
NOTICE: Extended attributes are not restored.
Loading filesystem metadata ... 1104 groups loaded.
Loading journal descriptors ... 32255 descriptors loaded.
Successfully restored file /tmpdir/testDelete/test.log
[root@master-worksvr ~]# cat ./RECOVERED_FILES/tmpdir/testDelete/test.log 
TestDelteFile
[root@master-worksvr ~]#
#若文件无法恢复,则会抛出: No files were undeleted.

extundelete还有其他很强大的功能在此就不演示,下面为extundelte命令相关参数的解释,可供参考:

命令格式: extundelete [options] [--] device-file
其中,参数(options)有:
--version, -[vV],显示软件版本号。
--help,显示软件帮助信息。
--superblock,显示超级块信息。
--journal,显示日志信息。
--after dtime,时间参数,表示在某段时间之后被删的文件或目录。
--before dtime,时间参数,表示在某段时间之前被删的文件或目录。
动作(action)有:
--inode ino,显示节点“ino”的信息。
--block blk,显示数据块“blk”的信息。
--restore-inode ino[,ino,...],恢复命令参数,表示恢复节点“ino”的文件,恢复的文件会自动放在当前目录下的RESTORED_FILES文件夹中,使用节点编号作为扩展名。
--restore-file 'path',恢复命令参数,表示将恢复指定路径的文件,并把恢复的文件放在当前目录下的RECOVERED_FILES目录中。
--restore-files 'path',恢复命令参数,表示将恢复在路径中已列出的所有文件。
--restore-all,恢复命令参数,表示将尝试恢复所有目录和文件。
-j journal,表示从已经命名的文件中读取扩展日志。
-b blocknumber,表示使用之前备份的超级块来打开文件系统,一般用于查看现有超级块是不是当前所要的文件。
-B blocksize,通过指定数据块大小来打开文件系统,一般用于查看已经知道大小的文件。

注意事项

服务器的数据一定要及时备份或做好容灾,防止丢失。希望大家都不要出现这样的悲剧。

若在实际操作过程有相关问题,欢迎和我一起探讨!

相关推荐

Linux 的磁盘系统,和你了解的Windows差别很大

我的C盘去哪了?一个系统,如果没有存储,那么也就不能称之为系统。存储性是一个完整系统的重要组成部分。例如AWS最开始的服务就是S3(用来存储数据的云服务),足以见得存储对于一个应用平台是多么的重要。...

一文读懂 Linux 硬盘挂载:从问题到解决方案

各位互联网大厂的后端开发伙伴们!在咱们日常工作中,操作Linux系统是常有的事儿吧。你们有没有遇到过这样的场景:新添加了一块硬盘,满心欢喜准备用来存储重要数据或者部署新的应用服务,却突然发现不知道...

硬盘分区(硬盘分区格式)

 磁盘(硬盘)分区,可以分C、D、E等分区,大家可能都会用,会根据自已的需要确定所需的空间,但分区是如何工作的呢,内容如下。Windows中有3类:MBR分区:MasterBootRecord,也...

parted命令工具分区介绍(particle命令)

linux系统磁盘分区通常可以使用fdisk和parted命令,当分区大小小于2TB的时候,两种皆可以使用,当分区大于2TB的话,就需要用parted分区。以下介绍parted命令相关使用,以sdb为...

Linux 服务器上查看磁盘类型的方法

方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。NAME列显示设备名称(如sda、nvme0n1)。TR...

Linux分区命令fdisk和parted使用介绍

摘要:一般情况下,Linux分区都是选择fdisk工具,要求硬盘格式为MBR格式,能支持的最大分区空间为2T。但是目前在实际生产环境中使用的磁盘空间越来越大,呈TB级别增长;而常用的fdisk这个工具...

linux 分区原理与名词解释(linux操作系统中的分区类型)

分区的意义将磁盘分成几份,每份挂在到文件系统的那个目录在linux里的文件系统Ext2:早期的格式,不支持日志功能Ext3:ext2改良版,增加了日志功能,是最基本且最常用的使用格式了Ext4:针对e...

linux 分区合并(linux合理分区)

查看虚拟机当前磁盘挂载情况fdisk-l选择磁盘fdisk/dev/sda查看磁盘分区情况p重新选择分区n选择主分区p保存w创建物理卷pvcreate/dev/sda3查看物理卷信息pvdi...

如何在 Linux 系统中永久禁用交换分区 ?

Linux操作系统中的交换分区或交换文件充当硬盘上的临时存储区域,当物理内存(RAM)满时,系统使用该存储区域。它用于交换较少使用的内存页,这样系统就不会因为运行应用程序而耗尽物理内存。随着技术的发...

Linux 如何知道硬盘已用多少空间、未用多少空间

刚出社会时,去了一家公司上班,老板为了省钱,买的服务器是低配的,硬盘大小只有40G,有一次网站突然不能访问了,排查半天才知道原来服务器的硬盘空间已用完,已无可用空间。第一步是查看硬盘的使用情况,第二步...

用Linux系统管理磁盘空间 就该这么来

要想充分有效的管理使用Linux系统中的存储空间,用户必须要做的就是双管齐下,一边扩充空间一边限制空间。不得不说的就是很多时候磁盘空间就像水资源,需节制水流。说到要如何实现限制空间就离不开使用LVM技...

Windows 11 磁盘怎么分区?(windows11磁盘怎么分区)

Windows11磁盘分区技术解析与操作指南:构建高效存储体系一、磁盘分区的技术本质与系统价值磁盘分区作为存储系统的基础架构,通过逻辑划分实现数据隔离与管理优化。Windows11采用NTF...

linux上创建多个文件分区,格式化为 ext2、ext3、ext4、XFS 文件

以下是在Linux系统上创建多个20GB文件分区并格式化为不同文件系统的分步指南:步骤1:创建基础文件(4个20GB文件)bash#创建4个20GB稀疏文件(实际占用空间随写入量增长)ddif=/...

救命的U盘低格哪家最强?(低格优盘)

周二时有位童鞋留言说U盘之前做过引导盘,现在格式化不了,用各种工具都不行,而且因为U盘厂商的关系,查不到U盘主控,无法量产恢复,特来求助。小编花了点时间特意弄坏一个U盘分区,终于试出方法了,特来分享一...

Linux 查看硬件磁盘存储大小和磁盘阵列(RAID)的组合方式

一、查看硬件磁盘存储大小查看所有磁盘信息:#lsblk该命令会列出所有磁盘(如/dev/sda、/dev/nvme0n1)及其分区和挂载点。查看磁盘总容量:fdisk-l#或parted-...

取消回复欢迎 发表评论: