多学一点(十二)——使用extundelete恢复Linux下误删除文件

通常来说,对于重要文件我们都应该定期备份(如 /etc 下的配置文件),以免在喝醉了手残了等异常状态下将重要文件误删除。然而,如果意外真的发生,而我们又没有做好备份,那赶紧试试手动恢复吧,这里使用的文件恢复软件为 extundelete 。

1.重新挂载分区为只读状态:

这是恢复文件的第一步,也是最关键的步骤之一。假如我们误删除的文件为 /data/catalina.out , /data 目录为 /dev/sdb5 的挂载点,因为对分区的写操作可能会导致我们恢复文件失败,所以要将该分区重新挂载为只读形式:

[[email protected] ~]# mount -o remount,ro /dev/sdb5

执行该命令很可能会有错误提示出现,一般来说为目录被占用等信息,如下:

mount: /data isbusy

这时使用 fuser 命令查看哪些用户的那些进程在使用该目录:

[[email protected] ~]# fuser -mv /data

USER     PID   ACCESS  COMMAND

/data:      mysql      4345   F.c..  mysqld

不难发现是 mysqld命令在使用该目录,在不知道如何关闭 mysql 的情况下,使用 killall 命令结束进程:

[[email protected] ~]# killall mysqld

之后再次挂载便可成功:

[[email protected] ~]# mount -o remount,ro /dev/sdb5

通过在 /data 目录下新建文件检验分区是否已经不可写入:

[[email protected] ~]# touch /data/testfile.txt

