未加星标

Linux 意外操作后如何进行数据抢救

字体大小 | |
[系统(linux) 所属分类 系统(linux) | 发布者 店小二03 | 时间 2017 | 作者 红领巾 ] 0人收藏点击收藏

Linux 意外操作后如何进行数据抢救

在 GUI 中使用 shift + delete 组合键或是 CLI 下使用 rm -rf 删除选项,这个文件并没有从硬盘(或是其它存储设备)上彻底销毁。当它文件被删除以后, inode 的数据指针部分被清零,仅仅是从系统的目录结构中被移除,但是这个文件仍然存在你磁盘中的某个 block 物理位置上。( ls -li 或 stat 查询一个文件所对应的inode的元信息数据。 )。

注意: 独立硬盘冗余阵列 ( RAID , R edundant A rray of I ndependent D isks)损坏或数据丢失,不在本次范围。

linux 系统管理员守则中有这么一条:“慎用 rm -rf 命令,除非你知道此命令所带来的后果“ 一、实验环境 1、工具

VMware Workstation 12 Pro 12.5.2 build-4638234

CentOS-6.5-x86_64-bin-DVD1.iso

2、约定

1、所有操作全部在虚拟机环境下完成,使用CentOS操作系统。关闭SELinux!

2、故障模拟如下:

# df -hT
* 显示当前系统配置情况,不同测试工具不同环境(每张图可体现是一个崭新的CentOS)
# openssl rand -base64 {num} -out {mount_path/filename}
使用 openssl 数据工具生成 {num} 位随机数。
# md5sum {mount_path/filename}
* 使用 md5sum 验证工具打印 {mount_path/filename} MD5信息
# rm -rf {mount_path/filename}
执行 rm -rf {mount_path/filename}
"#" 表示权限 "root"、"*" 表示必须截图体现,另特殊情况下也截图。心情好也截图 :)

3、测试情况下包括后续内容皆为 “配置好环境变量” 情况下。

0、不设置,可这么执行
{ProgramName}
/usr/bin/{ProgramName}
/usr/local/{ProgramName}/bin/{ProgramName} --help
1、设置别名,可永久生效
alias {ProgramName}="usr/local/{ProgramName}/bin/{ProgramName}"
2、设置环境变量,临时生效
export PATH=$PATH:/usr/local/{ProgramName}/bin
3、设置程序软链接,永久生效
ln -s /usr/local/{ProgramName}/bin/{ProgramName} /usr/bin/{ProgramName}

4、实验记录详情:

