目录
1. 如何使用 rm 命令
在生产环境中尽量避免使用rm
命令,可以用过mv
命令代替,将要删除的文件或目录 mv
到 tmp
目录下,在使用脚本定期清理tmp
下的内容。这样做,一定程度上降低了误删数据的风险。
保证数据安全最好的办法就是备份,因此在生产环境中应以备份为核心,然后把数据恢复作为辅助。
2. extundelete 介绍
在 Linux 下,数据恢复工具有很多,最常用的为extundelete
。
extundelete
它通过分析文件系统的日志,解析出所有文件的 inode 信息,从而恢复ext3,ext4文件系统下被误删的文件。extundelete
的恢复机制是扫描 inode 和恢复数据同时进行,支持单个文件,单个目录,inode,block,完整磁盘恢复等。
3. 安全extundelete
extundelete
官网http://extundelete.sourceforget.net/
,在安装extundelete
前先用yum
安装两个依赖包e2fsprogs
和e2fsprogs-lib
。
下面是安装extundelete
过程:
tar -jxvf extundelete-0.2.4.tar.bz2
cd extundelete-0.2.4
./configure
make
make install
安装成功后,会生成一个extundelete
可执行文件,使用extundelete --help
获取使用方法。
4. extundelete用法详解
extundelete
用法如下:
extundelete [option] [action] device-file
其中,参数(option)有:
- –version,-[vV],显示软件版本号
- –superblock,显示超级块信息
- –journal,显示日志信息
- –after dtime,时间参数,表示在某段时间之后被删的文件或目录
- –before dtime,时间参数,表示在某段时间之前被删的文件或目录
- –restore-file ‘path’,恢复命令参数,表示将恢复指定路径的文件,并把恢复后的文件放在当前目录下的 RECOVERED_FILES 目录中。
- –restore-files ‘path’,表示将恢复在路径中已列出的所有文件。
- –restore-all,表示恢复所有目录和文件
5. extundelete 实战
在数据被误删后,第一时间是卸载被删数据所在的磁盘或磁盘分区,如果是系统根分区的数据被删,需要进入单用户模式,并把根分区以只读模式挂载,防止数据块被新的数据覆盖后,数据完全丢失。
5.1 模拟数据误删
模拟数据误删:
mount /dev/sdc1 /data
cp /etc/passwd /data
cp -r /app/ngix /data
rm -rf /data/*
5.2 卸载磁盘分区
在将数据误删后,立刻需要做的就是卸载这块磁盘分区:
umount /data
5.3 查询可恢复的数据信息
通过命令可查询/dev/sdc1
分区可恢复的数据信息:
extundelete /dev/sdc1 --inode 2
#这里--inode 2 查看根目录的 inode,可以通过命令 ls -id / 来查询根目录的
inode
上面命令的输出中标记 Delete 的状态是已经删除的文件或目录,同时能看到被删除文件的 inode,接下来可以恢复这些文件。
5.4 恢复单个文件
执行以下命令恢复单个文件:
extundelete /dev/sdc1 --restore-file passwd
#这里恢复 passwd 单个文件
#恢复成功后文件会保存在当前目录的 RECOVERED_FILES目录下,可以 cd 进去找到
5.5 恢复单个目录
恢复/data
下的/app/ngix
文件夹操作如下:
extundelete /dev/sdc1 --restore-directory /nigx
#恢复成功后文件会保存在当前目录的 RECOVERED_FILES目录下,可以 cd 进去找到
5.6 恢复所有误删数据
恢复整个/dev/sdc1
命令如下:
extundelete /dev/sdc1 --restore-all
#恢复成功后文件会保存在当前目录的 RECOVERED_FILES目录下,可以 cd 进去找到
5.7 恢复某个时间段的数据
恢复某时间段命令如下:
extundelete /dev/sdc1 --after 1570816318 --restore-all /dev/sdc1
#这里1570816318是时间,起算时间为“1970-01-01 00:00:00 UTC”通过 “date #+%s”命令可以得到
#恢复成功后文件会保存在当前目录的 RECOVERED_FILES目录下,可以 cd 进去找到