touch: cannottouch `/data/testfile.txt‘: Read-only file system

出现以上信息表明此时/data 目录已经变为只读。

2.安装extundelete:

exundelete 官方网站http://extundelete.sourceforge.net,在上面下载较慢,我们使用如下下载地址 http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2

[[email protected] ~]# cd /usr/local/src
[[email protected] src]# wget http://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
[[email protected] src]# tar jxf extundelete-0.2.4.tar.bz2
[[email protected] src]# cd extundelete-0.2.4

./configure 过程中需要用到 gcc-c++ 库及 e2fsprogs-devel 库,使用yum 进行安装:

[[email protected] ~]# yum install -y gcc-c++ e2fsprogs-devel

库文件安装完成后,./configure , make , makeinstall :

[[email protected] extundelete-0.2.4]# ./configure --prefix=/usr/local/extundelete
[[email protected] extundelete-0.2.4]# make && make install

3.使用extundelete恢复文件:

[[email protected] ~]# cd /usr/local/extundelete

(1)查看指定分区下文件的删除状态:

[[email protected] extundelete]# ./bin/extundelete /dev/sdb5 --inode 2

File name        | Inode number | Deleted status

.               2

..              2

lost+found         11

mysql            49153

catalina.out       12         Deleted

.catalina.out.swp    12         Deleted

.catalina.out.swx    14         Deleted

其中,catalina.out是我们误删除的文件,现在其状态为已删除,使用如下命令恢复文件:

[[email protected] extundelete]# ./bin/extundelete /dev/sdb5 --restore-file catalina.out

NOTICE: Extendedattributes are not restored.

Loadingfilesystem metadata ... 130 groups loaded.

Loading journaldescriptors ... 4735 descriptors loaded.

Block 796156 isallocated.

Successfullyrestored file catalina.out

出现以上信息表示文件恢复成功,恢复后的文件位于当前目录下的RECOVERED_FILES 中:

[[email protected] extundelete]# ls RECOVERED_FILES

catalina.out

注:

如果想恢复整个分区上的文件,使用如下命令:

[[email protected] extundelete]# ./bin/extundelete /dev/sdb5 --restore-all

4.收尾工作:

恢复成功后别只顾着高兴,别忘了误删文件所在的分区仍在只读状态,将其重新挂载为读写状态:

[[email protected] ~]# mount -o remount,rw /dev/sdb5

将误删文件移动到原位置:

[[email protected] ~]# mv /usr/local/extundelete/ RECOVERED_FILES/catalina.out /data/

最后,吸取教训,做好备份,尽量避免误删除,因为误删后能否恢复谁也不敢肯定,同时,磁盘要做好分区,如果全部都在 / 分区下,想要恢复就难上加难了。

补充:fuser 命令

该命令可以显示出当前哪个程序在使用磁盘上的某个文件、挂载点甚至网络端口,并给出程序进程的详细信息。常用参数:

-m 指定要查看的分区或挂载点

-v 列出详细信息,如进程所属用户,进程相关命令等,如果不使用该参数则只列出 PID

-u 列出进程所属用户

-k 发送kill -9 信号结束与当前目录或挂载点相关的进程,使用 -signaln 可以指定其他信号量,但-signal 和 -k 同时使用时前者失效

假如现在要查看使用 /dev/sdb5 分区的进程,该分区的挂载点为 /data :

[[email protected] ~]# fuser -mv /dev/sd5  //或者
[[email protected] ~]# fuser -mv /data
时间: 2024-10-15 14:45:41

多学一点(十二)——使用extundelete恢复Linux下误删除文件的相关文章

恢复Linux下被误删除的文件(笔记)

恢复Linux下被误删除的文件 [[email protected] ~]# mount /dev/cdrom /mnt/ 分一个区:sda4  查找:extundelete 分一个区:sda4  [[email protected] ~]# mkdir /tmp/sda4 [[email protected] ~]# mkfs.ext4 /dev/sda4     格式化 [[email protected] Desktop]# echo $? 0 [[email protected] ~]#

Linux下的文件压缩归档与系统进程管理

Linux下的文件压缩归档与系统进程管理   一:实验环境 1):在虚拟机下配置好linux系统 2):了解文件压缩归档的含义 二:实验目标 1):理解并会用文件的压缩归档 2):熟练掌握文件压缩归档的命令 3):理解各种压缩形式的使用环境 4):理解个文件的压缩区别 三:实验步骤 一:压缩的常用形式及命令 1):常用形式 grub.tar grub.tar.bz2 grub.tar.gz grub.tar.zip 2):压缩命令分析 [[email protected] test]#tar -

linux下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令.   /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示.   /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件.   /sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序. /tmp:公用的临时文件存储 点. /root:

【转】linux下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示. /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件. /sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序. /tmp:公用的临时文件存储 点. /root:系统管理员的

纯干货!Linux 下各文件夹的结构说明及用途介绍

linux下各文件夹的结构说明及用途介绍: /bin:二进制可执行命令. /dev:设备特殊文件. /etc:系统管理和配置文件. /etc/rc.d:启动的配 置文件和脚本. /home:用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示. /lib:标准程序设计库,又 叫动态链接共享库,作用类似windows里的.dll文件. /sbin:系统管理命令,这 里存放的是系统管理员使用的管理程序. /tmp:公用的临时文件存储 点. /root:系统管理员的

修改Linux下的文件以及文件夹的权限

如何在Linux中管理文件和文件夹的权限? 2014-02-12 10:58 布加迪编译 51CTO 字号:T | T Linux系统有严格的权限管理制度,操作者权限与文件权限不匹配时将无法对文件进行任何操作.对许多Linux用户来说,习惯于文件的权限和所有权可能有点难度.本文从命令行开始入手,教您在Linux中管理文件和文件夹权限的方法. AD:51CTO学院:IT精品课程在线看! [51CTO精选译文]对许多Linux用户来说,习惯于文件的权限和所有权可能有点难度.人们通常认为,想进入到这种

linux下遍历文件夹---opendir等用法

首先要说肯定是头文件,#include <sys/types.h>   #include <dirent.h> linux下遍历文件夹需要用到以下几个函数,其中有三个是必须的,其它几个是可选的. DIR* opendir(const char * name);   失败返回NULL.成功返回DIR结构体.注意DIR前面没有struct,如果加上编译器会warning struct dirent *readdir(struct DIR* dir);   失败返回NULL. void

Linux下的文件夹创建命令使用实践

[文章摘要] 本文以实际的C源程序为样例,介绍了Linux下的文件夹创建命令(mkdir)的用法.为相关开发工作的开展提供了故意的參考. [关键词] C语言  Linux  文件夹创建  makefile  开发 一.mkdir命令简单介绍 mkdir命令用来创建指定名称的文件夹,其命令格式为:mkdir [选项] 文件夹... 当中,[选项]能够是"-m"."-p"或"-v". 此外,文件夹名是区分大写和小写的. 二.本程序流程 本文中的程序用

Linux下远程文件传输命令——scp

SCP- secure copy (remote file copy program) 命令原型:  scp [-1246BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file] [-l limit] [-o ssh_option] [-P port] [-S program] [[[email protected]]host1:]file1 ... [[[email protected]]host2:]file2 命令描述: scp用于通过网