恢复Linux下误删除的文件
1.恢复Linux下误删除的文件
删除文件和文件夹
rm -rf 文件名或目录名
-r 递归删除(可以删除目录和目录里面的东西)
-f 强行删除
ext4文件系统上删除文件,可以恢复: extundelete
windows恢复误删除的文件: final data v2.0 汉化版 和 easyrecovery
Linux文件系统由三部分组成:文件名,inode(索引节点),block(块)
a.txt inode block
文件名 存放文件元数据信息 真正存放数据
查看文件inode号:
[root@xuegod72 mnt]# ls -i a.txt
查看inode中的文件属性; 通过stat命令查看inode中包含的内容
[root@xuegod72 mnt]# stat a.txt
块
block块:真正存储数据的地方
块大小是可以改变的
假设我们的块大小为 2M,而我们现在的数据为101M ,那么我们需要多少个块呢?
101/2 需要50还是51个块
UMOUNT
如何避免误删除的文件内容被覆盖???
卸载需要恢复文件的分区:或以只读的方式挂载
下载extundelete
http://sourceforge.net/ 开源软件发布中心
准备测试分区:
[root@localhost ~]# fdisk /dev/sdb
输入
n:新建
p:主分区
1:分区号
w:保存
[root@localhost ~]# ls /dev/sdb*
[root@localhost ~]# partx -a /dev/sdb #获得新分区表
[root@localhost ~]# mkfs.ext4 /dev/sdb1
挂载
[root@localhost ~]# mkdir /sdb1
[root@localhost ~]# mount /dev/sdb1 /sdb1
[root@localhost ~]# df -Th |tail -1
复制一些测试文件,然后把这些文件再删除:
[root@localhost ~]# cp /etc/passwd /sdb1
[root@localhost ~]# cp /etc/hosts /sdb1
[root@localhost ~]# echo aaa > a.txt
[root@localhost ~]# mkdir -p /sdb1/a/b/c
[root@localhost ~]# cp a.txt /sdb1/a/
[root@localhost ~]# cp a.txt /sdb1/a/b/
[root@localhost ~]# touch /sdb1/a/b/kong.txt
安装tree命令:
[root@localhost Packages]# rpm -ivh tree-1.5.3-2.el6.x86_64.rpm
[root@localhost Packages]# tree /dev/sdb1 #采用树显示 /dev/sdb1中的文件目录
删除文件并卸载分区:
[root@localhost sdb1]# pwd
/sdb1
[root@localhost sdb1]# ls
a hosts lost+found passwd
[root@localhost sdb1]# rm -rf a passwd hosts
[root@localhost sdb1]# ls
lost+found
如何避免误删除的文件内容被覆盖???
卸载需要恢复文件的分区(卸载当前目录必须退出当前才行):或以只读的方式挂载
[root@localhost sdb1]# cd ..
[root@localhost sdb1]# umount /dev/sbd1
从windows上传extundelete文件到linux,安装xmanager或者CRT
解压并安装extundelet
[root@localhost ~]# ls
[root@localhost ~]# tar jxf extundelete-0.2.4.tar.bz2
[root@localhost ~]# cd extundelete-0.2.4
[root@localhost extundelete-0.2.4]# rpm -ivh /media/RHEL_6.5\ x86_64\ Disc\
[root@localhost extundelete-0.2.4]# ./configure
[root@localhost extundelete-0.2.4]# make && make install
make:编译,把源代码编译成可执行的二进制文件
make install 安装
开始恢复
可以通过以下几种方法来进行恢复:
通过inode节点恢复
通过文件名恢复
恢复某个目录,如目录a下的所有文件:
恢复所有的文件
[root@localhost ~]# mkdir /test #创建一个目录用来存放恢复的数据和目录
[root@localhost ~]# cd /test/
首先先查看一下删除文件的节点号
[root@xuegod63 ~]# extundelete /dev/sdb1 --inode 2
方法1:通过inode节点恢复
[root@localhost test]# extundelete --restore-inode 12 /dev/sdb1 #12为上一步中inode
[root@localhost test]# ls #查看恢复的文件
RECOVERED_FILES
如何查看恢复后的文件和原来的文件一致呢?我们可以用diff命令
[root@localhost RECOVERED_FILES]# diff file.12 /etc/passwd
[root@localhost RECOVERED_FILES]# #没有任何输出,说明结果一样
方法二,通过文件名恢复
[root@localhost test]# extundelete --restore-file passwd /dev/sdb1
[root@localhost test]# ls
RECOVERED_FILES
[root@localhost test]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# diff passwd /etc/passwd
方法三:恢复某个目录,如目录a下的所有文件:
[root@localhost test]# extundelete --restore-directory a /dev/sdb1
[root@localhost test]# ls RECOVERED_FILES/
a file.12 passwd
[root@localhost test]# cd RECOVERED_FILES/
[root@localhost RECOVERED_FILES]# ls
a file.12 passwd
[root@localhost RECOVERED_FILES]# tree a
方法四:恢复所有的文件
[root@localhost test]# extundelete --restore-all /dev/sdb1
[root@localhost test]# ls RECOVERED_FILES/
a file.12 hosts passwd passwd.v1
extundelete在恢复文件的时候能不能自动创建空文件和目录?
答:不能。
REHL7 xfs系统 可以的
使用 xfsdump 时,请注意底下的限制:
xfsdump 不支援没有挂载的文件系统备份!所以只能备份已挂载的!
xfsdump 必须使用 root 的权限才能操作 (涉及文件系统的关系)
xfsdump 只能备份 XFS 文件系统啊!
xfsdump 备份下来的数据 (档案或储存媒体) 只能让 xfsrestore 解析
xfsdump 是透过文件系统的 UUID 来分辨各个备份档的,因此不能备份两个具有相同 UUID 的文件系统