1、数据恢复:
单个文件(约定2已进行说明)
文件夹/目录(参见:https://github.com/erlinux/RecoverDateProject/tree/master/test)
2、更多包括:
格式支持、界面支持、恢复时长、恢复效果。(详情见文末表格)

5、模拟企业真实情况:

1、磁盘可卸除挂载
2、恢复程序编译安装

6、测试框架皆为:

1、通过文件系统的 inode 值(一般是 2 )来获取文件系统信息。
2、通过上步骤所得出的结论使用 inode 编号以及 filename 进行恢复。
3、通过程序自带的文件夹恢复 或 时间前后恢复 来恢复所删除的数据。
4、通过上述三种步骤所展现的情况(包括其他测试)进行详细的记录用于对比。 3、备注

1、为帮助大家更好理解已进行中文译化。

2、本人仅仅是一名学生,文章不当的地方还请指出。

3、最后祝各位新年快乐。鸡年大吉大利、心想事成、身体健康。( 就当新年礼物吧 ^_^ )

二、恢复工具

在恢复数据前,要弄清楚俩个概念:inode(索引节点) 和 block (数据块)

block 用于储存数据,inode 用于存储数据属性信息。inode 为每个文件进行信息索引,所以就有了 inode 的数值。

graph LR;
file(读写索引) --> date(数据块)
date --组合数据成为--> 标准文件;
移除文件--保存索引信息-->save(日志)
save-->删除索引指针; extundelete
Linux 意外操作后如何进行数据抢救
注意:即便不能实现重新只读挂载当前数据盘,也绝对不能在需要恢复文件的目录下进行操作。 1 -> 安装 # curl -O https://nchc.dl.sourceforge.net/project/extundelete/extundelete/0.2.4/extundelete-0.2.4.tar.bz2
# tar -jxvf extundelete-0.2.4.tar.bz2 && cd extundelete-0.2.4
# ./configure --prefix=/usr/local/extundelete
-------------------
configure: error: C++ compiler cannot create executables
# yum install gcc gcc-c++ -y
configure: error: Can't find ext2fs library
# yum install e2fsprogs.x86_64 e2fsprogs-devel.x86_64 e2fsprogs-libs.x86_64 -y
-------------------
make && make install 2 --> 选项 extundelete --help
用法: extundelete [选项] [--] 设备-文件
选项:
--version, -[vV] 打印版本并且正常退出.
--help, 打印帮助并且正常退出.
--[superblock](http://baike.baidu.com/view/1102790.htm) 除了剩余的内容之外,还打印超级块的内容。 默认选项
--journal 显示日志内容
--after dtime 只处理在 'dtime' 后被删除的条目
--before dtime 只处理在 'dtime' 前被删除的条目
功能:
--inode ino 显示 'ino' 的 索引节点 信息
--block blk 显示 'blk' 的 块 信息
--restore-inode ino[,ino,...] 恢复具有已知索引节点号 'ino', 已恢复的文件在当前目录的RECOVERED_FILES文件夹里创建 而文件的索引节点号作为扩展(ie:file.12345)
--restore-file 'path' 将恢复文件 'path'. 'path' 是相对于根分区而言的,并且不以 '/' 开头 已恢复的文件在当前目录的 'RECOVERED_FILES/path'.
--restore-files 'path' 列出将在 'path' 恢复的文件. 每个文件名格式应该与选项 --restore-file 相同,并且每行都应该有一个.
--restore-directory 'path' 恢复文件夹 'path'. 'path' 是相对于文件系统的根目录而言的. 已恢复的文件夹输出目录在'path'。
--restore-all 尝试去恢复一切
-j journal 从一个已命名的文件读取外部日志
-b blocknumber 当打开系统文件时,使用一个块数字备份超级快.
-B blocksize 当打开系统文件,使用 blocksize 作为一个块大小. 这个数字应该以 bytes 为单位.
--log 0 程序静默执行
--log filename 记录所有消息到文件.
--log D1=0,D2=filename 自定义控制以逗号分隔的日志消息
示例如下: 列出选项. Dn 必须是 info,warn 或者 error 中一个。
--log info,error 略去 ‘=name’ 信息中的结果
--log warn=0 将指定的级别记录到计算机控制台.如果变量为 '=0',指定的级别记录将被关闭.
--log error=filename 如果变量为'=filename',写入具有该级别的消息到文件名.
-o directory 保存恢复的文件到指定目录. 默认情况下,恢复的文件被创建在 'RECOVERED_FILES' 文件夹. extundelete /dev/sdb1 --inode 2
查找可恢复的数据信息,标记为Deleted状态的是已经删除的文件或目录。
Linux 意外操作后如何进行数据抢救
extundelete /dev/sdb1 --restore-inode 12,13
extundelete /dev/sdb1 --restore-file fstab
extundelete /dev/sdb1 --after 1293877800 --restore-all
在当前目录的 "RECOVERED_FILES" 下恢复恢复1293877800秒后的所有误删文件
Note: date -d "Jan 01 18:30 2011" +%s 3 --> 成功 ① 模拟故障 2e4c997cdbdf81b9419297ec156960e0 /mnt/extundelete/extundelete.asdasfsafds-test
Linux 意外操作后如何进行数据抢救
② 故障恢复 文件
Linux 意外操作后如何进行数据抢救
Linux 意外操作后如何进行数据抢救
目录
Linux 意外操作后如何进行数据抢救
Linux 意外操作后如何进行数据抢救
ext3grep
Linux 意外操作后如何进行数据抢救
1 -> 安装 # wget --no-check-certificate https://github.com/erlinux/RecoverProject/raw/master/soft/ext3grep/ext3grep-0.10.2.zip
Note:please use wget to download file,curl download will be fail.it's hard to say
# unzip ext3grep-0.10.2.zip && cd ext3grep-0.10.2
# ./configure --prefix=/usr/local/ext3grep
-------------------
configure: error: no acceptable C compiler found in $PATH
# yum -y install gcc
configure: error: C++ preprocessor "/lib/cpp" fails sanity check
# yum -y install gcc-c++
configure: error: Missing headers. Please install the package e2fslibs-dev from e2fsprogs, or http://e2fsprogs.sourceforge.net for the upstream tar-ball.
# yum install -y epel-release && yum install ext2fs blkid e2p uuid
-------------------
# make && make install 2 -->选项 Running ext3grep version 0.10.2
用法: /usr/local/ext3grep/bin/ext3grep [选项] [--] 设备-文件
选项:
--version, -[vV] 打印版本并且正常退出.
--help, 打印帮助并且正常退出.
--superblock 除了剩余的内容之外,还打印超级块的内容。 默认选项
--print 打印目录块inode号,如果有。
--ls 打印目录每个条目只有一行。 这个选项通常需要打开过滤。
--accept filen 允许 'filen' 作为合法文件名,可多次使用 如果改变任何 --accept 你必须删除 BOTH stage* 文件!
--accept-all 接受一切作为文件名
--journal 显示日志内容
--show-path-inodes 显示路径的每个目录inode号。
过滤:
--group grp 只处理组 'grp'。
--directory 只处理目录索引节点。
--after dtime 仅'dtime' 或之后删除的条目。
--before dtime 仅'dtime' 或之前删除的条目。
--deleted 只显示/处理已删除条目。
--allocated 只显示/处理指定的 inodes/blocks.
--unallocated 只显示/处理重新分配的 inodes/blocks.
--reallocated 不限制 inodes 重新分配的条目。

本文系统(linux)相关术语:linux系统 鸟哥的linux私房菜 linux命令大全 linux操作系统

分页:12
转载请注明
本文标题:Linux 意外操作后如何进行数据抢救
本站链接:http://www.codesec.net/view/529649.html
分享请点击:


1.凡CodeSecTeam转载的文章,均出自其它媒体或其他官网介绍,目的在于传递更多的信息,并不代表本站赞同其观点和其真实性负责;
2.转载的文章仅代表原创作者观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,本站对该文以及其中全部或者部分内容、文字的真实性、完整性、及时性,不作出任何保证或承若;
3.如本站转载稿涉及版权等问题,请作者及时联系本站,我们会及时处理。
登录后可拥有收藏文章、关注作者等权限...
技术大类 技术大类 | 系统(linux) | 评论(0) | 阅读(53)