admin管理员组文章数量:1570471
如果你不小心执行了rm -rf * 或者 rm -rf XXX,在ext2系统并不是不可以恢复的。
一. 首先需要明确几个基本概念:磁盘设备文件(简称硬盘)、分区、文件系统、目录&文件
- 磁盘:简单来说,/dev/sda、/dev/sdb均代表一个硬盘设备
- 分区:在磁盘上(设备文件上),处于使用目的将磁盘划分的不同区域,例如/dev/sda1、/dev/sda2是磁盘sda的分区;
/dev/sdb1、/dev/sdb2是磁盘sdb的分区。
- 文件系统:常见的有ext2、ext4,文件系统作用于分区上,如果一个文件系统有多个分区的话,每个分区都可以格式化成一种文件系统。
- 目录&文件:文件系统挂载(mount)以后,可以从挂载点(/)处访问整个分区的内容,执行创建文件、创建目录等操作
- 1. 应该立即停止对删除文件分区的数据写入,不确定有没有写入的话,直接卸载(umount)分区是最可靠的,原因:因为Linux删除文件并不是真实的删除磁盘分区中的文件,而是将文件inode节点中的扇区指针清除,同时释放这些指针对应的数据块,一旦有正在写入的数据,系统会对这些释放的数据块进行重新分配,就会导致那些删掉的数据被新数据覆盖,这样就永远无法恢复了,因此要立马卸载分区。如果确定没有写入,最好不要卸载分区。
- 2. 准备另外一个用于恢复写入的分区,用于存储恢复出来的文件
- 3. 恢复出来的文件是没有文件名的,只有一个inode编号,不过还是有很多办法准确恢复我们想要的很多数据
- 4. 需要这台机器的root权限
- 5. 删除的文件所在的文件系统是ext2,可以通过df -T命令查看文件系统类型
- 6. 机器安装有开源工具debugfs,Linux默认都自带的有,一般在root权限下,可以通过 whereis debugfs命令来查看是否存在
$cat /etc/passwd | grep "work" work:x:503:505::/home/work:/bin/bash 第三列 503就是work用户对应的uid 3. 查看被删文件所在的磁盘、分区、文件系统和挂载点 $df -T 可以看到被删文件在磁盘sda、分区/dev/sda6、文件系统类型ext2、挂载点/home下 4. 拿到root权限,切换到root用户 $su root 5. 查找开源工具debugfs的位置 $whereis debugfs debugfs: /sbin/debugfs /usr/share/man/man8/debugfs.8.gz 6. 找一个新的分区,/dev/sda5的/tmp挂载点下,新建文件夹dump,用于存储恢复的文件数据 $cd /tmp $mkdir dump 7. 运行debugfs打开文件所在分区
$ /sbin/debugfs debugfs 1.41.14 (22-Dec-2010)
debugfs: open /dev/sda6 8. 列出所有被删掉的文件的inode等信息
debugfs: lsdel
这个步骤可能时间比较长,debugfs会扫描整个sda6分区的inode节点,然后把被删的inode节点以more的形式打出来 <5、6>两个步骤一般会把被删掉的inode节点重定向到文件中,命令: echo “lsdel” | debugfs /dev/sda6 > /tmp/dump/ino.log ,info.log文件内容如下:
第一列是inode号(重要);第二列是uid;第4列是文件大小,最后一列是删除时间(重要) 9. 根据文件删除时间范围从info.log里定位被删除文件的inode信息 info.log列出的是历史所有被删的inode信息,因此根据 删除时间、 uid如果删除文件数比较少,还可以根据 删除文件个数、删除文件大小;来从info.log里定位所有被删掉文件的inode信息( 依据步骤1的时间点,步骤2的uid 503定位我自测删除的文件的部分inode信息如下图):重定向到/tmp/dump/nodeInfo.log里
10. 恢复被删除的数据 ####如果文件不多可以通过命令一个一个恢复,恢复的数据最好选择别的分区比如sda5, 防止被删磁盘数据被覆盖,恢复命令: $debugfs
debugfs 1.41.14 (22-Dec-2010)
debugfs: open /dev/sda6
debugfs: dump <12918785> /tmp/dump/aaa 即恢复了inode_id为 12918785的文件,存放目录为 /tmp/dump,vim aaa进去查看了下就是之前自测删掉的脚本内容 ####如果被删除文件比较多,最好选择批量恢复 a). 先把步骤9定位到的 nodeInfo.log的第一列,即所有inode_id取出来,重定向到inode_id.txt文件中,命令: $awk '{print $1}' inodeInfo.log >inode_id.txt b). 写批量恢复文件的脚本1.sh: #!/bin/sh
cat inode_id.txt | while read LINE
do
echo "dump <$LINE> /tmp/dump/$LINE" | debugfs /dev/sda6
done c). $ sh 1.sh 执行恢复数据dump命令 运行完后去去/tmp/dump目录查看,即可看到目录下生成了所有被删除的文件 文件都是以inode_id号命名,根据文件内容可以找到丢失的重要数据。
版权声明:本文标题:ext2文件系统下rm-rf * 误删数据恢复 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/xitong/1726035073a1052833.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论